02. Prefer consts, enums, and inlines to #defines
宏定义
#define ASPECT_RATIO 1.653
ASPECT在编译之前已被预编译就行替换,不会进入符号表(symbol table),
如出现1.653导致的编译错误,不方便调试追踪。
可以使用
const double AspectRatio = 1.653
AspectRatio会进入符号表。
类中宏定义
class GamePlayer
{...
private:#define NUM_TURNS 5int scores[NUM_TURNS];
};
可以将其定义为static const(const static一样)类型,
class GamePlayer
{...
private:static const int NUM_TURNS = 5; // static const类型的数据成员中只有static const int成员能够进行类内初始化int scores[NUM_TURNS];
};
也可以使用enum hack,
class GamePlayer
{...
private:enum { NumTurns = 5 };int scores[NumTurns];...
};
宏定义函数
#define CALL_WITH_MAX(a, b) f((a) > (b) ? (a) : (b))
int a = 5, b = 0;
CALL_WITH_MAX(++a, b); // a被累加二次
CALL_WITH_MAX(++a, b+10); // a被累加一次
即使在每个参数都加上小括号,任然会出现边际效用。
调用f之前,a的递增次数取决于"它被拿来和谁比较"!
替代方法:
template<typename T>
inline void CallWithMax(const T&a , const T& b)
{f(a > b ? a : b);
}
结论:
使用const是、enums和inlines可以降低对预处理(特别是#define)的需求,但仍有使用它的需求: 包含头文件之#include、条件编译#ifdef/#ifndef。
请记住:
- 对于单纯常量,最好以const对象或enums替换#defines。
- 对于形似函数的宏,最好以inline函数替换#defines。
02. Prefer consts, enums, and inlines to #defines相关推荐
- Item 02: Prefer consts, enums, and inlines to #defines
Item 02: Prefer consts, enums, and inlines to #defines 尽量以 const,enum,inline 替换 #define 假如有这样的语句: #d ...
- Effective C++记录(2):Prefer consts, enums, and inlines to #defines
尽量用const, enum, inline 替换 #define 原因如下: 降低对预处理器的需求(#define). 弘定义对代码理解上存在巨大的开销(例如:带参弘定义,可能造成使用上的误解,以及 ...
- Effective C++读书笔记 摘自 pandawuwyj的专栏
Effective C++读书笔记(0) Start 声明式(Declaration):告诉编译器某个东西的名称和类型,但略去细节. std::size_t numDigits(i ...
- Effective C++ 改善55个方法
美·Scott Meyers 候捷 电子工业 2011 刚才看到个会议时间有点晚,3.25论文都提交了 谷歌去广告的插件, 最后投了这个会议,刚刚好正合适.我说金钱与时间 ACCUSTOMING YO ...
- Effective C++读书摘要--Accustoming Youself to C++
<Item 1>View C++ as a federation of languages. 1.把C++看成4种子语言组成,即C.Object-Oriented C++.Template ...
- 【Cpp】《Effective C++》第一章-让自己习惯C++
这是我在学习<Effective C++>中总结得出的心得与体会,完全是以我自己的理解所作的笔记,是对个人经验的积累.基于第三版我以每个章节进行总结,全书一共九个章节. 第一章-让自己 ...
- Effective C++改善程序与设计的55个具体做法笔记
Scott Meyers大师Effective三部曲:Effective C++.More Effective C++.Effective STL,这三本书出版已很多年,后来又出版了Effective ...
- Effective C++知识点
条款01:视C++为一个语言联邦(View C++ as a federation of languages.) 对于内置类型而言,pass-by-value通常比pass-by-reference高 ...
- 关于const关键字
C++的const关键字标记了一个变量(或者函数)的常量属性,程序员通过const关键字告诉编译器:这个变量是不可修改的常量,任何企图对其进行修改的操作不要通过编译. const关键字的使用比较容易混 ...
- C++之const关键字
const作用 const关键字在C++中真是无处不在,无论是函数参数,还是函数返回值,还是函数末尾都经常会看到const关键字,这表明C++中的const关键字是非常灵活的, 合理地使用const关 ...
最新文章
- 对面向接口编程、按分层建项目的反思和新的分层结构思路
- rails 如何 支持 bootstrap3
- postgresql user表
- Vxscan:一款实用综合扫描工具
- 【luogu1337】【JSOI2004】平衡点 / 吊打XXX(模拟退火)
- android浮动按钮_Android浮动操作按钮示例教程
- Windows 10安裝.net Framework 3.5出現0X800F0954錯誤
- c语言 python rsa库_python如何调用libcrypto实现RSA解密?
- js批量创建钱包地址并保存私钥
- 关于XDC工具的文章
- pow函数需要注意的问题
- 通过pytorch建立神经网络模型 分析遗传基因数据
- vue 移动端校验(是否移动设备,安卓/IOS,是否微信浏览器)
- Windows——如何关闭笔记本自带键盘
- Smart-Link、Monitor-Link介绍与配置举例
- Ubuntu上软件安装
- LearnGL - 06.1 - Matrix - 矩阵02 - 向量空间、向量空间的维度、为何矩阵乘法要有 [M x N] * [N * P] 的 N 要相等的限制
- 逐梦C++之四:四种强制类型转换
- 感冒了,很难受,但.....
- CSS,给你点“颜色“看看