#include<iostream>
int & fun();
int main()
{
int p = fun();
std::cout << p;
return 0;
}
int & fun()
{
int a=10;
return a;
}
Run Code Online (Sandbox Code Playgroud)
为什么这个程序没有在第6行给出"从int*到int的无效转换"的错误,因为我们这样做会发生这种情况?
int x = 9;
int a = &x;
Run Code Online (Sandbox Code Playgroud)
int&是一种类型; 它的意思是"对...的引用int".
&x是一种表达; 它的意思是"拿地址" x.一元运算&符是地址运算符.它需要其参数的地址.如果x是int,那么类型&x是"指向int"(即,int*).
int&并且int*是不同的类型.参考文献和指针在许多方面都是相同的; 也就是说,它们都是指物体,但它们的使用方式却截然不同.首先,引用隐式引用一个对象,并且不需要间接来获取引用的对象.获取指针引用的对象需要显式间接(使用*或->).
这两种用途&完全不同.它们也不是唯一的用途:例如,还有&执行按位和操作的二元运算符.
另请注意,您的函数fun不正确,因为您返回对局部变量的引用.函数返回后,将a被销毁并停止存在,因此您永远不能使用从函数返回的引用.如果你使用它,例如通过分配的结果fun()来p为你做什么,该行为是不确定的.
从函数返回引用时,必须确保函数返回后引用的对象将存在.