목록Tutorials (196)
KoreanFoodie's Study
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 29 : 이동 연산이 존재하지 않고, 저렴하지 않고, 적용되지 않는다고 가정하라 핵심 : 1. 이동 연산들이 존재하지 않고, 저렴하지 않고, 적용되지 않을 것이라고 가정하자. 2. 형식들과 이동 의미론 지원 여부를 미리 알 수 있는 경우에는 그런 가정을 둘 필요가 없다. 아마 C++11 에서 가장 주된 가능은 이동 의미론(move semantics) 일 것이다. 하지만 모든 경우에 이동 연산이 가능한 것은 아니고, 또 복사보다 저렴한 것은 아니다. 예를 들어, std::vector 의 경우 std::move 연산은, 컨테이너에 있는 요..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 28 : 참조 축약을 숙지하라 핵심 : 1. 참조 축약은 템플릿 인스턴스화, auto 형식 연역, typedef 과 별칭 선언의 지정 및 사용, decltype 의 지정 및 사용이라는 네 가지 문맥에서 일어난다. 2. 컴파일러가 참조 축약 문맥에서 참조에 대한 참조를 만들어내면, 그 결과는 하나의 참조가 된다. 원래의 두 참조 중 하나라도 왼값 참조이면 결과는 왼값 참조이고, 그렇지 않으면 오른값 참조이다. 3. 형식 연역이 왼값과 오른값을 구분하는 문맥과 참조 축약이 일어나는 문맥에서 보편 참조는 오른값 참조이다. 우리는 T&& 같은..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 27 : 보편 참조에 대한 중복적재 대신 사용할 수 있는 기법들을 알아 두라 핵심 : 1. 보편 참조와 중복적재의 조합에 대한 대안으로는 구별되는 함수 이름 사용, 매개변수를 const 에 대한 왼값 참조로 전달, 매개변수를 값으로 전달, 꼬리표 배분 사용 등이 있다. 2. std::enable_if 를 이용해서 템플릿의 인스턴스화를 제한함으로써 보편 참조와 중복적재를 함께 사용할 수 있다. std::enable_if 는 컴파일러가 보편 참조 중복적재를 사용하는 조건을 프로그래머가 직접 제어하는 용도로 쓰인다. 3. 보편 참조 매개변수..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 26 : 보편 참조에 대한 중복적재를 피하라 핵심 : 1. 보편 참조에 대한 중복적재는 거의 항상 보편 참조 중복적재 버전이 예상보다 자주 호출되는 상황으로 이어진다. 2. 완벽 전달 생성자들은 특히나 문제가 많다. 그런 생성자는 대체로 비const 왼값에 대한 복사 생성자보다 더 나은 부합이며, 기반 클래스 복사 및 이동 생성자들에 대한 파생 클래스들의 호출들을 가로챌 수 있기 때문이다. 다음과 같은 코드가 있다고 가정하자. std::multiset names; void logAndAdd(const std::string& name) ..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 25 : 오른값 참조에는 std::move 를, 보편 참조에는 std::forward 를 사용하라 핵심 : 1. 오른값 참조나 보편 참조가 마지막으로 쓰이는 지점에서, 오른값 참조에는 std::move 를, 보편 참조에는 std::forward 를 적용하라. 2. 결과를 값 전달 방식으로 돌려주는 함수가 오른값 참조나 보편 참조를 돌려줄 때에도 각각 std::move 나 std::forward 를 적용하라. 3. 반환값 최적화의 대상이 될 수 있는 지역 객체에는 절대로 std::move 나 std::forward 를 적용하지 말아야 한..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 24 : 보편 참조와 오른값 참조를 구별하라 핵심 : 1. 함수 템플릿 매개변수의 형식이 T&& 형태이고 T 가 연역된다면, 또는 객체를 auto&& 로 선언한다면, 그 매개변수나 객체는 보편 참조이다. 2. 형식 선언의 형태가 정확히 형식&& 가 아니면, 또는 형식 연역이 일어나지 않으면, 형식&& 는 오른값 참조를 뜻한다. 3. 오른값으로 초기화되는 보편 참조는 오른값 참조에 해당한다. 왼값으로 초기화되는 보편 참조는 왼값 참조에 해당한다. "T&&" 는 오른값 참조 또는 왼값 참조 중 하나라는 뜻이다. 이러한 참조를 보편 참조(u..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 23 : std::move 와 std::forward 를 숙지하라 핵심 : 1. std::move 는 오른값으로의 무조건 캐스팅을 수행한다. std::move 자체는 아무것도 이동하지 않는다. 2. std::forward 는 주어진 인수가 오른값에 묶인 경우에만 그것을 오른값으로 캐스팅한다. 3. std::move 와 std::forward 둘 다, 실행 시점에서는 아무 일도 하지 않는다. std::move 와 std::forward 는 실행 가능 코드를 한 바이트도 산출하지 않는다. 그들은 그냥 캐스팅을 수행하는 함수(구체적으로는 함..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 22 : Pimpl 관용구를 사용할 때에는 특수 멤버 함수들을 구현 파일에서 정의하라 핵심 : 1. Pimpl 관용구는 클래스 구현과 클래스 클라이언트 사이의 컴파일 의존성을 줄임으로써 빌드 시간을 감소한다. 2. std::unique_ptr 형식의 pImpl 포인터를 사용할 때에는 특수 멤버 함수들을 클래스 헤더에 선언하고 구현 파일에서 구현해야 한다. 컴파일러가 기본으로 작성하는 함수 구현들이 사용하기에 적합한 경우에도 그렇게 해야 한다. 3. 위의 조언은 std::unique_ptr 에 적용될 뿐, std::shared_ptr 에..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 21 : new 를 직접 사용하는 것보다 std::make_unique 와 std::make_shared 를 선호하라 핵심 : 1. new 의 직접 사용에 비해, make 함수를 사용하면 소스 코드 중복의 여지가 없어지고, 예외 안전성이 향상되고, std::make_shared 와 std::allocate_shared 의 경우 더 작고 빠른 코드가 산출된다. 2. make 함수의 사용이 불가능 또는 부적합한 경우로는 커스텀 삭제자를 지정해야 하는 경우와 중괄호 초기치를 전달해야 하는 경우가 있다. 3. std::shared_ptr 에 ..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 20 : std::shared_ptr 처럼 작동하되 대상을 잃을 수도 있는 포인터가 필요하면 std::weak_ptr 를 사용하라 핵심 : 1. std::shared_ptr 처럼 작동하되 대상을 잃을 수도 있는 포인터가 필요하면 std::weak_ptr 를 사용하라 2. std::weak_ptr 의 잠재적인 용도로는 캐싱, 관찰자 목록, 그리고 std::shared_ptr 순환 고리 방지가 있다. std::weak_ptr 는 std::shared_ptr 처럼 동작하되, 객체의 참조 횟수에는 영향을 끼치지 않는다. 대상을 잃은 std::..