右辺値とユニバーサル参照が構文を共有する理由
C では、右辺値とユニバーサル参照の両方が同じ構文を共有し、T&& で示されます。 。この選択により、潜在的な混乱と代替構文の可能性に関する疑問が生じました。
右辺値参照
右辺値参照は、右辺値への変更不可能な参照を示すために使用されます (正しい値) 式。以下に示すように、左辺値 (左値) が参照にバインドされるのを防ぎます。
<code class="cpp">void foo(int&& a); int i = 42; foo(i); // error</code>
ユニバーサル参照
対照的に、ユニバーサル参照はバインドできます。右辺値と左辺値の両方。これは、テンプレート引数の推論と参照の折りたたみルールによって実現されます。次の例を考えてみましょう:
<code class="cpp">template<typename T> void bar(T&& b); bar(i); // okay</code>
bar 関数では、右辺値が渡されたときにテンプレート パラメーター T が int であると推定され、関数パラメーターは int&& になります。同様に、lvalue が渡されると、T は int& として推定され、関数パラメーターは int& になります。
構文を共有する理由
共有の背後にある理論的根拠右辺値とユニバーサル参照の同じ構文は、引数の演繹と参照の折りたたみに関して同じルールに従うという事実にあります。この一貫性により、テンプレート内の転送参照のシームレスな統合 (完全な転送) が可能になります。
T&&&、T&*、T@ などの代替構文が採用されると、さらに複雑になります。言語に。さらに、これらの代替表記には、独自の課題と曖昧さの可能性をもたらす新しい文法規則の導入が必要になります。
代替構文の拒否
C 委員会は代替構文を検討しました構文を使用しましたが、最終的に次の理由で拒否されました:
要約すると、右辺値とユニバーサル参照間の共有構文は、クリーンで一貫した処理アプローチを提供します。 C の転送参照と右辺値セマンティクス。参照折りたたみルールとの一貫性により、別個の構文の必要性がなくなり、言語の型システムの整合性が維持されます。
以上がなぜ C では右辺値参照と汎用参照に同じ構文が使用されるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。