thb*_*thb 1 c++ const reference undefined-behavior const-reference
在C++中,可以const &改变的价值吗?
好吧,当然不能改变,可以吗?这const意味着什么.而且,听听Stroustrup:
甲
const左值参考指的是恒定的,这是从视角的参照的用户的点不可变的.
但是这个怎么样?
#include <iostream>
int main() {
int a = 0;
const int& r = a;
const int old_r = r;
++a;
const int new_r = r;
std::cout
<< "old_r == " << old_r
<< " but new_r == " << new_r << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在我的机器上,这输出,old_r == 0 but new_r == 1.
这是我真正的问题.在上面的代码中,查看该行
const int new_r = r;
Run Code Online (Sandbox Code Playgroud)
只要
&new_r既不在此行也不在代码的其他地方提取volatile,没有任何东西阻止优化编译器从合并old_r和new_r成一个单一的固定的对象,处理该行,虽然它内容如下?
const int& new_r = old_r;
Run Code Online (Sandbox Code Playgroud)
我问,因为据我所知,如果编译器做了这样的优化,那可能会改变行为.该程序可能输出,old_r == 0 but new_r == 0.
相关问题
我找到的最接近相关的现有问题是这一个:
以下也是相关的,但与目前的问题不同,涉及演员:
另见N4659(草案C++ 17标准),第二节.10.1.7.1, "在CV-预选赛. "
问题顶部的Stroustrup的引用来自教派."C++编程语言"的第7.7.2节,第4版.当然,没有作者可以在一本千页的书中完美地写出每一个句子; 但也许Stroustrup很清楚,我只是读错了.不过,你可能会看到为什么句子让我感到困惑.这就是我问过的原因.
在C++中,const&value的值可以改变吗?
是的,这是完全合法的.取一个const&变量并不能阻止该变量被修改,它只是意味着你不能通过引用修改变量.这意味着
int a = 42;
int const& b = a;
++a;
std::cout << a << " " << b;
Run Code Online (Sandbox Code Playgroud)
将打印
43 43
Run Code Online (Sandbox Code Playgroud)
我试过做
++b;
Run Code Online (Sandbox Code Playgroud)
虽然这将是一个编译器错误作为b"的值的访问是const和++是一个非const的操作.
| 归档时间: |
|
| 查看次数: |
120 次 |
| 最近记录: |