`) 関数の見出しで行うのですか? " />
関数見出しの矢印演算子 (->)
この記事では、関数見出しで使用される矢印演算子 (->) について説明します。 C 11 の構文の基本的な側面。
矢印演算子を理解する
C 11 では、関数宣言に 2 つの同等の構文が導入されました。
の矢印演算子 (->;) 2 番目の構文は重要な目的を果たします。これにより、decltype キーワードを使用して関数の戻り値の型を引数から推定できるようになります。
自動推定された戻り値の型を使用する理由
特定の状況では、引数の型に基づいて戻り値の型を動的に導出することが有利です。たとえば、2 つの値の合計を計算する次の関数について考えてみましょう。
template <typename T1, typename T2> decltype(a + b) compose(T1 a, T2 b);
この場合、 decltype 引数は、戻り値の型が式 a b の型と同じである必要があることをコンパイラに通知します。ただし、コンパイラには decltype 引数の a と b に関する情報が不足しているため、この宣言ではエラーが発生します。
エラーの解決
この問題を解決するには、次のいずれかを行うことができます。 std::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 では、関数が完全に定義されている限り、次の構文も許可されます。使用前とすべての return ステートメントは同じ型であると推定されます:
auto identifier (argument-declarations...)
ただし、矢印演算子 (->) は、ソース ファイル内で本体を隠しながら (ヘッダー内で) パブリック関数を宣言するのに役立ちます。
以上が関数の見出しで矢印演算子 (`->`) は何をするのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。