美文网首页
编译器对判断语句的优化

编译器对判断语句的优化

作者: SilentDawn | 来源:发表于2018-04-30 16:32 被阅读0次

简介

近期在研究组的项目中,继续开发师兄写的SDK时发现一个小trick,即在判断语句中利用编译器自身对判断语句的优化,使用前面条件的结果规避了后面条件的执行错误,详情描述如下。

trick的发现

以下为师兄所写源码的伪代码(基于C#)

if(foo(ref a) && a.get())  // ref在C#表示传引用值(函数传参可分为传值和传引用,具体请自行搜索)
        return false;
else
        return true;

由于我在调试时想查看foo(ref a)执行后a对象中的值,因此将以上代码临时修改成如下格式

bool res1 = foo(ref a);
bool res2 = a.get();
if(a && b)
        return false;
else
        return true;

但执行后a.get()语句报空指针错误。
逻辑相同的代码,在从if中将两个语句提出来后就报错了,郁闷。
忽然想起来之前看过的一篇文章讲过编译器的优化:在判断语句已经能够根据前面的结果做出最终决定时,将不再对后续条件进行判断,以减少资源的占用和加快程序的运行速度。
因此,原版的代码中由于foo函数返回值为false(此时a也为null),所以a.get()语句并未执行,也就不会产生空指针的错误。

补充

  • 如果希望判断语句中的所有语句都得到执行,可以不使用逻辑运算符&&||,而是使用&|这两个算数运算符。由于判断语句需要对&|的最终计算结果进行判断,因此不会提前终止括号内的语句执行。
  • 个人认为虽然trick优秀,但考虑到代码的可读性和健壮性,还是应该对语句可能存在的错误进行检查(仁者见仁智者见智)

相关文章

  • 编译器对判断语句的优化

    简介 近期在研究组的项目中,继续开发师兄写的SDK时发现一个小trick,即在判断语句中利用编译器自身对判断语句的...

  • vue css绑定和定时器includes优化

    基础知识 定时器小优化 判断语句优化

  • 高性能MYSQL(四)

    可以通过explain 语句来对查询进行查看.对可优化的地方做出改进 前言 优化的主要组成部分: 查询语句的优化...

  • C primer Plus study note chapter

    循环语句: while( expression ) 循环语句根据语句中的判断条件对判断条件进行判断,如果表达式ex...

  • LLVM

    一、编译器 性能优化:启动优化、界面优化、架构优化 编译型语言:OC(编译器是clang)、C(编译器可以直接执行...

  • JS逻辑

    条件判断语句 语法1:if(条件判断语句){语句} if语句在执行时,会先对条件表达式进行求值判断,如果条件表达式...

  • 2020-07-10数据分析基础班5

    05 条件控制语句 1. 条件判断语句(if语句) 执行的流程: if语句在执行时,会先对条件表达式进行求值判断,...

  • 数据库优化

    一.sql语句优化 1.应尽量避免在 where 子句中对字段进行 null 值判断,创建表时NULL是默认值,但...

  • 05 条件控制语句

    05 条件控制语句 1. 条件判断语句(if语句) 执⾏的流程:if语句在执⾏时,会先对条件表达式进⾏求值判断,如...

  • C语言关键字volatile

    作用防止编译器对可能以编译器无法确定的方式更改的对象应用任何优化volatile int *p = /* ... ...

网友评论

      本文标题:编译器对判断语句的优化

      本文链接:https://www.haomeiwen.com/subject/ipazlftx.html