我听说c ++中的引用只能被注册一次,但是这给了我一个是我的输出而没有返回任何错误!
struct f {
f(int& g) : h(g) {
h = 1;
}
~f() {
h = 2;
}
int& h;
};
int i() {
int j = 3;
f k(j);
return j;
}
答案 0 :(得分:9)
在捕获返回值j之后调用f的析构函数。
如果您希望j为2:
,您可能需要这样的东西int i( )
{
int j=3;
{
f k(j);
}
return j;
}
有关销毁顺序和退货声明的更详细说明,请参阅C++ destructor & function call order。
答案 1 :(得分:5)
您仍在初始化参考一次;赋值和初始化是不一样的。初始化设置h
,以便引用j
(您永远不会更改)。您的作业只会更改j
的值,该值与h
相同,但不会导致h
引用其他变量。
答案 2 :(得分:0)
我希望这段代码只是为了显示问题,存储对类外定义的变量的引用是非常危险的,因为当引用的变量退出时,你的类没有任何控制权(或知道权)。范围。