Effective C++/Chapter 1: C++에 왔으면 C++의 법을 따릅시다. 4

[Effective C++] 항목 4: 객체를 사용하기 전에 반드시 그 객체를 초기화하자

1. 초기화 여부를 파악하긴 난해하다.C++의 변수 초기화가 중구난방은 아니다. 초기화가 보장되는 경우와 아닌경우가 분명하게 존재한다. 그러나 그 조건을 전부 알고있기엔 너무나 복잡하다. 기본적으로 C부분만 보면 초기화에 런타임 비용이 소모된다면 초기화가 보장되지 않습니다. EX) : C의 배열은 초기화 보장이 안되지만 C++의 STL인 vector는 초기화 보장이 됩니다. 결론은 초기화 되는지 안되는지 다 파악하는 것은 상당히 난해하기에 그냥 항상 초기화를 해주는 것이 가장 좋습니다. 이러한 방식들이 초기화입니다.int x=0;const char* text = "Hello Yeoul";double d;std::cin >> d; 2.대입, 초기화를 혼동하지 말자 아래의 경우는 초기화를 하는 것이 아니라 ..

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

0. 함수에서 const 위치 개념잡기0-1. const가 앞에 있을 경우const int getValue() { return 42;} 이 경우, const는 함수의 반환값이 const라는 것을 의미합니다. 반환되는 int 값을 수정할 수 없습니다. 하지만 기본 타입(int, double 등)의 반환값은 이미 rvalue(우측값)이므로 수정이 불가능합니다. 따라서 기본 타입의 경우 반환 타입에 const를 붙이는 것은 실질적으로 의미가 없습니다. 그러나 포인터나 참조를 반환할 때는 의미가 있습니다: const int* getPointer() { static int value = 42; return &value; // 포인터가 가리키는 값을 수정할 수 없음} 0-2. const가 뒤에 있..

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

C++에서는 선언(declaration)과 정의(definition)를 구분합니다:선언: 컴파일러에게 이름과 타입을 알려주는 것정의: 실제 메모리 할당이 이루어지는 것 1. #define을 지양해야 하는 이유들1-1. 컴파일 곤란#define ASPECT_RATIO 1.653 만약 이러한 코드를 쓰게 된다면 우리는 ASPECT_RATIO라는 이름으로 쓰지만 컴파일러는 이를 전부 1.653으로 인식하게 됩니다. 컴파일러로 넘어가기 전 선행처리자가 전부 1.653으로 바꾸어 버리기 때문입니다. 만약에 이부분에서 컴파일 에러가 발생하면 1.653이 에러메시지에 떠서 문제를 찾기 어려워질 수 있습니다. 매크로 상수는 기호 테이블에 기록되어 있지 않습니다. 그저 1.653으로 대체되어서 컴파일 될뿐입니다. 해결책..

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

04/12 오전 2시 Effective C++ 완독을 향한 여정을 시작합니다.1. C++의 발전초창기의 C++은 단순히 클래스를 쓰는 C++이었습니다. 그러나 C++은 시간이 지나면서 많은 발전을 했고 우리는 이것은 다중 패러다임 언어(Multiparadigm programming language) 이라고 부릅니다. 절차적, 객체 지향, 함수식, 일반화, 메타프로그래밍을 지원합니다. 2. C++을 연합체로 보자C++을 단일 언어에서 상관관계가 있는 여러 언어의 연합체로 보자. 그런뒤 각 언어에 대한 규칙을 각개 격파하자. 이러면 단순, 명확하고 기억하기도 편리하다. 그렇다면 C++는 어떠한 하위 언어로 이루어져 있을까? 2-1. C C++은 C를 기본으로 하고있다.그러나 C만 쓰기엔 기능이 너무 부족하다..