相关疑难解决方法(0)

为什么const int和bind绑定到int?

在C++入门中,我发现const int &可以用int对象绑定.我不明白,因为我认为const int &应该绑定一个const int不是一个int对象,int对象可以改变,本书解释了这个问题,当const int &对象绑定时int; 两者之间有一个临时对象,例如:

int a=0;
const int &r=a;
Run Code Online (Sandbox Code Playgroud)

我们可以使用b临时值,所以上面等于:

const int b=a;
const int &r=b;
Run Code Online (Sandbox Code Playgroud)

但是我认为这本书不对,因为如果有一个临时的b存在之间,a并且r,价值r无法改变,但是当我在visual studio中调试以下编码时,我发现它不对:

int a=0;
const int &r=a;
a=3;
cout<<r<<endl;
Run Code Online (Sandbox Code Playgroud)

输出是可以改变r=3;的值r,为什么?我不明白.

c++ reference c++11

15
推荐指数
2
解决办法
2272
查看次数

const&指的是非易失性变量.变量发生了变化.更改是否使const&?无效?

在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 …

c++ const reference undefined-behavior const-reference

1
推荐指数
1
解决办法
120
查看次数