如何在 C++ 中将 uint64_t 数组初始化为 0?
How to initialize a uint64_t array to 0 in C++?
我正在使用 Atmel 6.2 并为 Arduino 编写应用程序。我对这些代码行有疑问:
int total = 3;
uint64_t myarray[total] = {};
它给出以下错误
error: array bound is not an integer constant before ']' token
为什么会这样?
您必须提供编译时常量(或 constexpr
s)作为数组大小。
使用这个:
const int total = 3;
这个
int total = 3;
uint64_t myarray[total] = {};
是可变大小数组的定义,因为数组的大小不是编译时常量表达式。
这种数组是C99有条件支持的。然而,此功能在 C++ 中不存在(尽管某些编译器可以有自己的语言扩展,在 C++ 中包含此功能)并且编译器正确地发出错误。
要么你应该在数组的定义中使用常量,例如像这样
const int total = 3;
uint64_t myarray[total] = {};
或者如果您认为数组的大小可以在 运行 时间内更改,您应该考虑使用另一个容器,例如 std::vector<uint64_t>
。
你的问题不是很清楚,你想零初始化或者你想修复你的错误。
根据建议,您可以使用编译时常量表达式来修复错误。
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
"total" 需要是常量。另外我更喜欢 std::array 而不是 C 风格的数组(只是个人喜好)。
int const total = 3;
std::array<uint64_t, total> values = {};
如果需要动态数组,使用std::vector。
我正在使用 Atmel 6.2 并为 Arduino 编写应用程序。我对这些代码行有疑问:
int total = 3;
uint64_t myarray[total] = {};
它给出以下错误
error: array bound is not an integer constant before ']' token
为什么会这样?
您必须提供编译时常量(或 constexpr
s)作为数组大小。
使用这个:
const int total = 3;
这个
int total = 3;
uint64_t myarray[total] = {};
是可变大小数组的定义,因为数组的大小不是编译时常量表达式。
这种数组是C99有条件支持的。然而,此功能在 C++ 中不存在(尽管某些编译器可以有自己的语言扩展,在 C++ 中包含此功能)并且编译器正确地发出错误。
要么你应该在数组的定义中使用常量,例如像这样
const int total = 3;
uint64_t myarray[total] = {};
或者如果您认为数组的大小可以在 运行 时间内更改,您应该考虑使用另一个容器,例如 std::vector<uint64_t>
。
你的问题不是很清楚,你想零初始化或者你想修复你的错误。
根据建议,您可以使用编译时常量表达式来修复错误。
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
"total" 需要是常量。另外我更喜欢 std::array 而不是 C 风格的数组(只是个人喜好)。
int const total = 3;
std::array<uint64_t, total> values = {};
如果需要动态数组,使用std::vector。