面试题答案
一键面试- 常量性要求:
- 在C++函数模板中,非类型参数必须是常量表达式。这意味着在编译时其值就必须是确定的。非类型参数通常可以是整型(如
int
、char
等)、枚举类型、指针或引用。这些参数在模板实例化时的值必须是常量,不能在运行时改变。
- 在C++函数模板中,非类型参数必须是常量表达式。这意味着在编译时其值就必须是确定的。非类型参数通常可以是整型(如
- 举例说明不符合要求时的错误提示: 下面是一个不符合常量性要求的示例代码:
#include <iostream>
template <int N>
void printSize() {
std::cout << "Size is: " << N << std::endl;
}
int main() {
int num = 5;
// 错误:num不是常量表达式
printSize<num>();
return 0;
}
在这段代码中,printSize<num>()
尝试使用num
作为模板的非类型参数,而num
是一个普通的int
变量,不是常量表达式。在编译时,不同的编译器可能给出类似如下的错误提示:
- GCC:
error: the value of 'num' is not usable in a constant expression
- Clang:
error: non - constant expression cannot be narrowed from type 'int' to 'int' in initializer list