constexpr用于声明编译时常量或函数,要求值在编译期确定,适用于数组大小、模板参数等场景;其变量需用常量表达式初始化,如constexpr int size = 10;不能使用运行时变量初始化,如constexpr int y = x(x为变量)错误;constexpr函数在传入常量表达式时可编译期求值,C++14起支持复杂语句;与const区别在于const允许运行时初始化,而constexpr必须编译期确定;所有constexpr变量都是const,但反之不成立;常见应用包括定义数组大小和模板参数,如Buffer buf。

在C++中,constexpr 用于声明编译时常量或常量表达式函数。它比 const 更严格,要求值在编译期就能确定,适用于需要在编译阶段计算的场景,比如数组大小、模板参数等。
constexpr 常量定义方法
定义一个 constexpr 变量非常简单,只需在变量声明前加上 constexpr 关键字,并用常量表达式初始化:
constexpr int size = 10; constexpr double pi = 3.1415926; constexpr char flag = 'A';
这些变量的值必须在编译时可计算。例如,下面这种写法是错误的:
int x = 5; constexpr int y = x; // 错误:x 不是编译期常量
constexpr 函数
constexpr 也可以修饰函数,表示该函数在传入常量表达式时可在编译期求值:
立即学习“C++免费学习笔记(深入)”;
constexpr int square(int n) {
return n * n;
}
constexpr int val = square(5); // 编译期计算,val = 25
动态WEB网站中的PHP和MySQL:直观的QuickPro指南第2版
动态WEB网站中的PHP和MySQL详细反映实际程序的需求,仔细地探讨外部数据的验证(例如信用卡卡号的格式)、用户登录以及如何使用模板建立网页的标准外观。动态WEB网站中的PHP和MySQL的内容不仅仅是这些。书中还提到如何串联JavaScript与PHP让用户操作时更快、更方便。还有正确处理用户输入错误的方法,让网站看起来更专业。另外还引入大量来自PEAR外挂函数库的强大功能,对常用的、强大的包
下载
从 C++14 开始,constexpr 函数体内可以包含更多复杂的语句,如循环和条件判断。C++11 中则限制较多,只能包含单条 return 语句。
constexpr 与 const 的区别
const 表示“不可修改”,但不一定在编译期确定值;而 constexpr 强制要求值在编译期确定。
- const 变量可以在运行时初始化(如函数参数)
- constexpr 变量必须用常量表达式初始化
- 所有 constexpr 变量都是 const,但反之不成立
实际应用场景
constexpr 常用于需要编译期常量的地方:
constexpr int arraySize = 10; int arr[arraySize]; // 合法:arraySize 是编译期常量template
struct Buffer { char data[N]; }; Buffer
buf; // 使用 constexpr 函数作为模板参数
基本上就这些。只要确保初始化表达式是编译期可求值的,就可以放心使用 constexpr 定义高效、安全的常量。










