c++问题

snowingboy 2009-04-01 05:34:46
以下代码:

#include <iostream>
using namespace std;

class Test
{
public:
int i;

public:
Test (int n = 0){ i = n; }
Test operator = (Test & t);
};

Test Test::operator = (Test & t)
{
/..../

i = t.i;

/..../

return *this;
}

int main (void)
{
Test t1 (1);
Test t2 (5);
Test t3;

cout << (t3 = t2)= t1).i << endl;
//cout << (t3 = t2).i++ << endl;

return 0;
}

将注释去掉的话,编绎就会出错。
我是在VC下试验的。
错误的意思跟左值有关,由于现在本机上没有VC,也没有GCC,没有贴出错误信息。

求救,谢谢!
...全文
119 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
snowingboy 2009-04-01
  • 打赏
  • 举报
回复
((t3 = t2)= t1);
=
临时对象.operator = ( t1 );

但临时对象不能用作左值吧,没有名字引用该对象,所以不能用"++"

小弟的理解是这样的。

我对左值和右值的概念不清楚。
pushware 2009-04-01
  • 打赏
  • 举报
回复
cout << ((t3 = t2)= t1).i << endl;

这个能通过编译就不知道是什么问题了,也许是优化。。。

snowingboy 2009-04-01
  • 打赏
  • 举报
回复
呵呵,是我自己把搞错了。
  • 打赏
  • 举报
回复
我的编译器都不通过///
pushware 2009-04-01
  • 打赏
  • 举报
回复
嘿嘿,但是我在g++上尝试了两种,都可以编译通过,执行结果一致
lgccaa 2009-04-01
  • 打赏
  • 举报
回复
pushware 2009-04-01
  • 打赏
  • 举报
回复
据我有限的c++理解,问题应该是由于对临时变量操作引起的错误。
//cout < < (t3 = t2).i++ < < endl;
根据Test Test::operator = (Test & t) ;(t3 = t2)表达式的值是一个t3的临时拷贝,因为opertor=返回的是Test,而不是Test &, 所以我建议修改成返回引用。

而且通常我都回返回应用的,这样可以用于连续复制。
genius_tong 2009-04-01
  • 打赏
  • 举报
回复
好诡异。。
mengde007 2009-04-01
  • 打赏
  • 举报
回复
没必要这么做……

65,211

社区成员

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

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