引入
在《Effective C++》一书中的第二个条款,作者让我们尽量以const,enum,inline替换#define,换种说法就是“宁可以编译器替换预处理器”比较好。在一些基础性的文章内,我也是看到了将#define声明的宏视作为常量的作者,这里并不止针对一位作者,而是许多。或许,宏未被编译器所看见,在编译之前就可能编译器已经将所有宏替换了。
为什么使用const代替#define
1.作用域
#define并不注重作用域,封装作为面向对象的一部分,这样的操作为使得我们设计的类暴露出来,为了提供封装性,我们可以使用const成员变量代替#define
使用#define写的一段代码
#include <iostream>
#define MAX_SIZE 20
class BankQueue {
public:
BankQueue() = default;
BankQueue(BankQueue&) = delete;
BankQueue(BankQueue&&) = delete;
int max_size() {
return MAX_SIZE;
}
};
int main() {
BankQueue bq;
std::cout << bq.max_size()