関数の見出しで矢印演算子 (`->`) は何をするのでしょうか?

Barbara Streisand
リリース: 2024-11-18 07:08:02
オリジナル
982 人が閲覧しました

What Does the Arrow Operator (`->`) 関数の見出しで行いますか? 
`) 関数の見出しで行うのですか? " />

関数見出しの矢印演算子 (->)

この記事では、関数見出しで使用される矢印演算子 (->) について説明します。 C 11 の構文の基本的な側面。

矢印演算子を理解する

C 11 では、関数宣言に 2 つの同等の構文が導入されました。

  1. return- type 識別子 (argument-declarations...)
  2. auto identifier (argument-declarations...) -> return_type

の矢印演算子 (->;) 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート