我被告知必须在初始化列表中初始化引用变量,但为什么这是错误的?
class Foo
{
public:
Foo():x(0) {
y = 1;
}
private:
int& x;
int y;
};
Run Code Online (Sandbox Code Playgroud)
因为0是临时对象?如果是这样,可以引用什么样的对象?可以拿地址的对象?
谢谢!
GMa*_*ckG 15
0不是左值,它是右值.您无法修改它,但您尝试绑定到可以修改它的引用.
如果您参考const,它将按预期工作.考虑一下:
int& x = 0;
x = 1; // wtf :(
Run Code Online (Sandbox Code Playgroud)
这显然是不行的.但是const&可以绑定临时(rvalues):
const int& x = 0;
x = 1; // protected :) [won't compile]
Run Code Online (Sandbox Code Playgroud)
请注意,临时的生命周期在构造函数完成时结束.如果您为常量进行静态存储,那么您将是安全的:
class Foo
{
public:
static const int Zero = 0;
Foo() : x(Zero) // Zero has storage
{
y = 1;
}
private:
const int& x;
int y;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7546 次 |
| 最近记录: |