목록Categories (1099)
KoreanFoodie's Study
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 17 : 특수 멤버 함수들의 자동 작성 조건을 숙지하라 핵심 : 1. 컴파일러가 스스로 작성할 수 있는 멤버 함수들, 즉 기본 생성자와 소멸자, 복사 연산들, 이동 연산들을 가리켜 특수 멤버 함수라고 한다. 2. 이동 연산들은 이동 연산들이나 복사 연산들, 소멸자가 명시적으로 선언되어 있지 않은 클래스에 대해서만 자동으로 작성된다. 3. 복사 생성자는 복사 생성자가 명시적으로 선언되어 있지 않은 클래스에 대해서만 자동으로 작성되며, 만일 이동 연산이 하나라도 선언되어 있으면 삭제된다. 복사 배정 연산자는 복사 배정 연산자가 명시적으로 ..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 16 : const 멤버 함수를 스레드에 안전하게 작성하라 핵심 : 1. 동시적 문맥에서 쓰이지 않을 것이 확실한 경우가 아니라면, const 멤버 함수는 스레드에 안전하게 작성하라. 2. std::atomic 변수는 mutex 에 비해 성능상의 이점이 있지만, 하나의 변수 또는 메모리 장소를 다룰 때에만 적합하다. 다음과 같은 다항식 클래스가 있다고 하자. class Polynomial { public: using RootsType = std::vector; RootsType roots() const { // 캐시가 유효하지 않으면 ..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 15 : 가능하면 항상 constexpr 를 사용하라 핵심 : 1. constexpr 객체는 const 이며, 컴파일 도중에 알려지는 값들로 초기화된다. 2. constexpr 함수는 그 값이 컴파일 도중에 알려지는 인수들로 호출하는 경우에는 컴파일 시점 결과를 산출한다. 3. constexpr 객체나 함수는 비constexpr 객체나 함수보다 광범위한 문맥에서 사용할 수 있다. 4. constexpr 은 객체나 함수의 인터페이스의 일부이다. 개념적으로, constexpr 는 어떠한 값이 단지 상수일 뿐만 아니라 컴파일 시점에서 알려진..
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); // 컴파일 되지 ..