首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

短路求值问题

在昨天的文章中,我们已经提到了优先级与求值顺序无关(C语言运算符优先级),涉及到的还有短路求值(short-circuit evaluation)问题,接下来具体讲一下。...在逻辑表达式的求值过程中,按其操作数从左至右的计算顺序,当某个操作数的值可以确定整个逻辑表达式的值时,其余的操作数不再计算。 逻辑运算符“&&”和“||”都具有短路特性。...逻辑与的短路特性 a&&b 只有a为真时,才需要判断b的值,如果a为假时,就不必判断b的值,表达式的结果始终为假,则b被短路。 逻辑或的短路特性 a||b 只有a为假,才需要判断b的值。...正常计算结果是没有影响的,但涉及到自增自减、赋值运算的时候,有没有被短路就有区别了。...如下图,按照优先级顺序,自增自减运算优先级高,数值应该发生变化,但涉及到短路求值问题,被短路的部分并没有执行,数值也就没有变化。 ?

1K30

条件表达式的短路求值与函数的延迟求值

延迟求值是 .NET的一个很重要的特性,在LISP语言,这个特性是依靠宏来完成的,在C,C++,可以通过函数指针来完成,而在.NET,它是靠委托来完成的。...,取决于第一个参数  flag,如果它的值为false,那么函数 fun 是永远都不会被求值的,所以,这里函数 fun的求值被推迟到了方法TestDelayFunton1 的内部,而不是在参数计算的时候...延迟求值很有用,它可以避免我们无谓的计算,比如上面的例子,这样可以节省计算成本,假如 fun的求值很耗时的话。...flag,这个功能叫做“短路”判断,“条件短路”功能正好实现了我们的“延迟求值”的功能,因此,我们可以得到如下推论: 任何时候一个函数fun如果需要延迟求值,那么都可以表示成 一个条件表达式: (Test...} Console.WriteLine(); if (trueFun1() || falseFun2() || trueFun3()) { } 假如你非常理解C#的“条件短路

92160
您找到你想要的搜索结果了吗?
是的
没有找到

eager evaluation (及早求值) & lazy evaluation (惰性求值)

eager evaluation (及早求值) 及早求值,也被称为贪婪求值(greedy evaluation)或严格求值,是多数传统编程语言的求值策略。...在热情求值中,表达式在它被约束到变量的时候就立即求值。这在简单编程语言中作为低层策略是更有效率的,因为不需要建造和管理表示未求值的表达式的中介数据结构。...热情求值的优点在于节省内存和提高执行速度,比如下面的 Basic 代码: x = 5 + 3 * (1 + 5 ^ 2) print x print x + 2 因为第一行代码 x = 5 + 3 *...lazy evaluation (惰性求值) 对于惰性求值的编程语言,由于记忆化(memoization)特性,求值过程与之不同。 ---- [1] 及早求值 [2] 惰性求值

1.7K30

C++求值顺序

因为虽然<<是左结合,但是对于那些没有明确规定运算对象的求值顺序的运算符而言,求值顺序就和优先级,以及结合律无关。...3.C++手册 几乎所有 C++ 运算符的求值顺序(包括函数调用表达式中的函数参数求值顺序和任何表达式中子表达式的求值顺序)都是未指定的。...编译器能以任何顺序求值,并可以在再次求值相同表达式时选择另一顺序。...序列点( sequence point )是执行序列中的点,在该点所有来自序列中先前求值的副效应均已完成,而后继求值的副效应都未开始。...4) 一旦函数执行开始,则在被调用函数完成前,不求值来自调用方函数的表达式(函数不能交错)。 5) 每个使用内建(非重载)运算符的下列四种表达式的求值中,表达式 a 的求值后有一个序列点。

1.3K20

学习JavaScript:逻辑与、或、非运算

false // 真true ---- 短路求值 关于JavaScript逻辑运算符有两点很重要。一是运算时求值顺序从左到右,二是运算时会短路。...从左到右依次求值,第一个值为假,所以这次的式子不会短路。相反,JavaScript会继续求第二个数据的值。第二个值为真,所以最后结果也是真。 那么为什么说理解短路求值很重要呢?...**job: 'teacher'** } console.log(person.job || 'unemployed'); // 打印出teacher 这次, 人.工作属性存在,所以和之前不同,式子会短路求值...或运算看到假就继续求值。到变量b这一处时得到了 4这个值,整个运算式短路,所以 4这个值赋给了变量 f。...---- 往期精选文章 使用虚拟dom和JavaScript构建完全响应式的UI框架 扩展 Vue 组件 使用Three.js制作酷炫无比的无穷隧道特效 一个治愈JavaScript疲劳的学习计划 全栈工程师技能大全

5.9K20
领券