C 14 での decltype(auto) の導入により、次のような革新的な機能がもたらされました。型推論の可能性を拡張しました。 decltype(auto) は、auto 宣言を decltype ルールに準拠させるという主な目的を超えて、その他の無数の有益なアプリケーションを提供します。
汎用コードでは、戻り値の型を完璧に転送することが重要です。戻り値の型を手動で指定して参照型を取得できる非ジェネリック コードとは異なり、decltype(auto) では、参照型に関係なく、事前知識がなくても戻り値の型を転送できる柔軟性が提供されます。
template
decltype(auto) Example(Fun fun, Args&&... args)
{
return fun(std::forward<Args>(args)...);
}
再帰テンプレートでは、無限再帰が実行中に発生する可能性があります。戻り値の型が前の反復に基づいて指定されている場合、テンプレートのインスタンス化。 decltype(auto) を利用することで、テンプレートのインスタンス化が完了するまで戻り型の推論が延期され、適切な型解決が保証されます。
template
struct Int {};
constexpr auto iter(Int) ->; Int<0>
template
constexpr auto iter(Int) -> decltype(auto)
{ return iter(Int
int main() { decltype(iter(Int{})) a; }
C ドラフト標準 (N3936) で概説されているように、decltype(auto) の多用途性は他のコンテキストにも拡張されます。 :
以上が`decltype(auto)` は C の型推定機能をどのように拡張しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。