我已经初始化了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
答案 0 :(得分:5)
我已经初始化了const引用z并试图重新初始化
您尝试过,但是没有。当使用构造函数成员初始化列表初始化成员时,将忽略任何默认成员初始化程序。 z
从未使用值为9
的临时变量。因此,C ++规则仍在发挥作用,您可能没有重新设置引用,甚至从未尝试过这样做。
如果您没有使用z
初始化c
,那么您将有一个悬而未决的参考和代码,这些代码和代码具有不确定的行为。因为9
不是对象,所以它是文字。引用只能绑定到对象,因此您将其绑定到一个临时对象,一旦对象初始化完成,该临时对象将超出范围。