可能重复:
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*'
..实际上我不清楚临时性,即它们何时被创建以及何时被销毁.所以,请在某种程度上解释临时性.
&a
生成一个临时的,不能绑定到非const引用.
此外,您的代码有几个缺陷.
1)&a
有类型,int*
而你通过引用返回ie int &
.类型不匹配.
2)即使你改变&a
对a
你的代码仍然无法工作,因为返回引用一个局部变量,然后返回语句使用结果为UB.
来自临时的非const引用的初始化无效
C++不允许temporaries绑定到非常量引用.
例如,你不能做这样的事情
int &x = 5;
Run Code Online (Sandbox Code Playgroud)
因为临时int(5)
会在最后被破坏它所属的表达式.但是,对const的引用可以从临时初始化,即您可以安全地编写
const int &x = 5;
在这种情况下,将临时值附加到const-reference会延长其生命周期.它被摧毁x
后被摧毁.
归档时间: |
|
查看次数: |
133 次 |
最近记录: |