gpt4 book ai didi

c++ - 在初始化列表中初始化引用

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:57:14 26 4
gpt4 key购买 nike

我被告知必须在初始化列表中初始化引用变量,但为什么这是错误的?

   class Foo
{
public:
Foo():x(0) {
y = 1;
}
private:
int& x;
int y;
};

因为0是一个临时对象?如果可以,引用可以绑定(bind)什么样的对象?可以带地址的对象?

谢谢!

最佳答案

0 不是左值,而是右值。您无法修改它,但您正在尝试绑定(bind)到可以修改它的引用。

如果您将引用设置为 const,它将按预期工作。考虑一下:

int& x = 0;
x = 1; // wtf :(

这显然是不行的。但是 const& 可以绑定(bind)到临时值(右值):

const int& x = 0;
x = 1; // protected :) [won't compile]

请注意,临时对象的生命周期在构造函数完成时结束。如果你为你的常量做静态存储,你会很安全:

class Foo
{
public:
static const int Zero = 0;

Foo() : x(Zero) // Zero has storage
{
y = 1;
}
private:
const int& x;
int y;
};

关于c++ - 在初始化列表中初始化引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2232226/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com