EffectiveC++

    [Effective C++]항목 3: 낌새만 보이면 const를 들이대 보자!

    포인터에도 const사용해야하는 경우에는 적극적으로 사용한다. 1) 포인터 주소를 const = * const type 포인터명 2) 데이터 = const * type 포인터명 / const type *포인터명 포인터의 사용은 프로그래머의 실수를 줄여준다. const는 컴파일러에서 상수화해주기 때문에 성능을 좀 더 높일 수 있다. 상수성에는 크게 비트수준 상수성, 물리적 상수정, 논리적 상수성이 있으며, C++에서 정의하는 상수성은 비트수준 상수성이다. 비트수준의 상수성은 비트수준에서 변경점이 없어야한다. 컴파일러는 대입연산이 수행되었는지만 확인해보면 된다. 상수 멤버함수에서 데이터를 수정하려면 변수 앞에 mutable을 붙여서 상수 멤버함수 안에서 수정이 가능하나, 좋은 방법은 아니므로 꼭 필요한 상황..

    [Effective C++]항목 2: #define을 쓰려거든 const, enum, inline을 떠올리자

    #define으로 선언하게 되면 값의 이름은 symbol table에 들어가지 않으므로 이슈 발생 시 Debugging으로 추적이 불가하다. 따라서, #define PI 3.14 => const double PI = 3.14; 로 선언하는 것이 좋다. 또한, 여러 번 사용하더라도 한 개의 사본만 생성하기 때문에, #define을 사용하는 것에 비해 바이너리 사이즈를 감소시킬 수 있다. * symbol table: 컴파일러에서 생성한 변수나 함수의 이름들을 말한다.

    [Effective C++]항목 1: C++를 언어들의 연합체로 바라보는 안목은 필수

    c++은 여러개의 하위 언어를 제공한다. 1. C : 블록, 문장, 선행 처리자, 기본제공 데이터타입, 배열, 포인터 등 모든 것이 C++에서 왔다. 2. 객체 지향 개념의 C++ : 클래스, 캡슐화, 상속, 다형성, 가상 함수(동적 바인딩) 3. 템플릿 C++: 템플릿 메타프로그래밍(template metaprogramming: TMP)이 파생된 것처럼 템플릿을 사용하면 C++에서 적용할 수 있는 범위가 아주 넓다. 템플릿을 잘 사용하면 C++프로그래밍을 잘 할 수 있다. 4. STL(Standard template library): 컨테이너(vector, queue, deque등), 반복자(iterator), 알고리즘, 함수객체(function object) 등 라이브러리를 C++을 사용할 수 있다...