推荐答案
// www.javascriptcn.com code example
constexpr int add(int a, int b) {
return a + b;
}
int main() {
constexpr int result = add(3, 4); // 编译时计算
int runtimeResult = add(5, 6); // 运行时计算
return 0;
}本题详细解读
1. constexpr 函数的特点
编译时计算:
constexpr函数可以在编译时进行计算,前提是传入的参数是编译时常量。这使得constexpr函数可以用于需要在编译时确定值的场景,如数组大小、模板参数等。返回值类型:
constexpr函数的返回值类型必须是字面类型(Literal Type),通常包括基本数据类型(如int、double等)、指针、引用、以及某些用户定义的类型。函数体限制:
constexpr函数的函数体必须非常简单,通常只能包含一条return语句,或者是一些简单的表达式。C++14 之后,constexpr函数的限制有所放宽,允许包含局部变量、循环和条件语句等。
2. constexpr 函数的用法
编译时计算:
constexpr函数可以用于在编译时计算常量表达式。例如,constexpr int result = add(3, 4);会在编译时计算出result的值为7。运行时计算:
constexpr函数也可以在运行时调用,此时它的行为与普通函数无异。例如,int runtimeResult = add(5, 6);会在运行时计算出runtimeResult的值为11。模板元编程:
constexpr函数可以用于模板元编程,帮助在编译时生成复杂的类型或值。
3. 示例代码解析
// www.javascriptcn.com code example
constexpr int add(int a, int b) {
return a + b;
}
int main() {
constexpr int result = add(3, 4); // 编译时计算
int runtimeResult = add(5, 6); // 运行时计算
return 0;
}constexpr int result = add(3, 4);:由于3和4是编译时常量,add(3, 4)会在编译时计算出结果7,并将其赋值给result。int runtimeResult = add(5, 6);:虽然add是constexpr函数,但由于5和6不是编译时常量,add(5, 6)会在运行时计算出结果11,并将其赋值给runtimeResult。