在C++中,使用 constexpr
来定义常量和使用宏 #define
有几个关键区别:
- 类型安全:
constexpr
常量有类型,宏没有类型。 - 作用域:
constexpr
常量遵循C++的作用域规则,而宏是文本替换,不遵循作用域规则。 - 调试:
constexpr
常量在调试时可见,宏通常不可见。 - 编译时计算:
constexpr
常量是编译时常量,允许编译器进行优化,而宏只是简单的文本替换。
你可以在类内使用 constexpr
来定义常量,并规定这些常量只在类的范围内生效。以下是一个示例:
#include <iostream>
class MyClass {
public:
static constexpr int ARRAY_SIZE = 148; // 使用 constexpr 定义常量
void print() const {
int name[ARRAY_SIZE]; // 使用类内的常量定义数组大小
for (int i =