码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-11-16 14:40:04      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:call   效率   比较   template   约束   预处理   amp   处理   调用   

一、概述

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

 

二、细节

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

标签:call   效率   比较   template   约束   预处理   amp   处理   调用   

原文地址:http://www.cnblogs.com/xzxl/p/7843643.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!