서브메뉴

본문

Effective Modern C++(이펙티브 모던 C++) (C++11과 C++14를 효과적으로 사용하는 42가지 방법)
Effective Modern C++(이펙티브 모던 C++) (C++11과 C++14를 효과적으로 사용하는 42가지 방법)
저자 : 스콧 마이어스
출판사 : 인사이트
출판년 : 2015
정가 : , ISBN : 9788966261642

책소개


C++11과 C++14에 숙달하려면 새로 추가된 기능들(이를테면 auto 형식 선언, 이동 의미론, 람다 표현식, 동시성 지원 등)에 익숙해지는 것으로는 부족하다. 사실 어려운 것은 그런 기능들을 효과적으로 사용하는 방법, 다시 말해서 그런 기능들을 정확하고, 효율적이고, 유지보수하기 좋고, 이식성을 갖춘 소프트웨어를 만드는 데 활용하는 방법을 배우는 것이다. 이 책은 C++11과 C++14를 이용해서, 즉 현대적인 C++을 이용해서 진정으로 훌륭한 소프트웨어를 작성하는 방법을 설명한다. Effective Modern C++은 스콧 마이어스의 이전 책들에서 검증된 지침 기반, 예제 주도적 형식을 따르되, 완전히 새로운 내용을 다룬다. 이 책은 모든 현대적 C++ 소프트웨어 개발자가 반드시 읽어야 할 책이다.

목차


1장 형식 연역
항목 1: 템플릿 형식 연역 규칙을 숙지하라
항목 2: auto의 형식 연역 규칙을 숙지하라
항목 3: decltype의 작동 방식을 숙지하라
항목 4: 연역된 형식을 파악하는 방법을 알아두라

2장 auto
항목 5: 명시적 형식 선언보다는 auto를 선호하라
항목 6: auto가 원치 않은 형식으로 연역될 때에는 명시적 형식의 초기치를 사용하라

3장 현대적 C++에 적응하기
항목 7: 객체 생성 시 괄호(())와 중괄호({})를 구분하라
항목 8: 0과 NULL보다 nullptr를 선호하라
항목 9: typedef보다 별칭 선언을 선호하라
항목 10: 범위 없는 enum보다 범위 있는 enum을 선호하라
항목 11: 정의되지 않은 비공개 함수보다 삭제된 함수를 선호하라
항목 12: 재정의 함수들을 override로 선언하라
항목 13: iterator보다 const_iterator를 선호하라
항목 14: 예외를 방출하지 않을 함수는 noexcept로 선언하라
항목 15: 가능하면 항상 constexpr을 사용하라
항목 16: const 멤버 함수를 스레드에 안전하게 작성하라
항목 17: 특수 멤버 함수들의 자동 작성 조건을 숙지하라

4장 똑똑한 포인터
항목 18: 소유권 독점 자원의 관리에는 std::unique_ptr를 사용하라
항목 19: 소유권 공유 자원의 관리에는 std::shared_ptr를 사용하라
항목 20: std::shared_ptr처럼 작동하되 대상을 잃을 수도 있는 포인터가 필요하면 std::weak_ptr를 사용하라
항목 21: new를 직접 사용하는 것보다 std::make_unique와 std::make_shared를 선호하라
항목 22: Pimpl 관용구를 사용할 때에는 특수 멤버 함수들을 구현 파일에서 정의하라

5장 오른값 참조, 이동 의미론, 완벽 전달
항목 23: std::move와 std::forward를 숙지하라
항목 24: 보편 참조와 오른값 참조를 구별하라
항목 25: 오른값 참조에는 std::move를, 보편 참조에는 std::forward를 사용하라
항목 26: 보편 참조에 대한 중복적재를 피하라
항목 27: 보편 참조에 대한 중복적재 대신 사용할 수 있는 기법들을 알아두라
항목 28: 참조 축약을 숙지하라
항목 29: 이동 연산이 존재하지 않고, 저렴하지 않고, 적용되지 않는다고 가정하라
항목 30: 완벽 전달이 실패하는 경우들을 잘 알아두라

6장 람다 표현식
항목 31: 기본 갈무리 모드를 피하라
항목 32: 객체를 클로저 안으로 이동하려면 초기화 갈무리를 사용하라
항목 33: std::forward를 통해서 전달할 auto&& 매개변수에는 decltype을 사용하라
항목 34: std::bind보다 람다를 선호하라

7장 동시성 API
항목 35: 스레드 기반 프로그래밍보다 과제 기반 프로그래밍을 선호하라
항목 36: 비동기성이 필수일 때에는 std::launch::async를 지정하라
항목 37: std::thread들을 모든 경로에서 합류 불가능하게 만들어라
항목 38: 스레드 핸들 소멸자들의 다양한 행동 방식을 주의하라
항목 39: 단발성 사건 통신에는 void 미래 객체를 고려하라
항목 40: 동시성에는 std::atomic을 사용하고, volatile은 특별한 메모리에 사용하라

8장 다듬기
항목 41: 이동이 저렴하고 항상 복사되는 복사 가능 매개변수에 대해서는 값 전달을 고려하라
항목 42: 삽입 대신 생성 삽입을 고려하라