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

C++ 11標準是否保證n2 is int&auto n2 = const_cast<int&>(n);C++ 11標準通過「auto n2 = const_cast <int &>(n);」保證「n2是int&」嗎?

必須使用auto& n1 = const_cast<int&>(n);而不是auto n2 = const_cast<int&>(n);

按照C++ 11標準,兩種方式是否完全相同?

+4

很確定'n2'是'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)的代碼都有一美元)。

相關問題