在一些 C++ 源代码中,我发现一个表达式的结果可以保存为常量引用。像这样:
const int &x = y + 1;
这是什么意思?是否有相关文档可以查看?我找不到。
对我来说,它似乎相当于:
const int x = y + 1;
程序的结果保持不变,是否真正等价?
如果是,为什么语言允许第一种方式进行编写?这看起来很混乱。
如果不是,有什么区别?
在一些 C++ 源代码中,我发现一个表达式的结果可以保存为常量引用。像这样:
const int &x = y + 1;
这是什么意思?是否有相关文档可以查看?我找不到。
对我来说,它似乎相当于:
const int x = y + 1;
程序的结果保持不变,是否真正等价?
如果是,为什么语言允许第一种方式进行编写?这看起来很混乱。
如果不是,有什么区别?
const int& x = y + 1;
y+1
的值实际上被保存为一个临时值。然后我们将一个引用 x
初始化为这个临时结果。在另一种情况下:
const int x = y + 1;
y + 1
并用该值初始化一个常量变量x
。y+1
是一个庞大的数据结构,例如一个占用1MB内存的类,这可能会导致重大差异。x
的行为方式完全相同。对于较大的数据结构,它可能会在 const X x = y + 1
中调用复制构造函数(或者可能会省略它)。另一方面,const X &x = y + 1
保证不会调用复制构造函数。 - Aaron McDaid
y + 1
而获得的临时变量。 - user529758y+1
会产生一个值但不是临时对象。因此,引用绑定本身创建了临时对象。 - dyp