在C ++编译时,无论如何确保数组参数的长度?这样:
void foo(T arr[3]);
int main()
{
T a[5] = { /* ... */ };
foo(arr);
return 0;
}
会产生编译时错误吗?
是使用模板类型
来确保这一点的唯一方法template <int N, class T>
struct Array{
T arr[N];
};
void foo(Array<3, T> &arr);
int main()
{
Array<5, T> a;
foo(a);
return 0;
}
或者是否有更惯用的处理方式?
答案 0 :(得分:2)
如果您真的想要编译时错误,可以定义函数以获取引用:
void foo(T (&arr)[3]);