MST
星途 面试题库

面试题:C++函数模板非类型参数常量性要求基础考查

请简述C++函数模板中对非类型参数的常量性要求,并举例说明不符合该要求时编译器可能给出的错误提示。
37.5万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 常量性要求
    • 在C++函数模板中,非类型参数必须是常量表达式。这意味着在编译时其值就必须是确定的。非类型参数通常可以是整型(如intchar等)、枚举类型、指针或引用。这些参数在模板实例化时的值必须是常量,不能在运行时改变。
  2. 举例说明不符合要求时的错误提示: 下面是一个不符合常量性要求的示例代码:
#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变量,不是常量表达式。在编译时,不同的编译器可能给出类似如下的错误提示:

  • GCCerror: the value of 'num' is not usable in a constant expression
  • Clangerror: non - constant expression cannot be narrowed from type 'int' to 'int' in initializer list