C ++零初始化具有可变数组长度的模板数组

C++ zero init an array of templates with variable array length

有没有办法将具有可变大小的任何类型的数组初始化为零?所以我想要的是应用这样的东西:

int results[5] = {};

到这样的模板:

T results[i] = {};

当我尝试这个时,我的编译器会这样说:'results' declared as array of functions of type 'T ()'。 当我使用任何固定类型名称时,我会收到此错误:Variable-sized object may not be initialized

另外i是调用这个函数时传入的变量

可变长度数组在 C++ 中是非标准的,您的编译器支持它们作为扩展。您的编译器还告诉您扩展的局限性:可变长度数组可能没有初始化程序。作为解决方法,您可以这样做:

int results[i];
std::fill(results, results + i, 0);

当然,更好的方法是使用 std::vector 这样您就不会依赖任何非标准扩展。