C 関数ヘッダーで矢印演算子を使用する必要があるのはどのような場合ですか?

DDD
リリース: 2024-11-13 05:43:02
オリジナル
651 人が閲覧しました

When Should You Use the Arrow Operator in C   Function Headers?

関数ヘッダーの矢印演算子

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

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