1.条款二:为什么建议使用const而非#define
1 const int AspectRatio = 6;
2 #define AspectRatio = 6;
1.1.用const声明的变量带有内置类型声明,在编译器期间可以进行类型检查,而#define没有类型检查,在错误报告的时候你可能只有一个数字6进行错误追踪极其困难。
1.2.特定情况下我们可以用const声明限定其作用域,而#define无法做到,除非在某处被#undef,而这样做是把简单的事搞复杂了,在类内声明一个const就限定了其作用于类内,而类内const对象通常是所有对象共同维护的,通常加上关键字static,在有些编译器内,只允许类外定义,类内声明static变量,这个声明类内数组带来麻烦,而使用enum可以解决这一个问题,它提供了类似于#define的功能。
1 class DoSomething { 2 private: 3 //static const int AspectRatio = 5; 4 //... 5 static const int AspectRatio; 6 enum rank { r = 5 }; 7 int arr[r]; 8 }; 9 const int DoSomething::AspectRatio = 5;