调整大小是否保证 std::valarray 归零?

Does resize guarantee an std::valarray to be zeroed?

x.resize(1024)是否保证valarrayx会归零?
std::valarray<float> z(1024); 是否保证它也将被填充为零?

Mac、Windows、Linux也是这样吗? 即使对于 C++03(我没有使用 C++11)也是如此吗?

(我读过的所有文档似乎都证明了这一点,但是 1)文档 don't explicitely state what happens 如果省略了第二个参数 2)我正在尝试调试一个奇异的错误,这很难重现,其中某些数组默认情况下未归零,我现在无法 post 显示此错误的最小代码,但我会尝试添加一个一旦可用)


示例代码:

#include <valarray>
#include <complex>

int main()
{
  std::valarray<double> x;
  std::valarray<std::complex<double>> y;
  std::valarray<float> z(1024);  
  x.resize(1024);
  y.resize(1024);
  // are all x, y, z  filled with zeros?
}

valarray<T>::resize的标准声明是

void resize(size_t sz, T c = T());

其中 c 是用于新元素(如果有)的值。如果某些实现决定将它实现为两个重载函数而不是一个带有默认参数的函数(这是允许的),它必须保留标准行为。

这意味着是的,如果 resize 创建新元素,它们必须进行值初始化(在您的情况下为零初始化)。