int i = 12;
decltype(i) x4; // type is int
decltype((i)) x5; // type is int&
i
はすでにlvaueです。 now decltype(i)
は、式i
のタイプと同じです。これは、具体的にはint
です。 今やspec/standardによると、(i)
は左辺値であり、decltype((i))
は何らかの形で式(i)
の左辺値を検査し、左辺値でもあるi
と同じでなければなりません。しかし、なぜ標準が突然T&
タイプが必要ですか?C++ 11:TとTの宣言型の振る舞い[両者の振る舞いの違い]
これは非常に混乱しています。もしそれがdecltype((i)&)
だったら私はこれがdecltype
のint&
のはるかに明確で正確であったことに同意します。私はここで少し失われているのですが、i
と(i)
のどちらも左辺型に解決され、T
とT&
の異なる型が返されます。
がリンクされ、重複は、あなたの質問に答えるホープ(
&(i)
と(i)++
ので(i)
が左辺値である有効な式です)。また、[こちら](https://www.reddit.com/r/cpp/comments/4z8han/decltypee_decltypee/)の別のディスカッションもあります。 – songyuanyao