临时问题

Gau*_*mar 3 c++

可能重复:
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)

为什么这段代码会给出错误,错误:invalid initialization of non-const reference of type 'int&' from a temporary of type 'int*'..实际上我不清楚临时性,即它们何时被创建以及何时被销毁.所以,请在某种程度上解释临时性.

Pra*_*rav 8

&a 生成一个临时的,不能绑定到非const引用.

此外,您的代码有几个缺陷.

1)&a有类型,int*而你通过引用返回ie int &.类型不匹配.

2)即使你改变&aa你的代码仍然无法工作,因为返回引用一个局部变量,然后返回语句使用结果为UB.


来自临时的非const引用的初始化无效

C++不允许temporaries绑定到非常量引用.

例如,你不能做这样的事情

int &x = 5; 
Run Code Online (Sandbox Code Playgroud)

因为临时int(5)会在最后被破坏它所属的表达式.但是,对const的引用可以从临时初始化,即您可以安全地编写

const int &x = 5;

在这种情况下,将临时值附加到const-reference会延长其生命周期.它被摧毁x后被摧毁.