#include<iostream>
int & fun();
int main()
{
int p = fun();
std::cout << p;
return 0;
}
int & fun()
{
int a=10;
return a;
}
为什么这个程序没有在第 6 行给出错误“从 int* 到 int 的无效转换”,就像我们这样做时发生的那样?
int x = 9;
int a = &x;
最佳答案
int&
是一种类型;它的意思是“对 int
的引用。”
&x
是一个表达式;它的意思是“获取 x
的地址”。一元 &
运算符是地址运算符。它采用其参数的地址。如果 x
是 int
,则 &x
的类型是“指向 int
的指针”(即, int*
).
int&
和 int*
是不同的类型。引用和指针在许多方面是相同的;也就是说,它们都指对象,但它们的使用方式却大不相同。一方面,引用隐式引用一个对象,不需要间接访问被引用的对象。需要显式间接(使用 *
或 ->
)来获取指针引用的对象。
这两种&
的用法是完全不同的。它们也不是唯一的用途:例如,还有执行按位与运算的二进制 &
运算符。
另请注意,您的函数 fun
不正确,因为您返回了对局部变量的引用。函数返回后,a
将被销毁并不再存在,因此您永远无法使用从函数返回的引用。如果你确实使用它,例如通过将 fun()
的结果分配给 p
,行为是未定义的。
从函数返回引用时,您必须确定引用所指向的对象在函数返回后将存在。
关于c++ - C++中的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5932239/