Effective Modern C++ (이펙티브 모던 C++)

이 버전이 더 효율적인 뿐만 아니라 타자도 더 쉽다.

1

C++은 다루지 않은지 오래 되어서 책을 보는 동안 C++ 표준 레퍼런스를 참고하게 되었다. 영원히 변하지 않을 것 같았던 C++ 표준의 변화량이 상당하기 때문에 용어를 받아들이는 것부터 난관이었지만 스콧 마이어스의 훌륭한 가이드 덕분에 C++ 표준이 향하는 곳은 쉽게 알 수 있었다.

2

어려운 용어와 한글 번역의 ‘딱딱함’ 덕분에 약간의 어색함이 있다.


어떤 복잡한 시스템의 사용자가 그 시스템의 작동 방식을 알지 못하지만 그래도 그 시스템이 하는 일에 만족한다면, 그 시스템은 설계가 잘 된 것이라 할 수 있다. 그런 관점에서, C++의 템플릿 형식 연역은 엄청난 성공작이다.

[…] 배열과 포인터를 맞바꿔 쓸 수 있는 것처럼 보이는 환상의 주된 원인은, 많은 문맥에서 배열이 배열의 첫 원소를 가리키는 포인터로 붕괴한다(decay)는 점이다.

[…] IDE 편집기와 컴파일러 오류 메시지, 그리고 Boost, TypeIndex 같은 라이브러리는 단지 컴파일러가 연역하는 형식을 파악하는 데 도움이 되는 도구일 뿐임을 명심하기 바란다.

형식 추론(type inference)이라고 부르는 것을 채용하는 데 있어서 C++이 어떤 혁신적인 성과를 내지는 않았음을 명심하기 바란다. […] 소프트웨어 개발 공동체에는 형식 추론에 관한 방대한 경험이 존재한다. 경험에 따르면, 그러한 형식 추론 기술이 대규모 업계 수준 코드 기반의 작성 및 유지보수 능력과 충돌하지는 않는다.

요점부터 말하자면, 리터럴 0은 int이지 포인터가 아니다. 포인터만 사용할 수 있는 위치에 0이 있으면 C++은 마지못해 그것을 널 포인터로 해석하긴 하지만, 이는 최휘의 수단일 뿐이다. C++의 기본적인 방침은, 0은 int이지 포인터가 아니라는 것이다.

라이브러리 인터페이스 설계자들 중에는 소위 넓은 계약(wide contract)들을 가진 함수와 좁은 계약(narrow contract)들을 가진 함수를 구분하는 사람들이 있다. 넓은 계약을 가진 함수는 전체조건이 없는 함수를 말한다. 그런 함수는 프로그램의 상태와는 무관하게 호출할 수 있으며, 호출자가 전달하는 인수들에 그 어떤 제약도 가하지 않는다.

[…] 이동 의미론과 완벽 전달 모두, 오른값 참조라는 기본적인 언어 매커니즘 덕분에 가능한 것이다.

Written on March 27, 2017