C 14 で導入された decltype(auto) イディオムにより、自動宣言で特定の decltype ルールを使用できるようになります。表現。主な用途は関数の戻り値の型の推論ですが、他にも有益な用途があります。
汎用コードでは、decltype(auto) により戻り値の完全な転送が可能になります。基礎となる型を知らずに型を作成します。これは、汎用関数に特に役立ちます。
template<class Fun, class... Args> decltype(auto) Example(Fun fun, Args&&... args) { return fun(std::forward<Args>(args)...); }
decltype(auto) は、再帰テンプレートでの戻り値の型推定を遅らせ、無限再帰を防ぐこともできます。例:
template<int i> struct Int {}; constexpr auto iter(Int<0>) -> Int<0>; template<int i> constexpr auto iter(Int<i>) -> decltype(auto) { return iter(Int<i-1>{}); }
C ドラフト標準 (N3936) で概説されているように、decltype(auto) にはこれらの主な用途以外にもさまざまな用途があります。 >
decltype(auto) x3d = i; // decltype(x3d) is int
decltype(auto)*x7d = &i; // decltype(x7d) is int*関数宣言子、type-specifier-seqs などの特定のコンテキストでのプレースホルダー型の表現、および変換関数 ID。
以上がC の `decltype(auto)` のアプリケーションは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。