++问题

whirl 2003-08-19 12:43:28
a++ = b++;
编译过不了而 ++a = b++;则行,为什么?
...全文
20 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
cdxiaogan 2003-08-20
  • 打赏
  • 举报
回复
up
ppm07 2003-08-20
  • 打赏
  • 举报
回复
to plainsong:
小弟认为作为一个类的设计者,所重载的类的所有操作符都应该符合基本类型的操作规则,即基本类型能通得过的表达式换成类的表达式也应该能通得过,反之亦然。
dofty 2003-08-19
  • 打赏
  • 举报
回复
a++先将a的值保存,再将a的值加1,返回保存的a值,所以不可赋值
++a将a的值加1,然后返回a的引用,所以可以赋值
sandrowjw 2003-08-19
  • 打赏
  • 举报
回复
a++返回的不是l-value,应该是一个临时变量吧。
oopig 2003-08-19
  • 打赏
  • 举报
回复
这个问题很好,up一下。
frank026 2003-08-19
  • 打赏
  • 举报
回复
我同意plainsong的说法,因为a++返回的是一个值,而不是变量,所以不能赋值,他不是l_value,而++a返回的是变量a(自增后),他有地址,所以可以赋值
短歌如风 2003-08-19
  • 打赏
  • 举报
回复

dofty所说的是对的,正是因为dofty所说的原因,才导致sandrowjw所说的结果。不过都只适用于基本类型,因为class的operator的返回值是由编写者决定的(除类型转换操作符外)。

dofty 2003-08-19
  • 打赏
  • 举报
回复
我所说的和sandrowjw(伊卡洛斯) 并不相左返回的类型不同也就决定了它是不是l-value




sandrowjw 2003-08-19
  • 打赏
  • 举报
回复
哦,是这样,是我没仔细想。
亮剑_ 2003-08-19
  • 打赏
  • 举报
回复
a++不是左值,而++a则是
ppm07 2003-08-19
  • 打赏
  • 举报
回复
public:
int a;
A& operator++()
{ return ++a,*this; }
const A operator++(int)
{ return ++a,*this; }
};
这样改的话就和int一致了。都通不过编译。
jack_wq 2003-08-19
  • 打赏
  • 举报
回复
为什么一定要这么做,费力不讨好!
紫郢剑侠 2003-08-19
  • 打赏
  • 举报
回复
确实有意思...
sandrowjw 2003-08-19
  • 打赏
  • 举报
回复
很有趣,请看下面的代码:
class A
{
public:
int a;
A& operator++()
{ return ++a,*this; }
A operator++(int)
{ return ++a,*this; }
};

然后
A a;
a.a = 0;
A& b = a++;//如果把A改成int则不行
cout<<b.a<<endl;

输出的是1,系统的确给b分配了空间,而且它的地址就在a的后面,可以加一个copy构造函数,会发现它被调用了两次。但是对于int则没有这种设定,我是在vc下面试的,看来该回去查查看这是不是符合C++规范。
maomaomaomao 2003-08-19
  • 打赏
  • 举报
回复
a++是先取出a的值再将值自增,而++a是将a自增后再放回原地址
made_in_ 2003-08-19
  • 打赏
  • 举报
回复
dofty(dofty)所说的理由并不成立.sandrowjw(伊卡洛斯)是对的.
a++返回的不是一个l-value,所以无法给其赋值.
++a返回的则是一个可以赋值的l-value.

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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