确保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]
?哦,当然可以!即使没有数组引用,也必须在编译时确保第二个维度。应该更仔细地考虑这个问题。