C++学习笔记:为什么不要重载逻辑与和逻辑或&& || 操作符
2016-02-22 15:09
579 查看
理论知识:
1—&&和||是C++中非常特殊的操作符
2—&&和||内置实现了短路规则
3—操作符重载是靠函数重载来实现的
4—操作数作为函数参数传递
5—C++的函数参数都会被求值,无法实现短路规则
举例说明:
1—&&和||是C++中非常特殊的操作符
2—&&和||内置实现了短路规则
3—操作符重载是靠函数重载来实现的
4—操作数作为函数参数传递
5—C++的函数参数都会被求值,无法实现短路规则
举例说明:
// 逻辑与和逻辑或运算符重载说明.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include<iostream> using namespace std; //&&结合顺序是从左至右 class Test{ public: int i; Test(int i){ this->i = i; } Test operator+(const Test& obj){ Test ret(0); cout << "执行+号重载函数" << endl; ret.i = i + obj.i; return ret; } bool operator&&(const Test& obj){ cout << "执行&&重载函数" << endl; return i&&obj.i; } }; int _tmain(int argc, _TCHAR* argv[]) { int a1 = 0; int a2 = 1; cout << "注意,&&操作符的结合顺序是从左向右" << endl; if (a1 && (a1 + a2)){ cout << "有一个是假,则不再执行下一个表达式的计算" << endl; } Test t1 = 0; Test t2 = 1; if (t1 && (t1 + t2)){ //t1&&t1.operator+(t2) //t1.operator&&(t1.operator+(t2)) //虽然可以执行,但是破坏了 短路规则 cout << "两个函数都被执行了,而且是线执行了+" << endl; } return 0; }
相关文章推荐
- 发布 Victor 串口控件 1.5.0.5 for C++ Builder 10 (CX) / XE8 / XE7 / XE6
- C++学习笔记:重载 函数调用符()
- MPEG-7描述子(3)——颜色布局描述子CLD
- C++中类型的转换
- C++中的变量初始化
- C++ 函数传参
- C++运算符重载和模板
- 算法训练 连续正整数的和
- C++编程教程_箭头(->)运算符的重载
- C++多态性
- 论C和C++中main函数的重要性
- C++学习笔记:数组的操作符重载(包括[]和=运算符)
- 【C++11新特性】 Lambda表达式
- 关于squirrel语言与C++的自动绑定问题(1)
- 【转】C/C++ struct/class/union内存对齐
- [C/C++标准库]_[0基础]_[优先队列priority_queue的使用]
- OpenJudge百炼习题解答(C++)--题4110:圣诞老人的礼物-Santa Clau’s Gifts
- 浅谈C++中内存分配、函数调用和返回值问题
- 浅谈C语言学习方法
- C++虚函数 undefined reference to ***