MST

星途 面试题库

面试题:C++函数模板非类型参数取值范围基础

在C++函数模板中,非类型参数可以有哪些常见的数据类型?请举例说明,并阐述每种类型在作为非类型参数时的一些限制。
43.5万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

在C++函数模板中,非类型参数常见的数据类型有:

  1. 整型:包括intcharshortlonglong long等。例如:
template <int N>
int arraySize() {
    return N;
}

限制:非类型参数的值在编译期必须是常量表达式。

  1. 指针类型:可以是对象指针或函数指针。例如:
template <int* ptr>
void printPtrValue() {
    std::cout << *ptr << std::endl;
}

限制:指针所指向的对象必须具有静态存储期,即全局变量、静态局部变量等。

  1. 引用类型:对象引用或函数引用。例如:
template <int& ref>
void printRefValue() {
    std::cout << ref << std::endl;
}

限制:引用的对象必须具有静态存储期。

  1. 枚举类型:例如:
enum class Color { Red, Green, Blue };
template <Color c>
void printColor() {
    if (c == Color::Red) {
        std::cout << "Red" << std::endl;
    }
}

限制:同样要求在编译期是常量表达式。