社区
C++ 语言
帖子详情
教你分析 a+++++b 問題
oosky2004
2005-10-19 07:51:32
式子:a+++++b
根據編譯器的貪婪法應該為:
a ++ ++ + 等價于:
((a++)++)+b
但是這個式子是不正確的,因爲a++的結果不能作左值。
所以正確的分析為:
a ++ + ++ 等價于:
(a++)+(++b)
參考《c陷阱與缺陷》
...全文
587
24
打赏
收藏
教你分析 a+++++b 問題
式子:a+++++b 根據編譯器的貪婪法應該為: a ++ ++ + 等價于: ((a++)++)+b 但是這個式子是不正確的,因爲a++的結果不能作左值。 所以正確的分析為: a ++ + ++ 等價于: (a++)+(++b) 參考《c陷阱與缺陷》
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
你必须知道的495个C语言问题(PDF)
3.4 这是个巧妙的表达式: a ˆ= b ˆ= a ˆ= b 它不需要临时变量就可 以交换a 和b 的值。. . . . . . . . . . . . . . . . . . . . . . . . . 14 3.5 我可否用括号来强制执行我所需要的计算顺序? . . . . . . . . ....
你必须知道的495个C语言问题
*3.4 有这样一个巧妙的表达式:a^=b^=a^=b;它不需要临时变量就可以交换a和b的值。 3.5 可否用显式括号来强制执行我所需要的计算顺序并控制相关的副作用?就算括号不行,操作符优先级是否能够控制计算顺序呢? ...
《你必须知道的495个C语言问题》
《你必须知道的495个C语言问题》以问答的形式组织内容,讨论了学习或使用C语言的过程中经常遇到的一些问题。书中列出了C用户经常问的400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预...
C语言FAQ 常见问题列表
o 4.4 这是个巧妙的表达式: a ^= b ^= a ^= b 它不需要临时变量就可以交换 a 和 b 的值。 o 4.5 我可否用括号来强制执行我所需要的计算顺序? o 4.6 可是 && 和 || 运算符呢?我看到过类似 while((c = getchar())...
C++ 语言
64,642
社区成员
250,580
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章