如何在C ++中将uint64_t数组初始化为0?

时间:2015-08-06 07:54:16

标签: c++ uint64 atmelstudio

我正在使用Atmel 6.2并为Arduino编写应用程序。我对这些代码行有疑问:

int total = 3;
uint64_t myarray[total] = {};

它出现以下错误

  

错误:数组绑定在']'标记

之前不是整数常量

为什么会这样?

4 个答案:

答案 0 :(得分:4)

int total = 3;
uint64_t myarray[total] = {};

是可变大小数组的定义,因为数组的大小不是编译时常量表达式。

C99有条件地支持这种类型的数组。但是,C ++中不存在此功能(尽管某些编译器可以使用C ++中包含此功能的语言扩展),并且编译器会正确发出错误。

你应该在数组的定义中使用常量,例如像

const int total = 3;
uint64_t myarray[total] = {};

或者您应该考虑使用另一个容器,例如std::vector<uint64_t>,如果您认为在运行时可以更改数组的ize。

答案 1 :(得分:3)

您必须提供编译时常量(或constexpr s)作为数组大小。

使用此:

const int total = 3;

答案 2 :(得分:1)

&#34;总&#34;需要是const。另外我更喜欢std :: array到C风格的数组(只是个人偏好)。

int const total = 3;

std::array<uint64_t, total> values = {};

如果需要动态数组,请使用 std :: vector

答案 3 :(得分:0)

你的问题不是很清楚,你想零初始化,或者你想修复你的错误。

根据建议,您可以使用编译时常量表达式来修复错误。

const int total = 3;
uint64_t myarray[total] = {};

要初始化为零,您可以使用以下代码。

std::fill_n(myarray, total, 0);

但是,如果你想要一个可变大小的数组,你可以用以下方式使用指针来完成它。

int total = 3;

uint64_t  *myarray = new uint64_t [total]; // This will be created at run time