首页  >  文章  >  后端开发  >  使用非常量左值引用初始化私有成员时如何解决绑定错误?

使用非常量左值引用初始化私有成员时如何解决绑定错误?

Barbara Streisand
Barbara Streisand原创
2024-10-30 01:46:02295浏览

 How to Resolve Binding Errors When Initializing Private Members with Non-Const Lvalue References?

解决绑定错误:将左值引用转换为右值

使用需要非常量左值引用的私有成员构造对象时构造函数,就像 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn