[Effective C++ --002]尽量以const,enum,inline替换#define
2012-10-19 10:37
661 查看
一、尽量以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
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
相关文章推荐
- 重读经典-《Effective C++》Item2:尽量以const,enum,inline替换#define
- Effective C++ 条款02 尽量以const,enum,inline替换#define
- [转]Effective C++ 02 尽量以const, enum, inline替换#define 笔记
- [Effective C++] 尽量以const、enum、inline替换#define
- 《effective c++》条款二:尽量以enum,const,inline替换#define
- Effective C++ 笔记(2):尽量以const,enum,inline替换#define
- [Effective C++读书笔记]002_条款02_尽量以const,enum,inline替换#define
- Effective C++:条款02:尽量以const,enum,inline替换#define
- effective C++(第三版)读书笔记一——条款二:尽量以const,enum,inline替换#define
- 《Effective C++》读后总结(二)尽量以const,enum,inline替换#define
- 《Effective C++》条款02:尽量以const,enum,inline替换#define
- effective C++ 读后感(二) 尽量以const, enum, inline替换 #define
- 《Effective C++》尽量以const,enum,inline,替换#define
- Effective C++--条款02:尽量以const,enum,inline替换#define(以编译器替换预处理器)
- Effective C++ 读书笔记——条款2:尽量以const,enum,inline替换#define
- Effective C++ 之 Item 2:尽量以 const, enum, inline 替换 #define
- Effective C++学习笔记 条款02:尽量以const,enum,inline替换 #define
- Effective C++ 条款02解读: 尽量以const, enum, inline替换#define
- Effective C++ 条款2 尽量以const,enum,inline替换#define
- Effective C++_笔记_条款02_尽量以const、enum、inline替换#define