教你分析 a+++++b 問題

oosky2004 2005-10-19 07:51:32
式子:a+++++b
根據編譯器的貪婪法應該為:
a ++ ++ + 等價于:
((a++)++)+b
但是這個式子是不正確的,因爲a++的結果不能作左值。
所以正確的分析為:
a ++ + ++ 等價于:
(a++)+(++b)

參考《c陷阱與缺陷》
...全文
587 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
purcjame 2005-11-03
  • 打赏
  • 举报
回复
我觉得 讨论这个问题浪费 我感觉 a++ 和 ++a 真实应用没什么特别 我也知道他们的区别 但一般人的应用都是a++; ++a载运算递增 觉得多次一举
sailor_Song 2005-10-20
  • 打赏
  • 举报
回复
写出这种代码,没有一个公司会要的,呵呵,闲着无聊可以写一写,
HebeStar 2005-10-20
  • 打赏
  • 举报
回复
分析编译可以 实际应用写这种代码的拖出去弹jj
索思索想 2005-10-20
  • 打赏
  • 举报
回复
Andrew Koenig的确在 C Traps and Pitfalls 里拿这个做例子,不过我认为Andy并没有推荐大家使用这种写法的意思。似乎Koenig也说明了,对于容易引起歧义的句子最好加上括号。
oosky2004 2005-10-20
  • 打赏
  • 举报
回复
上面的說的不清楚,這個不能正確編譯的。
這個説明分析編譯器的編譯法則:


megaboy 2005-10-20
  • 打赏
  • 举报
回复
对于a+++++b来说,并不是编译器相关的,而是肯定是非法的,C标准甚至以其为例子来说明它的非法性。如果有哪个编译器允许这个表达式,是不符合标准的。
fengfeibaiffb 2005-10-20
  • 打赏
  • 举报
回复
晕掉了,实际中没有程序员会这么写的,看不出这和语言的本质有什么关系
oosky2004 2005-10-20
  • 打赏
  • 举报
回复
以前我也覺得寫這樣的代碼沒有什麽用,覺得很無聊。
現在知道怎麽分析這種BT的代碼后,反倒不再害怕這樣的式子了。

怎麽說呢,以前覺得這樣的代碼很無聊,是因爲不會去分析這樣,不理解這語言的本質。
oosky2004 2005-10-20
  • 打赏
  • 举报
回复
人品問題!
wangjing1228 2005-10-20
  • 打赏
  • 举报
回复
是在分析问题又不是推荐这种写法;
鄙视楼上鄙视别人的人;
wangjing1228 2005-10-20
  • 打赏
  • 举报
回复
main()
{
int a=1,b=2;
cout<<a+++++b<<endl;

}
编译错误:
1.cpp: In function `int main()':
1.cpp:6: error: non-lvalue in increment
为什么?

===========================

non-lvalue指运算符没有左值
yjy1001 2005-10-20
  • 打赏
  • 举报
回复
编译不过的
老河流水人家 2005-10-20
  • 打赏
  • 举报
回复
支持楼主。
做编译的非常需要这样的东西,本来各个东西都要测试过,象这种情况就是要让编译器能识别出
(a++)+(++b)这样就是个正确的c语法
而((a++)++)+b是个错误的编译方式。

米克贝瑞 2005-10-20
  • 打赏
  • 举报
回复
垃圾。强烈鄙视
y0z0 2005-10-20
  • 打赏
  • 举报
回复
哇哈哈哈,楼主真幽默
snake1234 2005-10-20
  • 打赏
  • 举报
回复
main()
{
int a=1,b=2;
cout<<a+++++b<<endl;

}
编译错误:
1.cpp: In function `int main()':
1.cpp:6: error: non-lvalue in increment
为什么?

===========================

1,函数没有返回值,就的在前面加上void
2,编译器的问题。
snake1234 2005-10-20
  • 打赏
  • 举报
回复
这个还需要根据不同编译器来判断,贪婪法是正确的,但是有些编译器上从左往右开始编译,有些则是从右往左开始编译。那么肯定结果不一样
oosky2004 2005-10-20
  • 打赏
  • 举报
回复
這個不是叫你寫這樣的代碼,而是叫你怎麽分析編譯器分析代碼。
pantherscut 2005-10-19
  • 打赏
  • 举报
回复
这种是垃圾代码
gamelearner 2005-10-19
  • 打赏
  • 举报
回复
写出这种代码,你也可以卷铺盖走人了!
加载更多回复(4)

64,642

社区成员

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

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