2016-12-06 23 views
4
const int n = 0; 
auto& n1 = const_cast<int&>(n); 
auto n2 = const_cast<int&>(n); 

C++ 11 표준은 에 의해 auto n2 = const_cast<int&>(n);으로 보장됩니까?C++ 11 표준은 "auto n2 = const_cast <int &>(n);"으로 "n2 is int &"를 보장합니까?

auto n2 = const_cast<int&>(n); 대신 auto& n1 = const_cast<int&>(n);을 사용해야합니까?

두 가지 방법이 C++ 11 표준에 따라 서로 완전히 동일합니까?

+4

확실히 'n2'는 ref가 없으면 int입니다. 'auto'는 기본적으로 템플릿 인자 공제 규칙을 따른다. –

+3

C++ 14의'decltype (auto)'에서'decltype' 규칙을 적용하면'int &'를 얻을 수 있습니다. – DeiDei

답변

5

auto은 정규 함수 템플리트 인수 공제와 동일한 규칙을 사용하며 참조는 결코 추론하지 않습니다. 한편, 여기서는 참조를 추론 할 수 있습니다.

C++ 14 decltype(auto) C++뿐만 아니라 11 auto&&.

const int n = 0; 
auto a = const_cast<int&>(n);   // a is int 
decltype(auto) b = const_cast<int&>(n); // b is int& 
auto&& c = const_cast<int&>(n);   // c is int& 
5

auto은 참조 유형을 생성하지 않습니다.

따라서 n2int 유형입니다.

(코드가 for (auto s : expensive_deep_copy_container) 일 때마다 1 달러가 있었음).