【发布时间】:2016-10-17 23:24:21
【问题描述】:
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)我正在尝试调试一个难以重现的奇异错误,其中一些数组默认不归零,我现在无法发布显示此错误的最小代码,但我会尝试在可用时添加一个)
示例代码:
#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?
}
【问题讨论】:
-
"第一个成员函数使用它们的默认构造函数初始化元素。"对我来说似乎很清楚。虽然,这实际上不是很精确,而且 MSDN 也不权威,但所提出的一般观点是正确的。这是一个更好的参考:en.cppreference.com/w/cpp/numeric/valarray/resize。 (虽然仍然不权威;只有标准是。)
-
来自您链接的文档:“第一个成员函数 [没有第二个参数] 使用其默认构造函数初始化元素。”
-
@GManNickG:“...使用默认构造函数初始化元素”当然在形式上是不正确的,尤其是在 OP 的情况下。
float和double没有任何构造函数。即使我们纯粹假设允许float或double中存在“默认构造函数”,谁说它设置为零? -
@AnT:因此我说它的原因并不准确。 :)
-
为什么投反对票?这个问题不相关吗?想要确定某件事(这可能听起来很简单)是真的吗?