请问一个++i与i++的问题,请给我一个深刻点的解释,谢谢

ymy1248227142 2014-04-20 07:55:13
请问一下前者为什么是对的,后者为什么是错的?
(++a) += a; //正确
(a++) += a;//错误
请问这个怎么避免,虽然网上说什么a++不是可赋值的,但是这个理由太肤浅了,请高手给个深刻点的解释
...全文
330 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
蓝兔先生 2014-04-23
  • 打赏
  • 举报
回复
遇到这种问题, 我的第一反应不是考虑如何解决问题。 而是想给LZ一个忠告。 去了公司, 千万别写出这种代码。
feishen736 2014-04-23
  • 打赏
  • 举报
回复
建议楼主看看 C++ Primer。
ymy1248227142 2014-04-23
  • 打赏
  • 举报
回复
引用 14 楼 gz_qmc 的回复:
话说有一天,x去打酱油 路过东莞的时候无意间进了一家黑店 被迫堕落于烟尘之中 于是半过多世纪 不是伺候嫖客+,就是伺候嫖客- 终于有一天,x死了 警方在检查其遗物的时候只是意外的发现了一本日记 第一页写到: x++ 第二页写到: ++x 第三页写到: ++x++ 如果你是探长,请问你知道x是怎么死的吗?
没懂。。。
鸥翔鱼游1 2014-04-22
  • 打赏
  • 举报
回复
a++返回右值,右值不可赋值,这是最标准的解释
FrankHB1989 2014-04-22
  • 打赏
  • 举报
回复
置顶的那个说法早就过时了。
赵4老师 2014-04-22
  • 打赏
  • 举报
回复
引用 14 楼 gz_qmc 的回复:
话说有一天,x去打酱油 路过东莞的时候无意间进了一家黑店 被迫堕落于烟尘之中 于是半过多世纪 不是伺候嫖客+,就是伺候嫖客- 终于有一天,x死了 警方在检查其遗物的时候只是意外的发现了一本日记 第一页写到: x++ 第二页写到: ++x 第三页写到: ++x++ 如果你是探长,请问你知道x是怎么死的吗?
肯定是被#死的!
gz_qmc 2014-04-22
  • 打赏
  • 举报
回复
引用 17 楼 u014798162 的回复:
a++返回右值,右值不可赋值,这是最标准的解释
编译器说了算,写编译器的人就让右值可以赋值了,看你愿不愿自己抽嘴巴
ymy1248227142 2014-04-21
  • 打赏
  • 举报
回复
引用 6 楼 lpcads 的回复:
随便哪本书讲到template的时候都应该会提到吧。 假如有一个变量 class T a; 且定义了加法,那么 a++ 要做的 { T tmp(a) *this+=1; return tmp; } 而++a所做的 { *this+=1; return *this; } 这样解释,lz应该明白了吧。
多谢多谢
gz_qmc 2014-04-21
  • 打赏
  • 举报
回复
话说有一天,x去打酱油 路过东莞的时候无意间进了一家黑店 被迫堕落于烟尘之中 于是半过多世纪 不是伺候嫖客+,就是伺候嫖客- 终于有一天,x死了 警方在检查其遗物的时候只是意外的发现了一本日记 第一页写到: x++ 第二页写到: ++x 第三页写到: ++x++ 如果你是探长,请问你知道x是怎么死的吗?
mujiok2003 2014-04-21
  • 打赏
  • 举报
回复
引用
(++a) += a; //正确 (a++) += a;//错误 请问这个怎么避免
编译器不会让你通过编译的。 写简单的表达式,容易读,也容易写。
xiaohuh421 2014-04-21
  • 打赏
  • 举报
回复
请看这个板块的置顶帖啊.f C,C++表达式求值顺序 裘老的解释 叫版主把这个帖子标题修改成 ++i, i++这类字样的, 版主们总是不管. 我想, 大多数人根本不能理解" C,C++表达式求值顺序 " 就是说的" ++i, i++"这类的问题.
赵4老师 2014-04-21
  • 打赏
  • 举报
回复
这就是“快闪”啊!
TonyChopper9527 2014-04-21
  • 打赏
  • 举报
回复
引用 9 楼 zhao4zhong1 的回复:
[quote=引用 7 楼 xiaohuh421 的回复:] 请看这个板块的置顶帖啊.f C,C++表达式求值顺序 裘老的解释 叫版主把这个帖子标题修改成 ++i, i++这类字样的, 版主们总是不管. 我想, 大多数人根本不能理解" C,C++表达式求值顺序 " 就是说的" ++i, i++"这类的问题.
建议CSDN将凡是问题标题或问题内容中包含++,--的提问帖的一楼回帖内容自动填写为 C,C++表达式求值顺序 裘老的解释 http://bbs.csdn.net/topics/370153775[/quote] 哪里都能看到您的身影
PDD123 2014-04-21
  • 打赏
  • 举报
回复
在实际应用中,这样的句子就直接写成两句了。容易写也容易看
gz_qmc 2014-04-21
  • 打赏
  • 举报
回复
大姨妈又来了
赵4老师 2014-04-21
  • 打赏
  • 举报
回复
引用 7 楼 xiaohuh421 的回复:
请看这个板块的置顶帖啊.f C,C++表达式求值顺序 裘老的解释 叫版主把这个帖子标题修改成 ++i, i++这类字样的, 版主们总是不管. 我想, 大多数人根本不能理解" C,C++表达式求值顺序 " 就是说的" ++i, i++"这类的问题.
建议CSDN将凡是问题标题或问题内容中包含++,--的提问帖的一楼回帖内容自动填写为 C,C++表达式求值顺序 裘老的解释 http://bbs.csdn.net/topics/370153775
lpcads 2014-04-21
  • 打赏
  • 举报
回复
随便哪本书讲到template的时候都应该会提到吧。
假如有一个变量
class T a;
且定义了加法,那么

a++ 要做的
{
T tmp(a)
*this+=1;
return tmp;
}

而++a所做的
{
*this+=1;
return *this;
}

这样解释,lz应该明白了吧。
ymy1248227142 2014-04-20
  • 打赏
  • 举报
回复
引用 2 楼 baichi4141 的回复:
a++返回右值,右值不可赋值,这是最标准的解释
哦,那就是说++a是左值咯?
buyong 2014-04-20
  • 打赏
  • 举报
回复
可以简单理解为a++返回的是一个临时变量的地址,不能改变值。 ++a就是返回a这个变量的地址,只是地址对应变化后的值。
missheaven2011 2014-04-20
  • 打赏
  • 举报
回复
左值和右值的概念,LZ可以去网上查查
加载更多回复(2)

64,687

社区成员

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

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