c++ - 返回引用和返回值

标签 c++ pointers reference

我不太确定我是否理解为什么当我们返回局部随机变量的引用时会出现问题。假设我们有这个例子。

int *myFunc() {
  int phantom = 4;
  return &phantom;
}

然后通常的说法是,当函数被使用时,变量phantom的内存在代码行int phantom = 4;执行后不再可用> 所以不能返回(至少目前我是这么理解的)。另一方面,对于函数,

int myFunc() {
  int phantom = 4;
  return phantom;
}

整型变量 phantom 的值将返回。 (我将值的返回视为对变量 phantom 的底层指针的取消引用)。

我在这里想念什么?为什么在第一种情况下存在编译错误,而在第二种情况下一切正常??

最佳答案

第一个不返回引用,它返回一个指针。一个指向局部变量的指针,一旦函数结束,该变量将超出范围,给您留下一个指向不再存在的变量的流浪指针。这就是您收到编译器警告(通常不是实际错误)的原因。

第二个代码复制值。一旦 return 语句完成,函数内的局部变量将永远不需要被引用或使用。

关于c++ - 返回引用和返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39942499/

相关文章:

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

qt - 从qt项目中引用dll文件

c++ - 使用命名空间标准与其他替代方案

c++ - VirtualBox - 如何编写驱动程序/插件?

c++ - 是否有 c++ std 解决方案来过滤和减少而不创建拷贝?

c - C 中使用指针的 for 循环声明

C++ 标准 : dereferencing NULL pointer to get a reference?

c++ - 在 C++ 中创建向导的工具

c - 错误: Incompatible integer to pointer conversion passing 'unsigned long'

c++ - 如何验证返回的 `auto` 变量是否为引用