C语言中的惰性运算 在使用指针进行访问时往往我们比较担心空指针访问崩溃。这时候我们可以通过逻辑与来直接短路这种异常情况。这是实际是用的是惰性运算那什么是惰性运算我们用怎么运用呢各个语言间惰性运算又有什么区别呢一、C语言的惰性运算的定义C语言的惰性运算短路求值仅针对逻辑、逻辑或||两个运算符1、逻辑与AB的惰性规则如果A表达式的结果为假0整个表达式必然为假不会执行、计算右边的B直接短路。2、逻辑与A||B的惰性规则如果A表达式的结果为真非0整个表达式必然为真不会执行、计算右边的B直接短路。说明、-、、/、、、等运算符没有惰性运算两侧一定会完整求值。*二、C语言的惰性运算的示例1、逻辑与短路的惰性#includestdio.h#includewindows.h#includemath.hintfunc(){printf(func()被执行了\n);return1;}intmain(intargc,charconst*argv[]){/* code */SetConsoleOutputCP(65001);SetConsoleCP(65001);inta0;if(afunc()){printf(进入到if分支\n);}printf(程序结束\n);return0;}运行结果a0时afunc():左侧为假右侧的func()不执行当a1时func()会被执行2、逻辑或短路当a1时不需要计算func直接运行当a0时执行func的判断注意短路导致自增等运算失效在实际编码时是需要注意的。三、类C语法语言惰性运算的区别共同点都对逻辑与、||逻辑或做短路惰性规则和C一致ABA假则B不执行A||B:A真则B不执行不同点语言与C不同的地方备注C新增重载运算符如果重载operator与或operator或短路特性会消失两侧一定全求值java多出非短路版本与、或是完整求值无论左边真假左右都算JavaScript短路逻辑和C一致但是返回值规则不同 空值合并也支持短路惰性c没有这个运算符JS会直接返回原始表达式的值常用来做默认值Go严格布尔类型只能放布尔表达式C可以放任意数字、指针当真假