2016-12-06 18 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 is int&"を保証していますか?

auto n2 = const_cast<int&>(n);の代わりにauto& n1 = const_cast<int&>(n);を使用する必要がありますか?

C++ 11標準の2つの方法は完全に同等ですか?

+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ドルがあれば)。

関連する問題