#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
is an int
,那么类型&x
是“一个指向int
“ (那是,int*
).
int&
and int*
是不同的类型。引用和指针在很多方面都是相同的;也就是说,它们都指的是对象,但它们的使用方式却截然不同。一方面,引用隐式引用一个对象,不需要间接访问所引用的对象。显式间接(使用*
or ->
) 需要获取指针引用的对象。
这两个用途&
是完全不同的。它们也不是唯一的用途:例如,还有二进制文件&
执行按位与运算的运算符。
另请注意,您的功能fun
不正确,因为您返回对局部变量的引用。一旦函数返回,a
被销毁并不再存在,因此您永远无法使用从函数返回的引用。如果您确实使用它,例如通过分配结果fun()
to p
正如您所做的那样,行为是未定义的。
当从函数返回引用时,您必须确定引用引用的对象在函数返回后仍然存在。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)