728x90
반응형

auto 2

[C++] auto 지정자

생성자가 있는 변수를 선언할 때는 명시적으로 지정하지 않아도 된다. 대신 변수가 초기화 유형을 가지게 할 수 있다. int a1 = 123; char a2 = 123; auto a3 = 123; // a3의 유형은 int가 된다. 정수 literal 타입인 123은 int 다. 그래서 a3은 int가 된다. auto는 초기화되는 유형의 자리 표시자가 된다. 물론 int와 같은 간단한 표현식에서 auto를 사용하는 것은 이점이 없다. 유형이 복잡하고 사용하기 어려울수록 auto는 유용해진다. template void f1(vector& arg) { for (vector::iterator p = arg.begin(); p!=arg.end(); ++p) ∗p = 7; for (auto p = arg.begin..

[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
반응형