C で同じ構文を共有する転送参照と右辺値参照の概念は、開発者の間で疑問を引き起こしました。この決定の背後にある理論的根拠を掘り下げ、構文を詳しく調べてみましょう。
T&& で示される転送参照と、同じく T&& で示される右辺値参照は、左辺値にバインドされません。ただし、同じ構文で表されるユニバーサル参照は、右辺値と左辺値の両方にバインドできます。この二重の動作は混乱を招くように思えるかもしれないので、基礎となるメカニズムを明確にしましょう。
T&& などのユニバーサル参照には、T を「オブジェクト型」または「参照型」のいずれかとして推定する機能があります。右辺値が渡されると、T はオブジェクト型として推定でき、その結果、型 T&& の関数パラメーターが得られます。あるいは、左辺値が渡されると、T は参照型として推定し、参照折りたたみルールに基づいて事実上 T& に折りたたみます。
この動作は、テンプレート引数の推定および参照折りたたみルールとシームレスに統合されますが、小さな例外として、テンプレート パラメーターを参照型として推定できるようになりました。ユニバーサル参照の構文はこの演繹メカニズムと一致しており、テンプレートや言語の残りの部分全体で一貫した型システムが可能になります。
C 委員会は代替構文を慎重に検討しましたが、最終的には反対の決定を下しました。 T&&&&&&、T*&、T@、T&42 などの提案が検討されましたが、不要であり、さらに混乱を招く可能性があると判断されました。
ユニバーサル参照の構文 T&& は、参照折りたたみルールとの互換性を確保し、構文的にオブジェクト型と参照型を処理する一貫した方法。転送参照と右辺値参照に同じ構文を使用することにより、言語は単純さを維持し、混乱を最小限に抑えます。
以上がC の転送参照と右辺値参照が同じ構文を共有するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。