Home > Article > Backend Development > Why Can\'t I Bind a Non-Const Lvalue Reference to an Rvalue in C ?
Cannot Bind Non-Const Lvalue Reference to Rvalue: A Resolution
The given code snippet encountered an error while initializing an object of class Foo within the constructor of class Bar. The error message indicates that a non-const lvalue reference (Foo f) is being bound to an rvalue (the result of calling genValue()).
In C , non-const reference parameters can only refer to named variables (lvalues). However, the result of genValue() is a temporary value (rvalue). To resolve this issue, we need to pass the value of genValue() by value (int).
<code class="cpp">class Foo { public: Foo(int x) { this->x = x; } private: int x; }; class Bar { public: Bar(): f(genValue()) { } private: Foo f; int genValue() { int x; // do something ... x = 1; return x; } };</code>
By changing the constructor argument to int, we can now initialize the Foo object within the constructor scope without any errors.
The above is the detailed content of Why Can\'t I Bind a Non-Const Lvalue Reference to an Rvalue in C ?. For more information, please follow other related articles on the PHP Chinese website!