서적/Effective Modern C++
항목 8: 0과 NULL보다 nullptr를 선호하라
리터럴 0은 int이지 포인터가 아니다. NULL도 포인터 형식이 아니라는 점. void f(int);//f의 3 가지 오버로딩 void f(bool); void f(void*); f(0);//f(int) 호출 f(NULL)//보통 f(int) 호출 nullptr의 장점은 정수 형식이 아니다. 사실 포인터 형식도 아니다? 이 책보면서, 아쉬운건 번역이나 뭔가 어순?이 안 맞음. 내 맞춤법 마냥 답 없음 nullptr의 실제 형식은 std::nullptr_t인데, std::nullptr_t 자체는 다시 "nullptr의 형식"으로 정의(순환 정의) f(nullptr);//f(void*) 오버로딩 호출 nullptr 은 코드의 명확성 높여준다. auto result = findRecord(...); if(r..
항목 7: 객체 생성 시 괄호(())와 중괄호({})를 구분하라
C++11에서는 객체 생성 구문이 아주 다양해졌다. C++ 에서는 Class 개념이 있기 때문에 초기화와 배정이 각자 다른 함수들을 호출한다. 정확하게 괄호/중괄호를 이해하고 써야하는 이유이다. 중괄화 초기화를 선호한다. 절대 여기만 보고 페이지 넘기지마세요~ 초반에만 중괄호 초기화에 대한 내용을 기술하고, 후반부터는 단점을 기술한다. 장점 1: narrowing conversion을 방지 double x, y, z; int sum1{ x + y + z};//오류! double들의 합을 int로 표현하지 못할 수 있음 괄호나 "="를 이용한 초기화는 이러한 좁히기 변환을 점검하지 않는다. 장점 2: 가장 성가신 구문 해석에 자유롭다는 점 가장 성가신 구문 해석은 "선언으로 해석할 수 있는 것은 항상 선언..
항목 6: auto가 원치 않은 형식으로 연역될 때에는 명시적 형식의 초기치를 사용하라
항목 5에서 설명했듯이, auto를 사용해서 변수를 선언하면 형식을 명시적으로 지정했을 때보다 기술적으로 여러 가지 장점이 있다. 그러나 가끔은 auto의 형식 연역이 딴전을 부리기도 한다. Widget w; ... bool highPriority = features(w)[5];//w의 우선순위가 높은가? ... processWidget(w, highPriority);//w를 그 우선순위에 맞게 처리한다 해당 코드는 잘 작동하지만, 아래 코드는 예측할 수 없다. auto highPriority = features(w)[5];// w의 우선순위가 높은가? processWidget(w, highPriority);//미정의 행동 auto를 사용하는 버전에서 highPriority의 형식은 더 이상 bool이 ..
항목 5: 명시적 형식 선언보다는 auto를 선호하라
먼저, Effective Modern C++을 책을 읽기 시작했습니다. 항목 1~4는 어딨을까요? 필자는 템플릿을 문법만 알지.. 잘 쓰지 못한다.. 그래서 잠깐 스킵 auto 의 장점 1. 변수의 초기화를 빼먹는 실수를 방지한다. int x1;//문맥에 따라서는 초기화되지 않을 수 있음 auto x2;//Error auto x3 = 0; //Ok 2. 반드시 형식을 지정해줘야 하는 경우보다 편리성과 효율성에서 장점을 가진다. std::function 객체를 통해서 클로저를 호출하는 것은 거의 항상 auto로 선언된 객체를 통해 호출하는 것보다 느리다. 메모리와 시간을 더 많이 소비한다. 와우....처음 알았음.. 3.32 bit -> 64bit 이식할 때 문제 방지를 할 수 있다. 4. 리팩토링의 장점..