1 “短路求值”逻辑与、逻辑或操作符在使用时,总是先计算它的左操作数,然后再计算右操作数 。只有在靠左操作数的值无法确定该逻辑表达式的结果时,才会去求解右操作数 。这种求值方式也被称为“短路求值(short-circuit evaluation)”,&&和||的短路操作虽然会简化计算过程,但也会带来副作用:
【C++“短路求值”与“贪心法则”】int i=6;int j=1;if(i>0 || (j++)>0)cout<<++j; //输出1j++的计算会被忽略,对于||,如果一个为真,其他不需要考虑了,整个表达式是真,也就是C++编译器应用了“短路求值”的原则,如果后面的值不影响整个表达式的值,后面没必要再计算了 。
当表达式中有||时,为避免编译器略掉后面的计算,适合将可能性小的表达式放在左边先计算,当然,最好的办法是在||的右边最好是不需要计算的表达式,以避免出错 。
再来看&&运算符:
if(i<0 && (j++)>0)cout<<++j; //输出1j++的计算会被忽略,对于&&,如果一个为假,其他不需要考虑了,整个表达式是假,也就是C++编译器应用了“短路求值”的原则,如果后面的值不影响整个表达式的值,后面没必要再计算了 。
当表达式中有&&时,为避免编译器略掉后面的计算,适合将可能性大的表达式放在左边先计算,当然,最好的办法是在&&的右边最好是不需要计算的表达式,以避免出错 。
2 “贪心法则”C语言有一个简单的“贪心法则”:每一个符号应该包含尽可能多的字符 。
也就是说,编译器将源代码,从左到右,一个字符一个字符地读入,如果加入下一个字符依旧可以构成一个合法符号,则包含该字符,直到不可以为止 。
如- 和 -- 都是合法运算符,但 --- 不是 。
int a=8;int b=3; cout<<a---b ;//输出5cout<<a; //输出7分析:
首先,a是一个合法符号,a-不是,所以第1个符号是a;其次,-是一个合法符号,--也是一个合法符号,但---不是,所以第2个符号是--;然后,-是一个合法符号,-b不是一个合法符号,所以第2个符号是-;最后,只剩下一个字符b,它是一个合法的符号;所以,a---b,依据贪心法则,得出的结果是:a -- - b ,也就是 (a--) - b;(备注:合法的符号,如变量名,只能有大小写字母、数字和_下划线组成,并且不能是数字开头这里的a和b都是变量名 。)
-End-
推荐阅读
- 秘书|女子应聘秘书,要求要有“成人经历”:月薪15000做老板私人秘书
- 减肥得靠“饿”?不,你需要这种低卡食物
- 除了运动和节食,这4个方法也能帮你“刮油”
- 跑步跑出“肌肉腿”?错,小腿粗只有2个原因
- 脱脂牛奶,竟然是曾经的猪饲料!
- 一种食物低卡又好吃,是健身“最佳伴侣”
- 护肝的“快乐茶餐单”
- 紫薯|提醒想要减肥的人:刮油“猛”的5种食物,建议减肥期间换着吃
- 米饭|添可秀万2.0美发梳,戴森“模仿秀”何时休?
- 英德红茶要洗吗