auto
(型を推定するコンテキストで)は、初期化子がある変数の型を定義することに限定されます。 decltype
は、余分な情報を犠牲にして、式のタイプを推測する、より広範な構成です。
auto
を使用できる場合は、タイプが推定される式を指定する必要がないため、decltype
より簡潔です。
auto x = foo(); // more concise than `decltype(foo()) x`
std::vector<decltype(foo())> v{ foo() }; // cannot use `auto`
auto
も完全に無関係な文脈で使用されているキーワードは、関数の戻り値の型を末尾に使用している場合:コンパイラは、この宣言があることを知っているようにあり
auto foo() -> int;
auto
のみリーダーであります末尾の戻り値の型を持ちます。上記の例は自明古いスタイルに変換することができますが、一般的なプログラミングでは有用です。この場合には、auto
は、戻り値の型を定義するために使用することはできません
template <typename T, typename U>
auto sum(T t, U u) -> decltype(t+u)
注こと。あなたは、変数の型が必要な場合は一般的に、あなたが初期化しようとしている
@JesseGood質問をする前に、そのスレッドを読んで、クリーナーの説明を探しています –
同様の質問: [1]:http://stackoverflow.com/questions/11459928/equivalence-between-decltype-and-自動 [2]:http://stackoverflow.com/questions/6869888/the-relationship-between-auto-and-decltype – crnlx
@JamesLeonard:さて、よくわかりませんが、[Scott Meyers](http:// cpp-next。co.jp/archive/2011/04/appearing-and-disappearing-consts-in-c /)を参照してください。 –