목록Tutorials/C++ : Advanced (99)
KoreanFoodie's Study
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 4 : 연역된 형식을 파악하는 방법을 알아두라 핵심 : 1. 컴파일러가 연역하는 형식을 IDE 편집기나 컴파일러 오류 메시지, Boost TypeIndex 라이브러리를 이용해서 파악할 수 있는 경우가 많다. 2. 일부 도구의 결과는 유용하지도 않고 부정확할 수 있으므로, C++ 의 형식 연역 규칙들을 제대로 이해하는 것은 여전히 필요한 일이다. 형식 연역 정보를 얻는 방법은 세 가지 시점으로 분류할 수 있다. 1. IDE 편집기 2. 컴파일러의 진단 메시지 decltype 을 사용하면 다음과 같은 경우, 타입을 컴파일 타임에 알아낼 수..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 3 : decltype 의 작동 방식을 숙지하라 핵심 : 1. decltype 은 항상 변수나 표현식의 형식을 아무 수정 없이 보고한다. 2. decltype 은 형식이 T 이고 이름이 아닌 왼값 표현식에 대해서는 항상 T& 형식을 보고한다. 3. C++14 는 decltype(auto) 를 지원한다. decltype(auto)는 auto 처럼 초기치로부터 형식을 연역하지만, 그 형식 연역 과정에서 decltype 의 규칙들을 적용한다. 컨테이너의 operator[ ] 반환 형식을 손쉽게 표현해 보자. template auto auth..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 2 : auto 의 형식 연역 규칙을 숙지하라 핵심 : 1. auto 형식 연역은 대체로 템플릿 형식 연역과 같지만, auto 형식 연역은 중괄호 초기치가 std::initializer_list 를 나타낸다고 가정하는 반면, 템플릿 형식 연역은 그렇지 않다는 차이가 있다. 2. 함수의 반환 형식이나 람다 매개변수에 쓰인 auto 에 대해서는 auto 형식 연역이 아니라 템플릿 형식 연역이 적용된다. 한 가지 기이한 예외를 빼면, auto 형식 연역이 곧 템플릿 형식 연역이다. 그 기이한 한 가지 다른 예외를 보자. #include #i..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 1 : 템플릿 형식 연역 규칙을 숙지하라 핵심 : 1. 템플릿 형식 연역 도중 참조 형식의 인수들은 비참조로 취급된다. 즉, 참조성이 무시된다. 2. 보편 참조 매개변수에 대한 형식 연역 과정에서 왼값 인수들은 특별하게 취급된다. 3. 값 전달 방식의 매개변수에 대한 형식 연역 과정에서 const 또는 volatile(또는 그 둘 다인) 인수는 비 const, 비 volatile 인수로 취급된다. 4. 템플릿 형식 연역 과정에서 배열이나 함수 이름에 해당하는 인수는 포인터로 붕괴한다. 단, 그런 인수가 참조를 초기화하는데 쓰이는 경우,..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 55 : Boo子有親! 부스트를 늘 여러분 가까이에 핵심 : 1. 부스트는 C++ 표준화에 있어 영향력 있는 오픈 소스 C++ 라이브러리 개발 모임이다. 2. 부스트의 다양한 라이브러리를 살펴보자 부스트 라이브러리는 엄격한 심사를 통해 높은 품질의 코드를 제공한다. 예시는 정말 다양한데, 웹사이트를 들어가서 다양한 라이브러리를 구경해 보자!
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 54 : TR1 을 포함한 표준 라이브러리 구성요소와 편안한 친구가 되자 핵심 : 1. 최초에 상정된 C++ 표준 라이브러리의 주요 구성요소는 STL, iostream, 로케일 등이다. 2. TR1 이 도입되면서 추가된 것은 스마트 포인터, 일반화 함수, 해시 기반 컨테이너, 정규 표현식 등등이다 3. TR1 자체는 단순히 명세서이며, TR1 기능을 사용하기 위해서는 명세를 구현한 코드를 구해야 한다. 대표적인 자료처 중 한 군데가 바로 부스트이다. 사실 해당 책은 현재 시점(2022년) 으로부터 7년 전에 나온 개정판이므로, 책에서 ..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 53 : 컴파일러 경고를 지나치지 말자 핵심 : 1. 컴파일러 경고를 쉽게 지나치지 말자. 경고 메시지를 내지 않는 코드를 짜자. 2. 컴파일러 경고에 너무 기대지는 말자! 컴파일러마다 경고 메시지는 달라질 수 있다! 다음 예시를 보자. class B { public: virtual void f() const; }; class D: public B { public: // f 는 재선언된 것이 아니라, 아예 가리고 있음 virtual void f(); }; 컴파일러는 위 경우, "warning: D::f() hides virtual B:..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 52 : 위치지정 new 를 작성한다면 위치지정 delete 도 같이 준비하자 핵심 : 1. operator new 함수의 위치지정(placement) 버전을 만들 때는, 이 함수와 짝을 이루는 위치지정 버전의 operator delete 함수도 꼭 만들자. 이 일을 빼먹으면, 찾아내기도 힘들고 생겼다가 안 생겼다 하는 메모리 누출 현상을 경험하게 된다. 2. new 및 delete 의 위치지정 버전을 선언할 때는, 의도한 바도 아닌데 이들의 표준 버전이 가려지는 일이 생기지 않도록 주의하자. 아래 코드를 보자. Widget *pW =..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 51 : new 및 delete 를 작성할 때 따라야 할 기존의 관례를 잘 알아 두자 핵심 : 1. 관례적으로, operator new 함수는 메모리 할당을 반복해서 시도하는 무한 루프를 가져야 하고, 메모리 할당 요구를 만족시킬 수 없을 때 new 처리자를 호출해야 하며, 0바이트에 대한 대책도 있어야 한다. 클래스 전용 버전은 자신이 할당하기로 예정된 크기보다 더 큰(틀린) 메모리 블록에 대한 요구도 처리해야 한다. 2. operator delete 함수는 널 포인터가 들어왔을 때 아무 일도 하지 않아야 한다. 클래스 전용 버전의 ..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 50 : new 및 delete 를 언제 바꿔야 좋은 소리를 들을지를 파악해 두자 핵심 : 개발자가 스스로 사용자 정의 new 및 delete 를 작성하는 데는 여러가지 이유가 있다. 여기에는 수행 성능 향상, 힙 사용 시의 에러 디버깅, 힙 사용 정보 수집 등의 목적이 포함된다. operator new 와 operator delete 를 바꾸는 가장 흔한 세 가지 이유를 한 번 보자. 잘못된 힙 사용을 탐지하기 위해 : 데이터 오버런(overrun) 및 언더런(underrun) 을 탐지하기 위해 탐지용 바이트를 추가로 할당할 수 있다..