执行 C++ 代码 cout<<(5||2); 后将输出 1 。( )
别急着算5加2,这道题考的是C++逻辑运算符的短路求值规则:遇到||(或运算),只要左边是‘真’,右边根本不用看,直接输出1。
很多学生会把5||2当成数学加法,算出7,或者误以为逻辑值输出是0。其实cout输出bool时,true就是1,false就是0。命题人故意把5和2都写成非零数,就是想看你懂不懂‘左真右跳过’——左边5非零即真,右边2直接忽略,所以结果是1。
在C++里,逻辑运算符||(或)和&&(与)有个很实用的特性叫“短路求值”(short-circuit evaluation)。规则很简单:
为什么会有这个机制?因为很多时候右边是个函数调用、数组下标或者复杂表达式,如果左边已经决定了结果,省掉右边既高效又安全(避免不必要的副作用)。
这道题只给了一行代码:cout<<(5||2); 看起来平平无奇,但命题人盯的就是两个点: 1. 类型转换:C++把非零整数当作“真”,0当作“假”。5和2都是非零,所以它们分别代表true和true。 2. 短路行为:既然左边已经是true,||运算符根本不会去计算右边的2,直接返回true。 很多刚入门的同学会下意识想“5加2等于7”,或者担心“逻辑值输出是0”,这都是被表面数字迷惑了。命题人把两个非零数放在一起,就是想看你有没有真正理解短路规则,而不是死记“||就是或”。