c ++问题中的引用

时间:2010-08-05 06:10:02

标签: c++

我听说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;
 }

3 个答案:

答案 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)

我希望这段代码只是为了显示问题,存储对类外定义的变量的引用是非常危险的,因为当引用的变量退出时,你的类没有任何控制权(或知道权)。范围。