常量变量与常量参考

klm*_*123 4 c++ reference constant-expression

在一些C++源代码中,我看到表达式结果可以保存为常量崇敬.像这样:

 const int &x = y + 1;
Run Code Online (Sandbox Code Playgroud)

这是什么意思?有没有这方面的文件?我找不到..


对我来说,它似乎相当于:

 const int x = y + 1;
Run Code Online (Sandbox Code Playgroud)

因为程序的结果保持不变.它真的相同吗?

如果是,为什么语言允许第一种方式来编写它?看起来很混乱.

如果没有什么区别?

pip*_*289 5

不同之处应该是结果是否被复制/移动.在第一种情况下:

const int& x = y + 1;
Run Code Online (Sandbox Code Playgroud)

y+1基本上保存为临时值.然后,我们初始化x对此临时结果的引用.在另一种情况下:

const int x = y + 1;
Run Code Online (Sandbox Code Playgroud)

我们使用该值计算y + 1并初始化常量变量x.

在使用整数的实践中,没有明显的区别.如果y+1碰巧是一个大型数据结构,例如一个1MB数据的类,这可能会产生显着的差异.

  • 此外,在此行之后,基本上不可能注意到行为的任何差异.初始化后,`x`表现完全相同.使用更大的数据结构,它可以在`const X x = y + 1`中调用复制构造函数.(或者它可能*忽略它).另一方面,`const X&x = y + 1`保证不会调用复制构造函数. (2认同)