条款02:尽量以const,enum,inline替换#define

Posted GGBeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了条款02:尽量以const,enum,inline替换#define相关的知识,希望对你有一定的参考价值。

一、概述

尽量少用预处理器——宏替换

 

二、细节

1. 关于宏替换之常量

旧版本:#define N 10;

新版本:const int n = 10;

比较:#define不被视为语言的一部分,记号名称N在编译器开始处理源代码之前就被预处理器移走了。

补充:class的专属常量需要封装性,而#define不能提供封装性(它并不重视作用域)。

2. 形似函数的宏

旧版本:#define CALL_WITH_MAX(a, b) f((a) > (b) ? (a) : (b))

新版本:template<typename T> inline void callWithMax(const T &a, const T &b) { f(a > b ? a : b); }

比较:旧版本中对于调用实参时有很大的约束,而且很复杂;而inline与它的效率相似但形式容易且不易出错。

补充:callWithMax是个真正的函数,它遵守作用域和访问规则;而你不能用宏写一个class的private成员函数。

3. enum的成员是const的,故可作为常量表达式

以上是关于条款02:尽量以const,enum,inline替换#define的主要内容,如果未能解决你的问题,请参考以下文章

条款2:尽量以const,enum,inline替换#define

Effective C++ 条款2:尽量以const,enum,inline替换#define

1.尽量以const ,enum,inline替换define

NO.2 尽量以const,enum,inline 替换 #define

第一篇:尽量多的以 const/enum/inline 替代 #define

effective c++学习笔记