1

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

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

(我读过的所有文档似乎都证明了这一点,但是 1)文档没有明确说明如果省略第二个参数会发生什么 2)我正在尝试调试一个难以重现的奇异错误,在其中一些数组默认不归零,我现在无法发布显示此错误的最小代码,但我会尝试在可用时添加一个)


示例代码:

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

1 回答 1

3

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

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

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

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

于 2016-10-17T23:30:33.357 回答