C++ "短路求值"策略
2017-09-24 23:15
148 查看
什么是短路求值
逻辑与和逻辑或操作符总是先计算其左操作数,然后再计算其右操作数。只有在仅靠左操作数的值无法确定该逻辑表达式的结果时,才会求解其右操作数。我们常常称这种求值策略为”短路求值(short-circuit evaluation)“为什么要短路求值
1、提高程序的运行效率:能够通过左操作数就确定逻辑表达式的结果不计算右操作数降低了程序计算量,提高程序效率;2、防止出现难以预料的后果;
3、代码的逻辑更为紧密。
例子
#include <iostream> #include <string> using namespace std; int main() { string str(""); if(!str.empty() && 'c'==str[0]) { //写法1 cout << str << endl; } if( 'c'==str[0] && !str.empty()) { //写法2 cout << str << endl; } return 0; }因为str字符串为空,所以str.empty()为true,!str.empty()则为false,所以写法1的右操作数‘c’==str[0]就不会执行;而写法2最先执行的就是‘c’==str[0],而str[0]是我们没有分配的一段内存空间,对它进行读写都是不合法的,将会产生的结果也是难以预料的。
相关文章推荐
- C/C++面试之算法系列--从"反转32 位数"算法题分析面试策略
- "&&"和"||",短路求值
- c++中短路求值的妙用
- C++短路求值
- C/C++为什么要短路求值?
- C++ 短路求值特性的利用
- c/c++ 宏中"#"和"##"的用法
- 数据挖掘-基于机器学习的SNS隐私策略推荐向导分类器的C++及WEKA实现与评估
- C++编译过程中"没有找到MFC80UD.DLL,因此这个程序未能启动.重新安装应用程序可能会修复此问题"? 的彻底解决
- 增加 addDataScheme("file") 才能收到SD卡插拔事件的原因分析 -- 浅析android事件过滤策略
- 设计模式C++实现(2)——策略模式
- 关于C/C++ 表达式求值顺序
- configure: error: C++ preprocessor "/lib/cpp" fails sanity check
- 表达式求值 C++版
- C++设计模式:策略模式
- C++抽象编程——递归策略——前言
- C/C++语言中的表达式求值
- c++实验3—多分数段函数求值
- Why? 在C++中调用被C编译后的函数,要在声明的前面加extern "C"
- C++程序 编译报错"C2143" "C4430" "C2238" 问题