関数ヘッダーの矢印演算子
C 11 以降では、関数宣言に 2 つの構文が存在します:
伝統的な構文:
return-type identifier(argument-declarations...)
最新の構文:
auto identifier(argument-declarations...) -> return_type
両方の構文は同等です。ただし、最新の構文では、引数の型から戻り値の型を推測する便利な方法が提供されています。これは、式の型を記述できる decltype 指定子を使用する場合に特に便利です。
以前の C バージョンでは、次のように記述します。
template <typename T1, typename T2> decltype(a + b) compose(T1 a, T2 b);
ただし、コンパイラは次のように記述します。戻り値の型を決定しようとすると、a と b が何であるかがわかりません。
これを解決するには、次のようにします。 declval:
template <typename T1, typename T2> decltype(std::declval<T1>() + std::declval<T2>()) compose(T1 a, T2 b);
ただし、これは冗長になります。代わりに、最新の構文では次のように記述できます。
template <typename T1, typename T2> auto compose(T1 a, T2 b) -> decltype(a + b);
この構文はより簡潔であり、同じスコープ ルールを維持します。
C 14 更新:
C 14 では以下の使用が許可されています構文:
auto identifier(argument-declarations...)
関数が使用前に完全に定義されており、すべての return ステートメントが同じ型を推定する限り。
ユースケース:
矢印演算子 (->) 構文は、ソース内の実装を非表示にするヘッダー ファイルで宣言されたパブリック関数に引き続き役立ちます ファイル。これは、テンプレート関数またはテンプレート メタプログラミングを通じて派生した特殊な具象型に特に関係します。
以上がC 関数ヘッダーで矢印演算子を使用する必要があるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。