当函数返回类型为类类型应用时

[复制链接]
查看11 | 回复1 | 2009-4-9 21:40:40 | 显示全部楼层 |阅读模式
#include
class A
{
public:
A(int i = 0)
{
a = i;
}
int a;
};
A& f(int i = 1)
{
return A(i);//为什么f的返回类型为A& 时,编译器会报出这样的 警告“returning address of local variable or temporary”而当我将A& 改为A时又没有这样的警告
}
void main()
{
A AObject = f(3);
cout <<AObject.a<<endl;//输出的结果不是3(是一个随机数),为什么????但当我把函数f的返回类型改为A时,该输出语句的输出结果是3,为什么??
}
请C++高手帮我解释一下

回复

使用道具 举报

千问 | 2009-4-9 21:40:40 | 显示全部楼层
A& f(int i = 1) { return A(i);//为什么f的返回类型为A& 时,编译器会报出这样的 警告“returning address of local variable or temporary”而当我将A& 改为A时又没有这样的警告 } 对于你的疑问,见下面的解释:(1)A& f(int i = 1){return A(i);}返回前,A(i)会调用的构造函数生成临时对象,这个临时对象位于堆栈中,但函数结束,堆栈会被回收,而你返回的引用就是那个已经被销毁的对象,所以取其内容时为乱码,且编译器给出警告。 (2)当改为: A f(int i = 1){return A(i);}由于是返回对象类型,...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行