1. i++和++i和区别
i++; // i 的值作为返回值, i 自增 1;
++i; // i 自增1, i 的值作为返回值
- 在工程中,独立的
i++;
和++i;
是没有区别的,因为在没有返回值的情况下,编译器会对它们做优化处理,使得这两条语句完全一样。
2. 意想不到的事实
- 现代编译器产品会对代码进行优化
- 优化使得最终的二进制程序更加高效*
- 优化后的二进制程序丢失了C/C++的原生语义
-
不可能从编译后的二进制程序还原C/C++程序——因编译器对代码进行优化后,其优化后的二进制程序丢失了C/C++的原生语义。
C/C++开发的软件无法完全反编译!!!
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 t0(0);
cout << "t0.value() = " << t0.value() << endl;
Test t1 = ++t0;
cout << "t1.value() = "<< t1.value() << endl;
Test t2 = t0++;
cout << "t2.value() = " << t2.value() << endl;
return 0;
}
输出结果
t0.value() = 0
t1.value() = 1
t2.value() = 1
4. 真正的区别—— ++i和i++的区别
- 对于基本类型的变量:前置++的效率与后置++的效率基本相同,可以根据项目组编码规范进行选择
- 对于类类型的对象:前置++的效率高于后置++,因此尽量使用前置++操作符提高程序效率
5. 小结
- 编译优化使得最终的可执行程序更加高效
- 前置++操作符和后置++操作符都可以被重载
- ++操作符的重载必须符合其原生语义
- 对于基础类型,前置++与后置++的效率几乎相同
- 对于类类型,前置++的效率高于后置++