引入
在《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() << std

本文讨论了在C++中使用const关键字代替#define的原因,包括const在作用域、指针操作方面的优势,并指出#define的缺陷,如不考虑作用域、无法用于指针操作以及可能导致的错误替换问题。建议开发者尽量使用const进行常量定义以提高代码质量。
最低0.47元/天 解锁文章
4207

被折叠的 条评论
为什么被折叠?



