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

时间:2016-10-17 23:24:21

标签: c++ arrays c++03 valarray

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

这适用于Mac,Windows,Linux吗? 即使对于C ++ 03(我不使用C ++ 11)也是如此吗?

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

示例代码:

#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?
}

1 个答案:

答案 0 :(得分:2)

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

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

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

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