我已经初始化了常量引用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)
我已经初始化了const引用z并试图重新初始化
您尝试过,但是没有。当使用构造函数成员初始化列表初始化成员时,将忽略任何默认成员初始化程序。z从来没有用这个值提到过临时的9。因此,C ++规则仍在发挥作用,您可能不会重新设置参考,甚至从未尝试过这样做。
与此前你没有初始化z有c,你有一个悬空的参考和代码手上沾有未定义行为。因为那9不是对象,所以是文字。引用只能绑定到对象,因此您将其绑定到一个临时对象,一旦对象初始化完成,该临时对象将超出范围。