EffictiveC++笔记之用const、enum、inline替换define

来源:互联网 发布:淘宝评价怎么写50字 编辑:程序博客网 时间:2024/06/05 12:39

#define MagicNum 3.1415,会让你再查找错误的时候浪费太多时间,因为编译器只会给出magic number的错误,而不会给出MagicNum。因为预编译只是将内容原封不动的展开,并没有在记号表中记录,所以编译器根本不知道这个东西。

在定义class时,将static的数据定义在类内,可以直接给一个值,也可以在其他地方为其初始化。有的编译器不支持在类内部为静态成员赋值,因为如果给他赋值,那么就必须为他分配一个空间,所以在类外部初始化静态数据是通用的。

enum hack技术:在编译器允许在类内为静态数据初始化时,而一个数组成员却依靠这个静态成员来初始化

class myclass

private:static const int i;

int arrayint[i];

这种情况下就可以用enum hack

用一个语句:enum{i=5};  int arrayint[i];

编译器并不为匿名的枚举分配一个空间,i只不过是5的一个记号,没有实例。这样也同样防止了有一个指针通过指向i而对数组的初始化大小进行干预

原创粉丝点击