可以使用初始化程序列表更改const值吗?

nih*_*xit 0 c++ const

我已经初始化了常量引用z,并尝试使用初始化列表重新初始化它,而我得到的输出是更改后的值。没有错误,没有警告。

#include <iostream>
using namespace std;
class Point {
    private:
    const int &z=9;

    public:
    Point (int &c):z(c){}

    int get_setz(){
        return z;
    }

};

int main()
{
    int m=3;
    Point p(m);
    cout << p.get_setz();
    return 0;
}

Output :
3
Run Code Online (Sandbox Code Playgroud)

Sto*_*ica 5

我已经初始化了const引用z并试图重新初始化

您尝试过,但是没有。当使用构造函数成员初始化列表初始化成员时,将忽略任何默认成员初始化程序。z从来没有用这个值提到过临时的9。因此,C ++规则仍在发挥作用,您可能不会重新设置参考,甚至从未尝试过这样做。

与此前你没有初始化zc,你有一个悬空的参考和代码手上沾有未定义行为。因为那9不是对象,所以是文字。引用只能绑定到对象,因此您将其绑定到一个临时对象,一旦对象初始化完成,该临时对象将超出范围。