C++ 改善程序的具体做法 学习笔记
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
1、尽量用const enum inline替换#define
因为#define是做预处理操作编译器从未看见该常量编译器刚开始编译它就被预处理器移走了而#define的本质就是做替换它可能从来未进入记号表
解决方法是用常量替换宏
语言常量会被编译器看到会进入记号表内
#define不注重域的范围而const可以#define不能定义类常量也不能提供封装性比如private等
用#define定义“函数”问题会非常大
int a = 5, b = 0;
#define CALL_WITH_MAX(a, b) f((a) > (b) ? (a) : (b))
如果调用CALL_WITH_MAX(++a, b); //a会累计加两次(++a) > (b) ? (++a) : (b);
因为++a > b所以使用++a的值三目运算符
如果调用CALL_WITH_MAX(++a, b + 10);就会累计加一次因为a < b了所以取值b之加了一次
在迭代器中若迭代器不做值修改那么可以用const_iterator以此提高性能
例如
const std::vector<int>::iterator iter = vec.begin();//iter的作用类似于T* const
*iter = 10;//正确
++iter;//错误
std::vector<int>::const_iterator citer = vec.begin();//iter的作用类似于const T*
*citer = 10;//错误
++citer;//正确
const加在返回值身上
const Rational operator* (const Rational& lhs, const Rational& rhs);
如果不加那么我可以写成Rational a, b, c;
(a * b) = c;//而a*b返回的是一个右值