我很困惑为什么这个是对的。返回值是引用类型int&
,但h()
函数int
在句中返回值类型return x
。那么,int
return 是如何变为 a 的int &
呢?
这是代码片段,可以使用 C++ 编译器很好地编译。
int& h() {
int q;
static int x;
return x;
}
这将返回对 static 的引用int
。函数在第x
一次h
调用时被初始化。像这样使用它:
int& href = h();
++href; // increments the static variable
int& href2 = h(); // another reference to the same static variable
该变量q
应该没有效果,我认为它是可疑的。
引用意味着您实际上实际上返回了相同的变量,因此更改返回的值将直接改变x
If 代码已被编写的值:
int h()
{
int q;
static int x;
return x;
}
(即不是参考)然后您将返回值的副本x
(尽管您应该公平地查看Return Value Optimization。)返回参考是有效的,但是,有时(多线程是一个明显的例如)可能不受欢迎和令人困惑的地方。
int&
是对 int 的引用。x
是一个整数。因此return x;
,从返回 an 的函数返回对int&
的引用x
。
还:
返回对局部变量的引用是危险的,因为局部变量在函数退出时被破坏。当您获得参考时,它所引用的东西并不存在。这被称为悬空引用,它就像一个不指向任何东西的指针。
静态变量不是局部变量,在函数退出时不会被销毁。因此,当你得到它时,引用仍然指向一个有效的对象。