[Effective C++ –002]尽量以const,enum,inline替换#define

一、尽量以const,enum,inline替换#define(或以编译器代替预处理器)

1)#define在N-Orca中的应用

2)Const替换 #define
首先经常会 #define ASPECT_RATO 1.63
由于记号ASPECT_RATO有可能不被计入记号表内,所以当编译发生错误时,可能会带来困惑。(尤其是在ASPECT_RATO为非自己所写的的时候)
解决方法:
const double aspectRato = 1.63;
这些写,aspectRato肯定会被编译器看到。
而且使用常量可能比使用#define导致更少的目标码。(因为预处理器会将ASPECT_RATO替换为1.63)

用了Const来定义常量时,通常以下格式:
static const int num = 5;

#define 不能定义一个Class的专属常量,应为#define不重视作用域。一旦宏被定义,在其后的编译构成中就有效。

3)enum替换 #define
但当你的Class的专有成员不希望被取其地址,或引用的时候。可以通过enum来实现。
class A
{
private:
enum { num = 5 };
int a[num];
}
因为取一个enum的地址是不合法的

4)inline替换 #define
首先看一个例子:

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

使用方法:
int a = 5 , b = 0 ;
CALL_WITH_MAX(++a,b)
CALL_WITH_MAX(++a,b+10)
以上,调用又有什么后果呢?

可以用templte inline来替换以上实现,如下:
template<typename T> inline void callWithMax(const T& a, const T& b)
{
f(a > b ? a : b);
}

总结:
1)对于单纯的变量,最好以const或enums替换#defines。
2)对于形似函数的宏,最好改用inline函数替换#defines

原文链接: https://www.cnblogs.com/hustcser/archive/2012/10/19/2730583.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    [Effective C++ --002]尽量以const,enum,inline替换#define

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/66354

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 下午12:17
下一篇 2023年2月9日 下午12:18

相关推荐