decltype(auto)
はめったに表示されませんが、関数から戻るときにauto
と同じことをするように見えるため、混乱します。
auto g() { return expr; }
decltype(auto) g() { return expr; }
これら2つの構文の違いは何ですか?
auto
はテンプレート引数の推論規則に従い、常にオブジェクトタイプです。 decltype(auto)
は、値のカテゴリに基づいて参照型を推定するためのdecltype
ルールに従います。だから私たちが持っているなら
int x;
int && f();
その後
expression auto decltype(auto)
----------------------------------------
10 int int
x int int
(x) int int &
f() int int &&
auto
は、return
句をauto
変数に割り当てた場合に推定される値型を返します。 decltype(auto)
は、return句をdecltype
でラップした場合に取得するタイプを返します。
auto
は値で返しますが、decltype
はそうではないかもしれません。