티스토리 뷰
Effective Modern 이펙티브 모던 C++ |
차례
1장. 형식 연역
2장. auto
3장. 현대적 C++ 적응하기
4장. 스마트 포인터
5장. 오른값 참조, 이동 의미론, 완벽 전달
6장. 람다 표현식
7장. 동시성 API
8장. 다듬기
Item 11: 정의되지 않은 비공개 함수보다 삭제된 함수를 선호하라
정의되지 않은 비공개 함수(C++98)보다 삭제된 함수(C++11) 사용 시 장점
1. 멤버 함수 여부에 상관없이 어떤 함수도 삭제 가능
2. 원치 않는 템플릿 인스턴스화를 방지
함수를 private으로 선언하되 정의를 생략하는 C++98의 관행은 C++11의 삭제된 함수가 제공하는 기능을 억지로 흉내 내는 것이었다. C++98의 접근방식은 클래스 바깥에서는 작동하지 않으며, 클래스 안에서도 항상 동작하지는 않는다. 작동한다고 해도 링크 시점에 가서야 작동하는 경우도 있다. 따라서 그냥 삭제된 함수를 사용하는 것이 낫다.
기억해 둘 사항들
- 정의되지 않은 비공개 함수보다 삭제된 함수를 선호하라.
- 비멤버 함수와 템플릿 인스턴스를 비롯한 그 어떤 함수도 삭제할 수 있다.
Item 12: 재정의 함수들을 override로 선언하라
재정의 함수들을 override로 선언 시 장점
1. 재정의를 의도한 함수가 실제로는 아무것도 재정의하지 않는다는 점을 컴파일러가 지적해 줌
2. 기반 클래스의 한 가상 함수의 서명을 변경했을 때 그 영향이 어느 정도인지 가늠하려 할 때에도 도움이 됨
한 멤버 함수에 참조 한정사가 붙어 있으면 그 함수의 모든 중복적재에도 참조 한정사를 지정해야 한다. 이는 참조 한정되지 않은 중복적재가 왼값 객체와 오른값 객체 모두에 대해 호출될 수 있기 때문이다. 그런 중복적재는 참조 한정된 중복적재들과 경쟁하며, 따라서 그 함수에 대한 모든 호출이 중의적인 호출로 변한다.
기억해 둘 사항들
- 재정의 함수는 override로 선언하라.
- 멤버 함수 참조 한정사를 이용하면 멤버 함수가 호출되는 객체(*this)의 왼값 버전와 오른값 버전을 다른 방식으로 처리할 수 있다.
Item 13: iterator보다 const_iterator를 선호하라
이 조언의 근본적인 동기는 const를 사용하는 것이 의미가 있는 경우에는 항상 const를 사용하는 것이 바람직하다는 것인데, 이 조언은 C++11 이전에도 참이었다. 그러나 C++98에서 반복자를 다룰 때에는 이 조언이 전혀 실용적이지 않았다. C++11에서는 두드러지게 실용적이며, C++14는 C++11에서 마무리하지 못한 몇 가지 단점까지 해결한다.
기억해 둘 사항들
- iterator보다 const_iterator를 선호하라.
- 최대한 일반적인 코드에서는 begin, end, rbegin 등의 비멤버 버전들을 해당 멤버 함수들보다 선호하라.
Item 14: 예외를 방출하지 않을 함수는 noexcept로 선언하라
예외를 전혀 방출하지 않는 것이 자연스러운 구현인 함수들도 있으며, noexcept로 선언하면 최적화에 큰 도움이 되는 함수들도 많다(특히 이동 연산과 swap). 그런 함수들을 가능하면 noexcept로 구현하는 것은 가치 있는 일이다. 독자는 어떤 함수가 예외를 방출하지 않는다는 점을 확신할 수 있다면, 당연히 noexcept로 선언해야 한다.
기억해 둘 사항들
- noexcept는 함수의 인터페이스의 일부이다. 이는 호출자가 noexcept 여부에 의존할 수 있음을 뜻한다.
- noexcept 함수는 비noexcept 함수보다 최적화의 여지가 크다.
- noexcept는 이동 연산들과 swap, 메모리 해제 함수들, 그리고 소멸자들에 특히나 유용하다.
- 대부분의 함수는 noexcept가 아니라 예외에 중립적이다.
참고
예제, https://github.com/BartVandewoestyne/Effective-Modern-Cpp
C++ Exception Handling (예외 처리) 와 Stack Unwinding (스택 풀기), http://devluna.blogspot.kr/2015/02/c-exception-handling.html
- James Song
'Books_tech' 카테고리의 다른 글
재미있는 알고리즘 이야기 <누워서 읽는 알고리즘> (2) | 2016.04.16 |
---|---|
스콧 마이어스 <이펙티브 모던 C++> Item 15-17 요약 (0) | 2016.04.02 |
스콧 마이어스 <이펙티브 모던 C++> Item 7-10 요약 (0) | 2016.03.23 |
프로그래밍에 대한 광범위한 지침 <훌륭한 프로그래머 되는 법> 정리 #1 (0) | 2016.03.19 |
스콧 마이어스 <이펙티브 모던 C++> Item 3-6 요약 (0) | 2016.03.17 |
- #스콧마이어스
- #마이클페더스
- #build2016
- #cpp
- 객체 지향 설계
- 상속
- Effective Modern C++
- Effective C++
- #프로그래밍심리학
- #techdays2015
- Scott Meyers
- #임백준
- 책
- #csharp
- #팀개발
- #코드최적화
- #자녀교육
- #클린코드
- #mva
- #uwp
- #제럴드와인버그
- #scottmeyers
- #알고리즘
- #레거시코드
- #ModernCPP
- #ndc
- #cplusplus
- #세미나
- #로버트마틴
- #EffectiveModernCpp
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |