面试题答案
一键面试- 非类型参数的作用域范围:
- C++函数模板中的非类型参数的作用域是整个模板定义。它在模板声明和定义的范围内有效,类似于函数参数在函数体中的作用域,只不过这里是针对模板。在模板实例化时,非类型参数的值是固定的,不能在模板函数内部被修改。
- 函数模板示例:
#include <iostream>
// 函数模板定义,非类型参数N表示数组的大小
template <typename T, int N>
T sumArray(T arr[N]) {
T result = T();
for (int i = 0; i < N; ++i) {
result += arr[i];
}
return result;
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
// 实例化模板,这里N被实例化为5
int sum = sumArray<int, 5>(arr);
std::cout << "Sum of array elements: " << sum << std::endl;
return 0;
}
在这个示例中:
- 非类型参数
N
在sumArray
函数模板定义中,它确定了数组arr
的大小。 - 其作用域体现在
sumArray
函数模板的整个定义中,从模板声明template <typename T, int N>
开始,到函数模板定义结束。在sumArray
函数内部,N
用于控制循环的次数,以遍历整个数组。在main
函数中实例化sumArray<int, 5>
时,N
被固定为5,并且在sumArray
函数模板实例化后的代码中,N
的值不能被修改,这体现了它在模板实例化后的固定性和其作用域范围。