항목 4 : 객체를 사용하기 전에 반드시 그 객체를 초기화하자 단순 선언 시, 객체의 값을 초기화하는 데 있어서 C++은 항상 초기화를 보장하지는 않습니다. 1 2 3 4 5 6 class Point { int x, y; }; ... Point p; 위와 같이 하였을 때, p의 데이터 멤버 역시 어떤 상황에서는 초기화가 보장되지만 어쩔 때는 안됩니다. C++의 C부분만을 쓰고 있으며 초기화에 런타임 비용이 소모될 수 있는 상황이라면 값이 초기화된다는 보장이 없습니다. 하지만 STL부분에서는 초기화가 됩니다. 가장 좋은 방법은 모든 객체를 사용하기 전에 항상 초기화하는 것입니다. 기본제공 타입으로 만들어진 비멤버 객체에 대해서는 초기화를 손수 해야 하겠습니다. 1 2 3 4 5 6 int x = 0; //..
항목 3 : 낌새만 보이면 const를 들이대 보자! const의 장점은 '의미적인 제약'을 소스 코드 수준에서 붙인다는 점과 컴파일러가 이 제약을 단단히 지켜준다는 점일 것입니다. const 키워드는 클래스 바깥에서는 전역 혹은 네임스페이스 유효범위의 상수를 선언(정의)하는 데 쓸 수 있습니다. 그뿐 아니라 파일, 함수, 블록 유효범위에서 static으로 선언한 객체에도 const를 붙일 수 있습니다. 클래스 내부의 경우에는, 정적 멤버 및 비정적 데이터 멤버 모두를 상수로 선언할 수 있습니다. 포인터에서 const는 아래와 같이 사용할 수 있습니다. 1 2 const int * a = data // 비상수 포인터, 상수 데이터 int * const a = data // 상수 포인터, 비상수 데이터 1..
항목 2 : #define을 쓰려거든 const, enum, inline을 떠올리자 #define ASPECT_RATIO 1.653 이라는 코드를 작성했을때 작성자에게는 ASPECT_RATIO가 기호식 이름으로 보이지만 컴파일러에게는 보이지가 않습니다. 선행 처리자가 숫자 상수로 바꾸어 버리기 때문입니다. 그 결과로, ASPECT_RATIO라는 이름은 컴파일러가 쓰는 기호 테이블에 들어가지 않습니다. 만약 숫자 상수로 대체된 코드에서 컴파일 에러라도 발생하면 헷갈릴 수 있는 여지가 존재합니다. 이 문제의 해결법은 매크로 대신 상수를 쓰는 것입니다. const double AspectRatio = 1.653; AspectRatio는 언어 차원에서 지원하는 상수 타입의 데이터이기 때문에 컴파일러의 눈에도 보..
항목 1 : C++를 언어들의 연합체로 바라보는 안목은 필수 오늘날의 C++는 다중패러다임 프로그래밍 언어라고 불린다. 절차적 프로그래밍을 기본으로 하여 객체 지향, 함수식, 일반화 프로그래밍을 포함하며 메타프로그래밍 개념까지 지원하고 있다. C++을 단일 언어로 바라보는 시야를 넓혀 상관관계가 있는 여러 언어들의 연합체로 보자! 1. C 2. 객체 지향 개념의 C++ 3. 템플릿 C++ 4. STL 즉 C++은 한 가지 프로그래밍 규칙 아래 똘똘 뭉친 통합 언어가 아니라 네 가지 하위 언어들의 연합체이다! 꼭 잊지 말아야 할 것! C++를 사용한 효과적인 프로그래밍 규칙은 경우에 따라 달라진다. 그 경우는 C++의 어떤 부분을 사용하느냐이다.