본문 바로가기

공부/개발독서 - c++, c#

[EMC++] 소개

반응형

소개

c++11의 변화의 폭은 매우 크다

- auto선언, 범위 기반 for 루프, 람다 표현식, 오른값 참조 등등..

- 새로운 동시성 기능

- nullptr와 별칭 선언 등장

- 스마트 포인터

- 객체 이동

 

이 책은 c++11과 c++14의 기능들 자체가 아니라, 그 기능들의 효과적인 적용 방법을 서술하는 데 전념

 

c++11에서 가장 널리 쓰이는 기능은 아마 이동 의미론(move semantics)

- 오른값(rvalue)에 해당하는 표현식과 왼값(lvalue)에 해당하는 표현식이 구분됨

- 오른값은 이동 연산이 가능한 객체를 가리키지만, 왼값은 일반적으로 그렇지 않음

- 일반적으로, 주소를 취할 수 있다면 왼값, 없다면 오른값

 

함수 호출의 맥락에서,

- 인수(argument): 함수에 전달한 표현식

- 매개변수(parameter): 인수에 의해 초기화되는 값

- 매개변수는 왼값이지만, 인수는 왼값일 수도 오른값일 수도 있다. 이 점은 완벽전달(perfect forwarding)과정에서 특히나 중요하다.(항목 30 참고)

 

예외 안전

- 잘 설계된 함수는 예외에 안전하다 - 예외안전성(basic exception safety)

- 기본 보장(basic guarantee): 예외가 발생해도 프로그램의 불변식이 위반되지 않으며 자원지 새지 않을 것을 확신 할 수 있음

- 강한 보장(strong guarantee): 예외가 발생해도 프로그램의 상태가 함수 호출 이전 상태와 동일하게 유지될 것임을 확신 할 수 있음

 

함수 객체

- operator() 멤버 함수를 지원하는 형식의 객체

- 함수처럼 행동하는 객체

- 때에 따라서는 비멤버 함수의 호출 구문'함수이름(인수들)' 형태를 이용해서 실행할 수 있는 모든 것을 뜻하는 좀 더 넓은 의미로도 쓰임

- 좀 더 넓은 의미의 함수 객체는 c스타일의 함수 포인터도 포함

- 이러한 세세한 구분은 무시하고, 함수 객체와 호출 가능 객체라는 것이 그냥 함수 호출 구문을 이용해서 실행할 수 있는 무엇이라고만 생각해도 무방

 

클로저(closure)

- 람다 표현식을 통해 만들어진 함수 객체

- 이 책에서는 둘을 그냥 람다(lambda)라고 칭함

- 마찬가지로 함수 템플릿과 템플릿 함수를 구분하는 경우는 드뭄

- 클래스 템플릿과 템플릿 클래스도 마찬가지

 

정의는 선언의 요건들도 갖추고 있으므로, 이 책에서는 정의라는 점이 아주 중요한 경ㅇ가 아닌 한 그냥 선언이라는 용어를 사용하겠음

 

함수의 서명(signature)

- 이 책에서 함수의 서명이 함수의 선언 중 매개변수 형식들과 반환 형식을 지정한 부분이라고 정의한다.

- 예) bool(const Widget&)

- noexcept이나 constexpr과 같은 부분도 서명에 포함되지 않음

- 이러한 정의는 '서명'의 공식적인 정의와는 조금 다르지만, 적어도 책의 목적에서는 이 정의가 더 유용하다

 

미정의 행동(undefined behavior)

- 실행시점(runtime)에 행동을 예측할 수 없다는 뜻

 

포인터

- 생 포인터: new가 돌려주는 포인터 같은 내장(built-in) 포인터

- 똑똑한 포인터(smart pointer): 생 포인터의 반대 개념으로 사용

 

dtor: 소멸자(destructor)

 

 

 

Effective Modern 이펙티브 모던 C++ - 예스24

C++11과 C++14에 숙달하려면 새로 추가된 기능들(이를테면 auto 형식 선언, 이동 의미론, 람다 표현식, 동시성 지원 등)에 익숙해지는 것으로는 부족하다. 사실 어려운 것은 그런 기능들을 효과적으

www.yes24.com

 

 

반응형