ホームページ  >  記事  >  バックエンド開発  >  なぜ C では右辺値参照と汎用参照に同じ構文が使用されるのでしょうか?

なぜ C では右辺値参照と汎用参照に同じ構文が使用されるのでしょうか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-05 14:47:02984ブラウズ

Why does C   use the same syntax for rvalue references and universal references?

右辺値とユニバーサル参照が構文を共有する理由

C では、右辺値とユニバーサル参照の両方が同じ構文を共有し、T&& で示されます。 。この選択により、潜在的な混乱と代替構文の可能性に関する疑問が生じました。

右辺値参照

右辺値参照は、右辺値への変更不可能な参照を示すために使用されます (正しい値) 式。以下に示すように、左辺値 (左値) が参照にバインドされるのを防ぎます。

<code class="cpp">void foo(int&amp;&amp; a);

int i = 42;
foo(i); // error</code>

ユニバーサル参照

対照的に、ユニバーサル参照はバインドできます。右辺値と左辺値の両方。これは、テンプレート引数の推論と参照の折りたたみルールによって実現されます。次の例を考えてみましょう:

<code class="cpp">template<typename T>
void bar(T&amp;&amp; b);

bar(i); // okay</code>

bar 関数では、右辺値が渡されたときにテンプレート パラメーター T が int であると推定され、関数パラメーターは int&& になります。同様に、lvalue が渡されると、T は int& として推定され、関数パラメーターは int& になります。

構文を共有する理由

共有の背後にある理論的根拠右辺値とユニバーサル参照の同じ構文は、引数の演繹と参照の折りたたみに関して同じルールに従うという事実にあります。この一貫性により、テンプレート内の転送参照のシームレスな統合 (完全な転送) が可能になります。

T&&&、T&*、T@ などの代替構文が採用されると、さらに複雑になります。言語に。さらに、これらの代替表記には、独自の課題と曖昧さの可能性をもたらす新しい文法規則の導入が必要になります。

代替構文の拒否

C 委員会は代替構文を検討しました構文を使用しましたが、最終的に次の理由で拒否されました:

  • これらは不必要な複雑性と混乱の可能性をもたらします。
  • 選択された構文は演繹ルールと折りたたみルールによく一致しているため、これらは最小驚きの原則に違反します。

要約すると、右辺値とユニバーサル参照間の共有構文は、クリーンで一貫した処理アプローチを提供します。 C の転送参照と右辺値セマンティクス。参照折りたたみルールとの一貫性により、別個の構文の必要性がなくなり、言語の型システムの整合性が維持されます。

以上がなぜ C では右辺値参照と汎用参照に同じ構文が使用されるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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