在c ++中返回类型

Gau*_*mar 1 c++

#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)

Jam*_*lis 5

int&是一种类型; 它的意思是"对...的引用int".

&x是一种表达; 它的意思是"拿地址" x.一元运算&符是地址运算符.它需要其参数的地址.如果xint,那么类型&x是"指向int"(即,int*).

int&并且int*是不同的类型.参考文献和指针在许多方面都是相同的; 也就是说,它们都是指物体,但它们的使用方式却截然不同.首先,引用隐式引用一个对象,并且不需要间接来获取引用的对象.获取指针引用的对象需要显式间接(使用*->).

这两种用途&完全不同.它们也不是唯一的用途:例如,还有&执行按位和操作的二元运算符.


另请注意,您的函数fun不正确,因为您返回对局部变量的引用.函数返回后,将a被销毁并停止存在,因此您永远不能使用从函数返回的引用.如果你使用它,例如通过分配的结果fun()p为你做什么,该行为是不确定的.

从函数返回引用时,必须确保函数返回后引用的对象将存在.