2013-06-24 12 views
10

exprの種類を取り、&/& & -referencesし、それから、すべてのトップレベルのconst性とvolatilenessストリッピングのようなものです。これは、上記の行がで、正確にはに相当することを意味しますか?「auto」のrefおよびcvストリッピング特性。私は基本的に、このように自動を使用して</p> <pre><code>auto var = expr; </code></pre> <p>を変数を宣言することを学んだ

std::remove_cv<std::remove_ref<decltype(expr)>::type>::type var = expr; 
+2

C++で今後の 'decltype(auto)'が好きかもしれません:-) –

+0

@KerrekSB詳細を教えてください。 – Ali

+0

'decltype(auto)x = foo();'のように 'decltype'の参照セマンティクスと組み合わされた' auto'の型減算です。 –

答えて

10

いいえ、そうではありません。 auto var = expr;は値でexprを渡すような感じです。

int x[1]; 
auto y = x; 

これはyint*になります。

はほとんどauto x = expr;は、テンプレート型推論のように振る舞う:

template <typename T> 
void f(T); 
int x[1]; 
f(x); // deduces T as int* 

それはよりstd::decay<decltype(expr)> var = expr;のようなものです。

+0

'std :: decay :: type var = expr;' *は正確に 'auto var = expr'と同じですか? –

+7

正確ではありません。これはC++です:例外を除いた唯一のルールはこのルールです。 'auto x = [] {};'はラムダ型になりますが、 'decltype'ではラムダを使うことができません。 –

関連する問題

 関連する問題