프로그래밍 언어/C & C++ 정리

effective c++

뽀또치즈맛 2023. 11. 5. 13:05

 
TR1
 TR1 C++ 표준 라이브러리에 새로 추가되는 기능들에 대한 명세이다.
새로 추가된 기능들은 클래스 및 함수 템플릿이 주류인데,
해시 테이블, 참조 카운팅 방식 스마트 포인터, 정규 표현식 등이다.
TR1의 모든 구성요소는 tr1 네임스페이스에 들어 있고,
tr1 네임스페이스는 std 네임스페이스 안에 중첩되어 있다.
 
Boost
 C++ 라이브러리를 제공하는 단체로 TR1의 구성요소 대부분이 이곳에서 만들어졌다.
TR외의 유익한 많은 것들을 참고할 수 있다.
http://boost/org
 
C++의 구성 방식과 규칙
 
C++는 다중패러다임 프로그래밍 언어로
절차적 프로그래밍을 기본으로 객체 지향, 함수식, 일반화 프로그래밍을 포함하여
메타프로그래밍 개념까지 지원한다.
 
C++을 구성하는 하위 언어
C언어, 객체 지향 개념의 C++(OOP 등), 템플릿 C++(TMP 등), STL이 있다.
 
C++를 사용한 효과적인 프로그래밍 규칙은 경우에 따라 달라진다.
이는 바로 C++를 구성하는 어떤 부분을 사용하느냐에 따라 달린다.
 
#define 쓰려면 const, enum, inline 떠올리기
 
매크로는 일단 정의되면 컴파일이 끝날 때 까지 유효하다.
이는 즉, 클래스 상수를 정의하는 데 쓸 수 없고 캡슐화의 이점도 얻어갈 수 없다는 뜻이다.
 
만약 불분명한 자료형을 받을 때는 함수 템플릿으로 인라인 사용하기
 
 
const
어떤 반복자를 const로 선언하는 것은 포인터를 상수로 선언하는 것과 같다.
const의 가장 강력한 용도는 함수 선언에 쓸 경우이다.
함수 선언 문에 있어서는 const는 함수 반환 값, 각각의 매개변수,
멤버 함수 앞에 붙을 수 있고, 함수 전체에 대해 const의 성질을 붙이는 것이 가능하다.
 
비트수준 상수성(물리적 상수성)
어떤 멤버 함수가 그 객체의 어떤 데이터 멤버도 건드리지 않아야 한다(정적 멤버 제외).
멤버 함수가 const인 개념
C++에서 정의하고 있는 상수성이 비트수준 상수성
 
논리적 상수성
논리적 상수성은 물리적 상수성의 의도치 않은 상황을 보완하기 위해 나온 개념이다.
상수 멤버 함수라고 해서 객체의 한비트도 수정할 수 없는 것이 아니라 일부 몇 비트 정도는 바꿀 수 있되,
그것을 사용자측에서 알아채지 못하게만 하면 상수 멤버 자격이 있다는 것이다.
 
const를 붙여 선언하면 컴파일러가 사용상의 에러를 잡아내는 데 도움을 준다.
const는 어떤 유효범위에 있는 객체에도 붙을 수 있으며,
함수 매개변수 및 반환 타입에도 붙을 수 있으며 멤버 함수에도 붙을 수 있다.
 
컴파일러 쪽에서 보면 비트수준 상수성을 지켜야 하지만,
클라이언트는 개념적인(논리적) 상수성을 사용해서 프로그래밍 해야한다.
 
상수 멤버 및 비 상수 멤버 함수가 기능적으로 서로 똑같게 구현되어 있을 경우에는
코드 중복을 피하는 것이 좋은데, 이때 비상수 버전이 상수 버전을 호출하도록 만들자.
 

'프로그래밍 언어 > C & C++ 정리' 카테고리의 다른 글

C++/ CX 와 C++/ CLI 의 차이  (0) 2023.11.21
C++ 오류 처리  (0) 2023.11.17
<memory> smart pointer  (0) 2023.10.29
const 및 volatile 포인터  (0) 2023.10.29
volatile  (0) 2023.10.29