Books/Effective Modern C++
[Effective Modern C++] 4. 추론된 타입을 파악하는 방법을 알아두자
[Effective Modern C++] 4. 추론된 타입을 파악하는 방법을 알아두자
2022.08.06IDE 편집기 IDE(통합 개발 환경)의 코드 편집기 중에는 프로그램 객체(변수, 매개변수, 함수 등) 위에 마우스 커서를 올리면 그 객체의 타입을 표시해 주는 것이 많다. const int theAnswer = 42; auto x = theAnswer; // int auto y = &theAnswer; // const int* 이런 일이 가능하려면 편집기의 코드가 어느 정도는 컴파일 가능한 상태여야 한다. 컴파일러가 코드를 파싱 해서 타입 추론을 수행할 수 있을 정도로 편집기의 코드가 완성되어 있지 않으면 편집기는 요청된 객체의 타입을 표시할 수 없다. 일반적으로 int와 같은 간단한 타입의 경우에는 IDE가 알려준 정보가 쓸만하지만, 좀 더 복잡한 타입이 관여할 때에는 IDE가 표시한 정보가 그리 도..
[Effective Modern C++] 3. decltype의 작동 방식을 숙지하자
[Effective Modern C++] 3. decltype의 작동 방식을 숙지하자
2022.08.06decltype은 주어진 이름이나 표현식의 구체적인 타입을 반환한다. 아래의 예시를 보자. const int i = 0; // decltype(i)은 const int bool f(const Widget& w); // decltype(w)은 const Widget&, decltype(f)은 bool(const Widget&) struct Point { int x, y; // decltype(Point::x)은 int, decltype(Point::y)은 int }; Widget w; // decltype(w)은 Widget if (f(w)) ... // decltype(f(w))은 bool template // std::vector class vector { public: ... T& operator[]..
[Effective Modern C++] 2. auto의 타입 추론 규칙을 숙지하자
[Effective Modern C++] 2. auto의 타입 추론 규칙을 숙지하자
2022.08.06항목 1에서 템플릿 타입 추론은 아래의 함수 템플릿을 사용하여 설명한다. template void f(ParamType param); f(expr); // 호출 auto를 이용해서 변수를 선언할 때 auto는 템플릿의 T와 동일한 역할을 하며, 변수의 타입 지정자(type specifier)는 ParamType과 동일한 역할을 한다. 아래의 예시를 보자. // 여기서 x의 타입 지정자는 그냥 auto 자체이다. 반면, 다음 선언에서 auto x = 27; // 타입 지정자는 const auto이다. const auto cx = x; // 타입 지정자가 const auto&이다. const auto& rx = x; // 이 예들에서 x와 cx, rx의 타입들을 추론할 때, 컴파일러는 마치 선언마다 템플릿 ..
[Effective Modern C++] 1. 템플릿 타입 추론 규칙을 숙지하자
[Effective Modern C++] 1. 템플릿 타입 추론 규칙을 숙지하자
2022.08.06아래는 함수 템플릿의 선언과 호출부의 의사 코드이다. template void f(ParamType param); f(expr); // f를 호출 컴파일 도중 컴파일러는 expr을 이용해서 두 가지 타입을 추론하는데, 하나는 T에 대한 타입 추론이고 하나는 ParamType에 대한 타입 추론이다. 이 두타입은 다른 경우가 많은데, 이는 ParamType에 보통 const나 참조자(&, &&) 같은 수식어들이 붙기 때문이다. 예를 들어 아래처럼 템플릿의 선언을 하고 호출한다고 하자. // 선언 template void f(const T& param); --- // 호출 int x = 0; f(x); 이 경우 T는 int로 추론되나 ParamType은 const int&로 추론된다. T에 대해 추론된 타입은..