関数から戻るときの auto と decltype(auto) の違いは何ですか? 質問する

関数から戻るときの auto と decltype(auto) の違いは何ですか? 質問する

めったに見ませんが、見かけると、関数から戻るときdecltype(auto)と同じことを行うように見えるため、混乱します。auto

auto g() { return expr; }
decltype(auto) g() { return expr; }

これら 2 つの構文の違いは何ですか?

ベストアンサー1

autoテンプレート引数の推論ルールに従い、常にオブジェクト型です。値カテゴリに基づいて参照型を推論するルールdecltype(auto)に従いますdecltype。つまり、

int x;
int && f();

それから

expression    auto       decltype(auto)
----------------------------------------
10            int        int
x             int        int
(x)           int        int &
f()           int        int &&

おすすめ記事