尽管语法相似,但初始化和赋值是两种不同的操作。
int x[4] = { 1, 2, 3, 4}; // initialization
x = { 1, 2, 3, 4}; // assignment
此外,C 和 C++ 中的原始数组的行为很奇怪,特别是有一条特殊规则说它们是不可赋值的:
int x[4];
int y[4];
y = x; // error, arrays are not assignable
因此,即使您创建了一个数组临时对象,也不能简单地使用赋值运算符将其复制到另一个数组对象中。
相反,如果您设置使用原始数组,则必须单独设置每个数组元素,使用memcpy
,fill
等。
更好的解决方案是使用 C++ 和允许赋值的原始数组以外的类型,例如std::array<unsigned char, 64>
:
std::array<unsigned char, 64> buffer = {0xef,0xaa,0x03,0x05,0x05,0x06,0x07,0x08};
buffer = {}; // zeros out the array
模板的std::array
行为通常与普通对象一致,而 C 和 C++ 中的原始数组在语言规范中具有所有这些非常奇怪的行为和特殊情况。您应该避免使用原始数组。
不幸的是,C 没有任何替代原始数组的方法。