c++ - C++中的返回类型

标签 c++

#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 的地址”。一元 & 运算符是地址运算符。它采用其参数的地址。如果 xint,则 &x 的类型是“指向 int 的指针”(即, int*).

int&int* 是不同的类型。引用和指针在许多方面是相同的;也就是说,它们都指对象,但它们的使用方式却大不相同。一方面,引用隐式引用一个对象,不需要间接访问被引用的对象。需要显式间接(使用 *->)来获取指针引用的对象。

这两种&的用法是完全不同的。它们也不是唯一的用途:例如,还有执行按位与运算的二进制 & 运算符。


另请注意,您的函数 fun 不正确,因为您返回了对局部变量的引用。函数返回后,a 将被销毁并不再存在,因此您永远无法使用从函数返回的引用。如果你确实使用它,例如通过将 fun() 的结果分配给 p,行为是未定义的。

从函数返回引用时,您必须确定引用所指向的对象在函数返回后将存在。

关于c++ - C++中的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5932239/

相关文章:

c++ - 具有模板化参数的类函数偏特化

c++ - 渲染时不出现 3D 模型

c++ - 从另一个共享对象动态加载共享对象时的约束?

c++ - 使用 unordered_map 确定子数组索引失败的函数

c++ - 分配给引用参数会使对象无效

c++ - Input String 应该是 Integer - C++

C++ 异构列表

c++ - 二进制 '=' : no operator found which takes a right-hand operand (or there is no acceptable conversation)

c++ - 将十六进制代码格式化为 asm 代码

c++ - UTF-8 char * 到 CString 的转换