我很困惑为什么这一个是正确的。返回值是参考类型int&
, ,但h()
函数返回值int
类型的句子return x
。那么,int
如何返回到int &
?无法理解代码片段的返回类型
这是代码片段,并且与C++编译器一起编译得很好。
int& h() {
int q;
static int x;
return x;
}
我很困惑为什么这一个是正确的。返回值是参考类型int&
, ,但h()
函数返回值int
类型的句子return x
。那么,int
如何返回到int &
?无法理解代码片段的返回类型
这是代码片段,并且与C++编译器一起编译得很好。
int& h() {
int q;
static int x;
return x;
}
这将返回静态int
的参考。 x
在第一次调用函数h
时被初始化。使用这样的:
int& href = h();
++href; // increments the static variable
int& href2 = h(); // another reference to the same static variable
变量q
应该没有影响,我会认为这是可疑的。
参考意味着你实际上返回实际上是相同的变量,以便改变返回究竟会直接改变的x
值的值如果代码已经writtten:
int h()
{
int q;
static int x;
return x;
}
(即不参考),那么你会返回一个副本的值x
(虽然你应该公平检查Return Value Optimization。)返回一个引用是有效的,但是,有时(多线程是一个明显的例子),其中它可能是不受欢迎和令人困惑的。
int&
是对int的引用。 x
是一个int。因此,返回int&
的函数return x;
返回对x
的引用。
另外:
返回到当地变量的引用是危险的,因为局部变量销毁时,该函数退出时。当你获得参考时,它所引用的东西不存在。这被称为悬空参考,它就像一个指向任何东西的指针。
静态变量不是局部变量,并且在函数退出时不会被破坏。因此,当你得到它时,引用仍指向一个有效的对象。
有点理解 – user1279988 2012-04-12 13:10:04