特性 #define const constexpr consteval
本质 预处理器文本替换 运行时常量 编译期常量/函数 立即函数(必须编译期执行)
类型检查 ❌ 无类型 ✅ 有类型 ✅ 有类型 ✅ 有类型
作用域 文件作用域(全局) 遵循C++作用域 遵循C++作用域 遵循C++作用域
内存占用 无内存地址 有内存地址 可能优化掉 编译期求值,无运行时代码
调试支持 ❌ 困难 ✅ 好 ✅ 好 ✅ 好
C++标准 C++98 C++98 C++11 C++20
执行时机 预处理期 运行时初始化 编译期计算,运行时也可用 必须编译期计算
是否可修改 ❌ 不可(预处理后) ❌ 不可 ❌ 不可 ❌ 不可
模板友好 ❌ 不友好 ⚠️ 有限 ✅ 友好 ✅ 友好
函数支持 宏函数(不安全) ❌ 不支持 ✅ 编译期/运行期函数 ✅ 必须编译期执行的函数

总结

黄金法则:能用 constexpr就不用 const,能用 consteval就不用宏,完全避免用 #define定义函数或类型常量。