목록Tutorials/C++ : Advanced (99)
KoreanFoodie's Study
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 14 : 예외를 방출하지 않을 함수는 noexcept 로 선언하라 핵심 : 1. noexcept 는 함수의 인터페이스의 일부이다. 이는 호출자가 noexcept 여부에 의존할 수 있음을 뜻한다. 2. noexcept 함수는 비 noexcept 함수보다 최적화의 여지가 크다. 3. noexcept 는 이동 연산들과 swap, 메모리 해제 함수들, 그리고 소멸자들에 특히나 유용하다. 4. 대부분의 함수는 noexcept 가 아니라 예외에 중립적이다. 함수를 noexcept 로 선언할 것인지의 여부는 인터페이스 설계상의 문제인데, 이는 클라..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 13 : iterator 보다 const_iterator 를 선호하라 핵심 : 1. iterator 보다 const_iterator 를 선호하라. 2. 최대한 일반적인 코드에서는 begin, end, rbegin 등의 비멤버 버전들을 해당 멤버 함수들보다 선호하라. C++98 에서는, const_iterator 사용이 쉽지 않았다. typedef std::vector::iterator IterT; typedef std::vector::const_iterator ConstIterT; std::vector values; ... ConstI..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 12 : 재정의 함수들을 override 로 선언하라 핵심 : 1. 재정의 함수는 override 로 선언하라. 2. 멤버 함수 참조 한정사(reference qualifier)를 이용하면 멤버 함수가 호출되는 객체(*this)의 왼값 버전과 오른값 버전을 다른 방식으로 처리할 수 있다. 기반 클래스에서 정의된 가상 함수가 파생 클래스에서 재정의되기 위해서는 다음과 같은 조건들이 만족 되어야 한다. 기반 클래스 함수가 가상함수 이어야 함 기반 함수와 파생 함수의 이름이 동일해야 함(소멸자 제외) 기반 함수와 파생 함수의 매개변수 형식들..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 11 : 정의되지 않은 비공개 함수보다 삭제된 함수를 선호하라 핵심 : 1. 정의되지 않은 비공개 함수보다 삭제된 함수를 선호하라. 2. 비멤버 함수와 템플릿 인스턴스를 비롯한 그 어떤 함수도 삭제할 수 있다. 다른 개발자에게 제공할 코드를 작성할 때, 그 개발자가 코드의 특정 함수를 호출하지 못하게 하는 가장 흔한 방법은 그냥 그 함수를 선언하지 않는 것이다. 하지만 컴파일러가 때로는 함수를 자동으로 생성하는 경우가 있다. C++ 98 에서는 private 으로 선언 후, 정의를 하지 않는 방식으로 이를 방지하기도 한다. 실제로 입력..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 10 : 범위 없는 enum 보다 범위 있는 enum 을 선호하라 핵심 : 1. C++98 스타일의 enum 을 이제는 범위 없는 enum 이라고 부른다. 2. 범위 있는 enum 의 열거자들은 그 안에서만 보인다. 이 열거자들은 오직 캐스팅을 통해서만 다른 형식으로 변환된다. 3. 범위 있는 enum 과 범위 없는 enum 모두 바탕 형식 지정을 지원한다. 범위 있는 enum 의 기본 바탕 형식은 int 이다. 범위 없는 enum 에는 기본 바탕 형식이 없다. 4. 범위 있는 enum 은 항상 전방 선언이 가능하다. 범위 없는 enu..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 9 : typedef 보다 별칭 선언을 선호하라 핵심 : 1. typedef 은 템플릿화를 지원하지 않지만, using 은 지원한다. 2. 별칭 템플릿에서는 "::type" 접미어를 붙일 필요가 없다. 템플릿 안에서 typedef 을 지칭할 때에는 "typename" 접두사를 붙여야 하는 경우가 많다. 3. C++14 는 C++11 의 모든 형식 특질 변환에 대한 using 들을 제공한다. typedef 과 using (별칭 선언, alias declaration) 이 하는 일은 동일하지만, using 이 더 직관적이다. // 함수 포..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 8 : 0 과 NULL 보다 nullptr 를 선호하라 핵심 : 1. 0 과 NULL 보다 nullptr 를 선호하라. 2. 정수 형식과 포인터 형식에 대한 오버로딩을 피하라. 리터럴 0은 int 이지 포인터가 아니다. 포인터만 사용할 수 있는 위치에 0 이 있으면 C++ 은 마지못해 이를 null 포인터로 해석하지만, 이는 최후의 수단일 뿐이다. // f 의 세 가지 오버로딩 void f(int); void f(bool); void f(void*); ... // f(void*) 가 아닌 f(int) 호출 f(0); // 컴파일 되지 ..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 7 : 객체 생성 시 괄호'( )' 와 중괄호'{ }' 를 구분하라 핵심 : 1. 중괄호 초기화는 가장 광범위하게 적용할 수 있는 초기화 구문이며, 좁히기 변환을 방지하며, C++ 의 가장 성가신 구문 해석에서 자유롭다. 2. 생성자 오버로딩 해소 과정에서 중괄호 초기화는 가능한 한 std::initializer_list 매개변수가 있는 생성자와 부합한다. 3. 괄호와 중괄호의 선택이 의미 있는 차이를 만드는 예는 인수 두 개로 std::vector 을 생성하는 것이다. 4. 템플릿 안에서 객체를 생성할 때 괄호를 사용할 것인지 중괄호..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 6 : auto 가 원치 않은 형식으로 연역될 때는 명시적 형식의 초기치를 사용하라 핵심 : 1. "보이지 않는" 대리자 형식 때문에 auto 가 초기화 표현식의 형식을 "잘못" 연역할 수 있다. 2. 형식 명시 초기치 관용구는 auto 가 원하는 형식을 연역하도록 강제한다. 다음 예시를 보자. class Widget {}; std::vector feature(const Widget& w) { return std::vector(10); } void processWidget(Widget w, bool highPriority) { /* D..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 5 : 명시적 형식 선언보다는 auto 를 선호하라 핵심 : 1. auto 변수는 반드시 초기화 해야 하며, 이식성 또는 효율성 문제를 유발할 수 있는 형식 불일치가 발생하는 경우가 거의 없으며, 대체로 변수의 형식을 명시적으로 지정할 때보다 타자량도 더 적다. 2. auto 로 형식을 지정한 변수는 항목 2 와 항목 6 에서 설명한 문제점들을 겪을 수 있다. 아래 예시를 보면, auto 를 쓰는 것이 여러모로 훌륭하다는 것을 한눈에 파악할 수 있을 것이다. template void print_from_b_to_e(It b, It e)..