ホームページ >バックエンド開発 >C++ >C の `decltype(auto)` のアプリケーションは何ですか?

C の `decltype(auto)` のアプリケーションは何ですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-11 09:32:09760ブラウズ

What are the Applications of `decltype(auto)` in C  ?

decltype(auto) の用途には何がありますか?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。