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;

猜你喜欢

转载自www.cnblogs.com/Royzzzzz/p/11892905.html