目录
1. #define
-
作用:
#define
是一个预处理指令,用于在编译前进行文本替换。 -
语法:
#define NAME VALUE
-
特点:
- 无类型:
#define
只是简单的文本替换,没有类型信息。 - 作用域:
#define
定义的常量在整个文件中有效,直到被#undef
或文件结束。 - 调试难度:由于没有类型检查,
#define
可能导致错误,调试起来比较困难。
#define PI 3.14159
- 无类型:
2. const int
-
作用:
const int
用于定义一个在运行时不能改变的常量。 -
语法:
const int NAME = VALUE;
-
特点:
- 有类型:
const
常量具有明确的类型,并且进行类型检查。 - 作用域:
const
常量遵循 C++ 的作用域规则,可以在局部或全局范围内定义。 - 编译时常量:
const int
常量的值可以在编译时确定,但不能用于编译时计算的复杂场景。
const int MAX_SIZE = 100;
- 有类型:
3. constexpr
-
作用:
constexpr
用于定义在编译时可以求值的常量和函数。 -
语法:
constexpr TYPE NAME = VALUE;
或constexpr RETURN_TYPE FUNCTION_NAME(ARGUMENTS) { ... }
-
特点:
- 编译时计算:
constexpr
变量和函数可以在编译时进行计算,以优化程序性能。 - 类型安全:
constexpr
具有类型检查,能够更安全地定义常量。 - 函数:
constexpr
函数可以在编译时计算结果,C++14 及更高版本允许函数体包含更复杂的逻辑(如条件语句、循环等)。
constexpr int square(int x) { return x * x; } constexpr int SIZE = 10; int arr[SIZE];
- 编译时计算:
总结
#define
:简单的文本替换,无类型检查和作用域控制。const int
:有类型的常量,适合用于需要类型安全的场景。constexpr
:提供了强大的编译时计算能力和类型安全,适合用于复杂的编译时常量计算。