一. 前置操作符与后置操作符
Q: 下面的代码有没有区别? 为什么?
代码的实现
- #include <iostream>
- #include <string>
- using namespace std;
- int main()
- {
- int i = 0;
- i++;
- ++i;
- return 0;
- }
意想不到的事实
1. 现代编译器都会对代码进行优化
2. 优化使得最终的二进制程序更加高效
3. 优化后的二进制程序丢失了 C/C++ 的原生语义
4. 不可能从编译后的二进制程序还原 C/C++ 程序
Q:++ 操作符可以重载吗? 如何区分前置 ++ 和后置 ++?
++ 操作符可以被重载
1. 全局函数何成员函数均可进行重载
2. 重载前置 ++ 操作符不需要额外的参数
3. 重载后置 ++ 操作符需要一个 int 类型的占位参数
代码示例
- #include <iostream>
- #include <string>
- using namespace std;
- class Test
- {
- int mValue;
- public:
- Test(int i)
- {
- mValue = i;
- }
- int value()
- {
- return mValue;
- }
- Test& operator ++ ()// 前置操作符
- {
- ++mValue;
- return *this;
- }
- Test operator ++ (int)// 后置操作符
- {
- Test ret(mValue);// 当前对象的值保存在一个对象中
- mValue++;
- return ret;
- }
- };
- int main()
- {
- Test t(0);
- cout<<t.value()<<endl;
- ++t;
- cout<<t.value()<<endl;
- return 0;
- }
前置操作符与后置操作符运行结果如图所示
由此次的代码示例可以看出前置操作符与后置操作符是存在区别的
1. 对于基础类型来说 -- 前置 ++ 的效率与后置 ++ 的效率基本相同, 根据项目组编码规范进行旋转
2. 对于类类型的对象 -- 前置 ++ 的效率高于后置 ++, 主要原因是前置操作符没有调用构造函数, 所以在使用时尽量使用前置 ++ 来提高程序效率
来源: http://www.bubuko.com/infodetail-3110496.html