2012-04-12 130 views
0

我很困惑为什么这一个是正确的。返回值是参考类型int&, ,但h()函数返回值int类型的句子return x。那么,int如何返回到int &无法理解代码片段的返回类型

这是代码片段,并且与C++编译器一起编译得很好。

int& h() { 
int q; 
static int x; 
return x; 
} 

回答

4

这将返回静态int的参考。 x在第一次调用函数h时被初始化。使用这样的:

int& href = h(); 
++href; // increments the static variable 
int& href2 = h(); // another reference to the same static variable 

变量q应该没有影响,我会认为这是可疑的。

+0

有点理解 – user1279988 2012-04-12 13:10:04

1

参考意味着你实际上返回实际上是相同的变量,以便改变返回究竟会直接改变的x值的值如果代码已经writtten:

int h() 
{ 
    int q; 
    static int x; 
    return x; 
} 

(即不参考),那么你会返回一个副本的值x(虽然你应该公平检查Return Value Optimization。)返回一个引用是有效的,但是,有时(多线程是一个明显的例子),其中它可能是不受欢迎和令人困惑的。

1

int&是对int的引用。 x是一个int。因此,返回int&的函数return x;返回对x的引用。

另外:

返回到当地变量的引用是危险的,因为局部变量销毁时,该函数退出时。当你获得参考时,它所引用的东西不存在。这被称为悬空参考,它就像一个指向任何东西的指针。

静态变量不是局部变量,并且在函数退出时不会被破坏。因此,当你得到它时,引用仍指向一个有效的对象。