括号运算符不决定运算符优先级,也不决定表达式求值顺序
Tofloor
poster avatar
xliang9550
deepin
2015-11-10 22:49
Author
各位C/C++初学者务必注意,不要被《C程序设计》一书所误导。
顺带做个宣传,2015年度IOCCC获奖作品名单已经公布,过些时候就能公布获奖作品的源代码。有兴趣的可以挑战一下,尝试用“正常的”C语言对其进行重构。
Reply Favorite View the author
All Replies
ArthurDeepin
deepin
2015-11-10 23:11
#1
求详叙~
Reply View the author
xliang9550
deepin
2015-11-10 23:29
#2
固有的运算符优先级(包括括号运算符)起到的作用只是操作数的归属。
尽管大多数情况下,对整个复杂表达式求值必须先从最内层括号开始(因为内层括号中的子表达式的值要作为外层运算符的操作数),但有例外。
int a=0, b=0, c=0;
int x=a++ && (b++ || c++);
printf("%d %d %d %d\n", a, b, c, x);
由于&&运算符是序点(在此之前的表达式求值和副作用必须完成结算),所以必须先对a++求值,然后&&右侧的子表达式(b++ || c++)被短路。
输出结果是1 0 0 0。
Reply View the author
ArthurDeepin
deepin
2015-11-10 23:35
#3
xliang9550 发表于 2015-11-10 15:29
固有的运算符优先级(包括括号运算符)起到的作用只是操作数的归属。
尽管大多数情况下,对整个复杂表达式 ...

懂了~get~
Reply View the author
kingskill
deepin
2015-11-10 23:45
#4
https://bbs.deepin.org/post/33128
固有的运算符优先级(包括括号运算符)起到的作用只是操作数的归属。
尽管大多数情况下,对整个复杂表达式 ...

c++里也是继承了&&特性的么?
Reply View the author
xliang9550
deepin
2015-11-11 01:01
#5
C++新增的特性是:重载的运算符视同函数调用。其他方面与C差别不大。
参见wikipedia词条Sequence Point

老谭的书纯属以其昏昏使人昭昭。
Reply View the author
shdyeu
deepin
2015-11-11 02:14
#6
文明交流,礼貌探讨
Reply View the author
New Thread

Popular Events

More
国际排名
WHLUG