我很困惑为什么这个是对的。返回值是引用类型int&
,
但是h()
函数在句子int
中返回值return x
。那么,int
如何更改为int &
?
这是代码片段,可以使用C ++编译器编译。
int& h() {
int q;
static int x;
return x;
}
答案 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 变量的引用是危险的,因为当函数退出时会破坏局部变量。当您获得引用时,它引用的内容不存在。这被称为悬空引用,它就像一个指向任何东西的指针。
静态变量不是局部变量,并且在函数退出时不会被破坏。因此,当你得到它时,引用仍然指向一个有效的对象。