急求!关于函数返回临时对象的问题

字正腔圆 2012-06-11 06:08:33
#include "stdafx.h"
#include <iostream>
using namespace std;

class Data
{
public:
Data();
Data(int a, int b);
void putshow();
friend const Data operator +(const Data& d1, const Data& d2);
Data reply();

private:
int m_a, m_b;
};
void Data::putshow()
{
cout<<"======================================="<<endl;
}
Data::Data()
{
m_a = 0;
m_b = 0;
}
Data::Data(int a, int b)
{
m_a = a;
m_b = b;
}
Data operator +(const Data& d1, const Data& d2)
{
Data result;
result.m_a = d1.m_a + d2.m_a;
result.m_b = d1.m_b + d2.m_b;
return result;
}

Data Data::reply()
{
Data sreturn = *this;
return sreturn;
}

int _tmain(int argc, _TCHAR* argv[])
{
Data m1(1, 2), m2(3, 4), m3(5, 6);
m1.reply().putshow();//???为什么返回临时的了栈对象,还可以对它进行操作??????
(m1+m2)=m3;//??
return 0;
}
...全文
213 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq120848369 2012-06-12
  • 打赏
  • 举报
回复
看书。
字正腔圆 2012-06-12
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]

http://www.cnblogs.com/liyiwen/archive/2009/12/02/1615711.html
[/Quote]不错哦,哈哈
字正腔圆 2012-06-12
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]

引用 13 楼 的回复:

引用 1 楼 的回复:

临时对象也有生命周期,在其生命周期内都可以对其操作
临时对象在返回完了之后生命周期还没结束吗?那那什么时候结束啊?是不是随机、不定的啊?

一般临时对象的生存期至是完全表达式求值结束时结束。
也有特殊情况:引用绑定的临时对象生存期随引用;异常对象生存期延展到catch(xxx){xxx}中。
[/Quote]哇哦、、谢谢
FrankHB1989 2012-06-12
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]

引用 1 楼 的回复:

临时对象也有生命周期,在其生命周期内都可以对其操作
临时对象在返回完了之后生命周期还没结束吗?那那什么时候结束啊?是不是随机、不定的啊?
[/Quote]
一般临时对象的生存期至是完全表达式求值结束时结束。
也有特殊情况:引用绑定的临时对象生存期随引用;异常对象生存期延展到catch(xxx){xxx}中。
字正腔圆 2012-06-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

临时对象也有生命周期,在其生命周期内都可以对其操作
[/Quote]临时对象在返回完了之后生命周期还没结束吗?那那什么时候结束啊?是不是随机、不定的啊?
字正腔圆 2012-06-12
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

引用 6 楼 的回复:

你返回的是一个对象,在调用这句的时候生命周期还没有结束呢。
那请问什么时候结束啊?。。。55.。。我只知道返回的临时对象的内容会被复制存储到专门存储返回值的外部空间
[/Quote]不知道这个外部空间什么时候被释放
字正腔圆 2012-06-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

你返回的是一个对象,在调用这句的时候生命周期还没有结束呢。
[/Quote]那请问什么时候结束啊?。。。55.。。我只知道返回的临时对象的内容会被复制存储到专门存储返回值的外部空间
字正腔圆 2012-06-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

为什么要“不能”你才肯满意?说说你认为“不能”的理由吧。
[/Quote]
我的意思是:在被调函数 内部 定义的栈对象 在该函数 执行完return语句之后( 比如(m1+m2)=m3;在m1+m2 调用operator+之后 ),生命期不是应该结束了吗?为什么还可以对其进行操作。。
Binzo 2012-06-11
  • 打赏
  • 举报
回复
对象有它的属性、行为。不能操作还有什么作用。
昨夜无风 2012-06-11
  • 打赏
  • 举报
回复
就像
int func()
{
int a = 10;
return a;
}

int n=func();

一样道理。只不过返回类对象会调用拷贝构造函数
W170532934 2012-06-11
  • 打赏
  • 举报
回复
你返回的是一个对象,在调用这句的时候生命周期还没有结束呢。
刘彬 2012-06-11
  • 打赏
  • 举报
回复
同问 ~~
taodm 2012-06-11
  • 打赏
  • 举报
回复
为什么要“不能”你才肯满意?说说你认为“不能”的理由吧。
Canvas 2012-06-11
  • 打赏
  • 举报
回复
你返回的是一个对象,当然可以操作啊
Canvas 2012-06-11
  • 打赏
  • 举报
回复
你返回的是一个对象,当然可以操作啊
lvjing_CSDN 2012-06-11
  • 打赏
  • 举报
回复
临时对象也有生命周期,在其生命周期内都可以对其操作

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧