确保C++;编译时的数组参数大小 无论如何,在C++编译时,是否有必要确保数组参数的长度?以便: void foo(T arr[3]); int main() { T a[5] = { /* ... */ }; foo(arr); return 0; }

确保C++;编译时的数组参数大小 无论如何,在C++编译时,是否有必要确保数组参数的长度?以便: void foo(T arr[3]); int main() { T a[5] = { /* ... */ }; foo(arr); return 0; },c++,arrays,templates,compile-time,C++,Arrays,Templates,Compile Time,会产生编译时错误吗 使用模板类型确保这一点的唯一方法是 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; } 模板 结构数组{ T arr[N]; }; void foo(数组和arr); int main() { 阵列a

会产生编译时错误吗

使用模板类型确保这一点的唯一方法是

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;
}
模板
结构数组{
T arr[N];
};
void foo(数组和arr);
int main()
{
阵列a;
傅(甲),;
返回0;
}

或者是否有更惯用的方法来处理此问题?

如果确实需要编译时错误,可以定义函数以获取引用:

void foo(T (&arr)[3]);

不要创造它。已经为您完成了:
std::array
/
boost::array
。不过,这是正确的解决方案。我只是在做了一些更深入的谷歌搜索后发现了这一点。我似乎找不到多维数组的解决方案。C++11样式的typedef是正确的解决方法吗:
使用array2d=array的模板这似乎是比使用STL和模板最节省的解决方案。非常感谢。我假设这也适用于多维数组:
void foo(T(&arr)[3][5]
?哦,当然可以!即使没有数组引用,也必须在编译时确保第二个维度。应该更仔细地考虑这个问题。