我听说在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
中得到任何神奇的东西。 - chrisstd::array<float,4>
作为参数传递?” 可以!Draw( my_cpp_array.data() );
你问了很多问题,我都快筋疲力尽了。 :) - Drew Dormannstd::array
的一个好处是,如果您使用at()
方法来访问数据,它将进行边界检查,从而使您免受著名的“off-by-one”错误的困扰,这种错误在原始数组上并不总是容易检测到。http://en.wikipedia.org/wiki/Off-by-one_error - glampertfloat[4][4]
与float**
是不兼容的,对吗? - n. m.&mtx [0] [0]
传递给请求float *
的函数。但是,您不能将&mtx [0]
或mtx
传递给期望float(* arg)[4]
的函数,在C中声明为float mtx [4] [4];
时可以这样做。 - WhozCraig