0

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

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

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

3 回答 3

4

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

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

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

于 2012-04-12T13:06:13.927 回答
1

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

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

(即不是参考)然后您将返回值的副本x(尽管您应该公平地查看Return Value Optimization。)返回参考是有效的,但是,有时(多线程是一个明显的例如)可能不受欢迎和令人困惑的地方。

于 2012-04-12T13:28:42.957 回答
1

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

还:

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

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

于 2012-04-12T13:32:41.707 回答