728x90
반응형

decltype 2

[C++] decltype 지정자

적절한 생성자가 있다면 auto를 사용할 수 있다. 그러나 때로는 초기화된 변수를 정의하지 않고 유형을 추론하고 싶을 때가 있다. 그런 다음 유형 지정자를 사용할 수 있다. decltype(expr)은 expr의 선언된 유형이다. 이것은 genetic programming에서 주로 유용하다. 내부적으로 다른 요소 유형을 가진 두 개의 행렬을 추가하는 함수를 작성할 때 더하기의 결과의 유형은 무엇이어야 할까? 행렬이지만 요소의 유형은 무엇일까? 명백한 대답은 합계의 요소 유형이 요소의 합계 유형과 같다는 것이다. 따라서 다음과 같이 선언할 수 있다. template auto operator+(const Matrix& a, const Matrix& b) −> Matrix; 반환 유형을 인수 측면에서 표현할 ..

[C++] 타입추론 decltype(auto)

auto를 이용하면 표현식의 타입이 자동으로 연역된다. 만약 const 한정자가 붙어 있다면 const 속성을 없애버린다. decltype은 이런 효과가 없기 때문에 중복된 코드를 만들게 된다. C++14에서는 이 문제를 해결하기 위해 decltype(auto)를 도입했다. const string message = "Test"; const string& foo() { return message; } // foo()를 호출해서 그 리턴 값을 auto 변수에 담을 수 있다. auto f1 = foo(); 그런데 auto는 함수 foo()의 리턴 값이 가진 const 속성을 없애버리기 때문에 f1은 string 타입이 되며 복제본이 만들어진다. 만약 f1이 const 참조형을 유지하길 원한다면 아래처럼 명시적..

728x90
반응형