c++表达式求值顺序
来源:互联网 发布:访客网络还是 编辑:程序博客网 时间:2024/04/30 18:55
今天写了一个搜索函数,碰到了一个有关表达式求值顺序的bug,看下面两段代码,这是为一个向量写的一个搜索函数,输入一个值,然后返回这个值在向量中的秩Rank,如果该值在向量中存在多个,返回最大的,找不到返回-1
template<typename T>Rank yVector<T>::find(const T &e) const{ Rank cmp = _size - 1; while ((e != _elem[cmp]) && (cmp--)); return cmp;}
template<typename T>Rank yVector<T>::find(const T &e) const{ Rank cmp = _size - 1; while ((cmp--) && (e != _elem[cmp])); return cmp;}
上面的两段代码中第一段能够实现相应功能,第二段有点问题,问题在于当输入的值位于向量的末端时,它就找不到了。原因跟c++表达式求值顺序有关,在c++中,逻辑与&&运算符规定先求左侧运算符的值,只有当左侧运算符的值为真时才求右侧运算符的值。 由于这条规则,在执行while ((cmp--) && (e != _elem[cmp]));
这一句时,会先计算cmp–,然后,使得cmp的值在刚开始就减一,导致右侧的_elem[cmp]跳过向量中最后一个值。
阅读全文
0 0
- c语言表达式求值顺序
- C,C++表达式求值顺序
- C,C++表达式求值顺序
- C,C++表达式求值顺序
- C,C++表达式求值顺序
- C,C++表达式求值顺序
- C,C++表达式求值顺序
- C语言表达式求值顺序
- C,C++表达式求值顺序
- C,C++表达式求值顺序
- C,C++表达式求值顺序
- C/C++表达式求值顺序
- C,C++表达式求值顺序
- C/C++表达式求值顺序
- C,C++表达式求值顺序
- 关于C/C++ 表达式求值顺序
- 关于C/C++ 表达式求值顺序
- 关于C/C++ 表达式求值顺序 未定义
- js-div的修改优化思路对比
- python初学_1
- WebService
- Linux 配置服务和自启动
- iOS屏幕旋转原理详解
- c++表达式求值顺序
- 简单的服务器 实现引用css、js和a链接可以跳转
- vue常见问题收藏
- BZOJ 1003 物流运输
- Hadoop简介
- StringUtils中 isNotEmpty 和isNotBlank的区别
- iOS 判断纯数字
- 1298: 分数化小数
- Java中函数式编程的谓词函数(Predicates)