C/C++宏而不是const

Dav*_*log 3 c c++ const

#define MAX 80等效于const int MAX = 80;两者都是常量且无法修改.

使用宏而不是常量整数不是更好吗?常量整数占用内存.预处理器将宏的名称替换为其值,对吧?所以它不会记忆.

为什么我会使用const int而不是宏?

Rei*_*ica 13

原因#1:范围界定.宏完全忽略了范围.

namespace SomeNS {

enum Functor {
  MIN = 0
  , AVG = 1
  , MAX = 2
};

}
Run Code Online (Sandbox Code Playgroud)

如果上面的代码恰好包含在MAX宏定义之后的文件中,它将很乐意进行预处理80 = 2,并且编译失败.

另外,const变量是类型安全的,可以使用常量表达式安全地初始化(不需要括号)等.

另请注意,当编译器const在使用变量时可以访问变量的定义时,允许"内联"其值.所以如果你从不拿它的地址,它甚至不需要占用空间.

  • @Agnew因为它违反了一个定义规则.对于可以在多个翻译单元(标题中)定义的内容,标准要求它们由相同的标记序列组成_and_,每个名称在查找时绑定到同一个实体(除非名称指的是`const`) _and_ rvalue转换有一个直接的左值).在`int const`中,const意味着内部链接,这意味着每个翻译单元中的不同实体. (3认同)
  • 有一个细微的区别:比如在一个标题中,你有一个包含`std :: vector <int> v;`的类,以及一个内联函数,它执行`v.push_back(MAX);`.如果`MAX`是一个宏,这很好,但如果`MAX`是一个`int const`,它是未定义的行为(尽管我从来没有听说过它失败的实现). (2认同)