使用需要非常量左值引用的私有成员构造对象时构造函数,就像 Foo 的情况一样,传递适当的值可能具有挑战性。修改 Foo 类并不总是可行,并且使用原始指针也是不可取的。
在这种情况下,错误源于尝试将类型为 'int&' 的左值引用绑定到类型为 'int' 的右值:初始化 Bar 类的私有成员“f”。 Foo 构造函数需要一个命名变量,而不是临时值,如本例所示,“genValue()”返回一个整数。
要解决此问题,请考虑按值将参数传递给 Foo 构造函数的参考。通过这样做,将创建“genValue()”返回的整数的副本并将其分配给 Foo 对象的“x”成员。
这是更正后的代码:
<code class="cpp">class Foo { public: Foo(int x) { // Pass by value this->x = x; } private: int x; }; class Bar { public: Bar(): f(genValue()) { // Pass by value } private: Foo f; int genValue() { int x; // do something ... x = 1; return x; } };</code>
通过将 genValue() 返回值作为实际参数传递,编译器将临时变量的值分配给 Foo 对象的 x 成员。这种方法可以避免错误,同时保持预期的行为。
以上是使用非常量左值引用初始化私有成员时如何解决绑定错误?的详细内容。更多信息请关注PHP中文网其他相关文章!