无法理解代码段的返回类型

时间:2012-04-12 12:58:10

标签: c++ types return

我很困惑为什么这个是对的。返回值是引用类型int&, 但是h()函数在句子int中返回值return x。那么,int如何更改为int &

这是代码片段,可以使用C ++编译器编译。

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

3 个答案:

答案 0 :(得分:4)

这将返回对静态int的引用。第一次调用函数x时初始化h。像这样使用它:

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

变量q应该没有效果,我认为这是可疑的。

答案 1 :(得分:1)

引用意味着您实际上实际上返回了相同的变量,因此更改返回的值将直接改变x的值如果代码已被写入:

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

(即不是参考)那么你将返回x值的副本(尽管你应该公平地查看Return Value Optimization。)返回引用是有效的,但是,有时候(多线程是一个明显的例子),它可能是不受欢迎和混乱的。

答案 2 :(得分:1)

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

此外:

返回对 local 变量的引用是危险的,因为当函数退出时会破坏局部变量。当您获得引用时,它引用的内容不存在。这被称为悬空引用,它就像一个指向任何东西的指针。

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