ホームページ >バックエンド開発 >C++ >C で Const 参照によって右辺値を渡すことができるのはなぜですか?

C で Const 参照によって右辺値を渡すことができるのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-27 09:32:30385ブラウズ

 Why Can I Pass Rvalues by Const Reference in C  ?

Const 参照による右辺値の保持: A C パズル

C では、通常の参照とは異なり、 const 参照による右辺値 (一時オブジェクト) の受け渡しが許可されています。 。次のプログラムを考えてみましょう。

<code class="cpp">void display(const int& a) { cout << a; }

int main() {
  int a = 5;
  display(a);      // Works with an lvalue
  display(5);      // Also works with an rvalue
  return 0;
}</code>

このプログラムでは、参照が const としてマークされている場合でも、左辺値と右辺値の両方を表示関数に渡すことができます。通常、const 参照は左辺値の保存に関連付けられているため、この動作は不可解です。

Const 参照のライフタイム拡張

この動作を理解する鍵はセマンティクスにあります。 C の const 参照の。 const 参照は、参照されるオブジェクトの存続期間を、それを含むスコープが終了するまで延長します。右辺値の場合、これにより、const 参照がスコープ外になるまで、一時オブジェクトの破棄が効果的に防止されます。

例: 右辺値の有効期間を延長する

たとえば、display(5) が呼び出されると、次のことが発生します。

  • int 型の右辺値が値 5 で作成されます。
  • const 参照 a がこの右辺値にバインドされます。
  • const 参照は、表示関数が終了するまで右辺値の有効期間を延長します。
  • 右辺値は、値 5 を出力するために関数内で使用されます。
  • display 関数が戻り、const 参照がスコープ外になり、右辺値が最終的に破棄されます。

これは、const 参照が右辺値を指し続け、たとえ関数が存在していたとしても存在し続けることができる方法を示しています。そうしないとすぐに破棄されます。

以上がC で Const 参照によって右辺値を渡すことができるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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