프로그래밍/Modern Effective c++
-
항목 3. decltype의 작동 방식을 숙지하라.프로그래밍/Modern Effective c++ 2016. 3. 28. 15:14
decltype는 주어진 이름이나 표현식의 형식을 알려준다.대부분 다음과같이 예측한 대로 형식을 말해준다. const int i = 0; // decltype(i) : const intbool f(const Widget& w); // decltype(w) : const Widget& // decltype(f) : bool(const Widget&) struct Point { // decltype(Point::x) : int int x, y; // decltype(Point::y) : int}; Widget w; // decltype(w) : Widget if(f(w)); // decltype(f(w)) : bool templateclass vector {public: ... T& operator[] (s..
-
항목 2. auto의 형식 연역 규칙을 숙지하라.프로그래밍/Modern Effective c++ 2016. 3. 21. 14:48
auto는 한가지 예외를 제외하고 템플릿과 형식 연역 방식이 같다. auto x = 27; // 경우 3const auto cx = x; // 경우3const auto& rx = x; // 경우1 auto&& uref1 = x; // uref: int&auto&& uref2 = cx; // uref: const int&auto&& uref3 = 27; // uref: int&& const char name[] = "R. N. Briggs"; // name의 형식은 const char[13]auto arr1 = name; // arr1: const char*auto& arr2 = name; // arr2: const char (&) [13] void someFunc(int, double);auto func..
-
항목 1. 템플릿 형식 연역 규칙을 숙지하라.프로그래밍/Modern Effective c++ 2016. 3. 13. 23:54
auto는 템플릿에 대한 형식 연역을 기반으로 작동한다.하지만 이것이 auto에 적용될 때 템플릿에 적용될 때보다 덜 직관적인 경우가 있다.따라서 제대로 이해하기 위해서는 템플릿 형식 연역을 제대로 이해해야한다. 템플릿은 일반적으로 다음의 형태를 가진다.templatevoid f(ParamType param); f(expr); //호출 ParamType의 형태를 기준으로 세가지 경우를 살펴보자. 경우 1. ParamType이 포인터 또는 참조 형식이지만, 보편참조는 아닌 경우. 1. expr이 참조 형식이면 참조부분을 무시한다. --> 당연하다. expr이 참조형식인것은 자기한테만 중요할뿐 param에게는 아무의미가 없다. 2. 그다음 expr의 형식을 ParamType에 대해 패턴 매칭 방식으로 대응시..
-
1장 형식 연역프로그래밍/Modern Effective c++ 2016. 3. 13. 23:32
c++11에서 형식연역에 대한 두가지 규칙이 추가 되었다.auto와 decltype이 그것이다. 이덕분에 자명한, 또는 이미 선언된 형식들을 여러번 일일이 지저해야하는 경우가 크게 줄었다. 이제는 소스코드의 한 지점에 있는 형식을 변경하면, 그 변화가 형식 연역을 통해서 다른 장소들로 자동으로 전파되며, 겨과적으로 c++ 소프트웨어의 적응성이 높아졌다.하지만 코등의 의미를 추론하기는 좀더 어려워졌다. 컴파일러가 연역하는 형식이 추측한것과 다른 경우가 있기 때문이다. 때문에 형식 연역이 일어나는 방식을 확실하게 이해하지 않는다면, 현대적인 c++ 엣 효과적인 프로그래밍이 거의 불가능하다. 이번장에서는 형식 연역의 작동방식과 이에 기초한 auto와 decltype의 작동방식을 설명한다.
-