条款2(Clause 2)
:Prefer consts, enums, inlines to #defines
1使用const替换#define
比如:将下面的替换
#define ASPECT_R 1.00
为
const double AspectR=1.00;
原因:可能记号名称ASPECT_R未进入记号表内,当你运用这个常量的时候,显示的报错信息里面可能不会提到ASPECT_R,只提到了1.00,所以找不到错误在哪里。而使用const就不会出现这种情况。
两种特殊情况
1,定义常量指针(constant pointer)
写两次const
const char* const name="Yap Miracle";
//下面这样更好
const std::string name("Yap Miracle");
2,class专用常量不用宏定义来实现函数
别用这种函数
#define CALL_WITH_MAX(a, b) F((a) > (b) ? (a): (b))
使用
template
inline void callWithMax(const T& a,const T& b)
{
f(a > b ? a : b);
//f为简单比较函数
}
这种写法有很多好处,它遵守作用域和访问规则。
最后请记住
【Effective c++条款2(尽量以const,enum,inline替换#define)】1、对于单纯常量,最好以const对象替换#define。
2、对于形似函数的宏,最好改用inline替换#define。
3、#include和#ifdef,#ifndef仍然是必需品。
推荐阅读
- ECE/CS 472/572 C++求解
- Rust|Windows 安装Rust
- leetcode刷题打卡|1829. 每个查询的最大异或值
- 如何使用贝塞尔曲线和QPainter在C++中获取圆角形状
- 如何学习C和C++语言(终极清单)
- 对于单例模式双重检查的一些理解
- 数据结构|数组模拟队列
- 赠人玫瑰手留余香|C语言单目操作符++、- -的讲解
- C语言与C++编程|马斯克(我是 Rust 粉丝,但为了性能会选择 C语言)