【发布时间】:2014-06-15 03:24:21
【问题描述】:
有人告诉我,在 C++ 中,应该始终使用 std::array 而不是 c 样式数组。
查看问题后,我发现有人说 std::array 更好。
从这个意义上说,我使用了很多std::array,有时当我使用其他库时,我必须使用接收 c 样式数组的方法。
例如,我正在使用这个函数
void Draw(float* arg);
是否可以将std::array<float,4>作为参数传入?
如果我将 &vec4[0] 作为参数传入,会有任何未定义的行为吗?
从这个意义上说,多维数组也会一样吗?
将此数组声明为
std::array<std::array<float,4>,4>;
如果我要传入 &mtx4[0][0] 作为参数,还会有任何未定义的行为吗?
编辑:感谢您指出我在多维数组代码中的错误。我编辑了它。
【问题讨论】:
-
std::array只是有一个数组作为其成员。该数组的行为与任何其他数组一样。但是,请考虑改用.data()。而且您的“多维数组”示例甚至不适用于普通数组。不要指望 2Dstd::array有任何魔力。 -
“是否可以将
std::array<float,4>作为参数传入?” 可以!Draw( my_cpp_array.data() );。你问了很多问题,所以我已经筋疲力尽了。 :) -
std::array的一个好处是,如果您使用at()方法访问数据,它会进行边界检查,从而使您免于著名的of-by-one 的麻烦。错误,并不总是很容易在原始数组上检测到。 en.wikipedia.org/wiki/Off-by-one_error -
关于你的最后一个问题:绝对不是。你知道
float[4][4]与float**不兼容,对吗? -
感谢所有及时回复。我编辑了这个问题,因为我之前误解了“多维”数组。我不知道 .data() 方法。抱歉问了太多问题。我认为考虑到同样的事情会没问题。 =D