1

std::valarray< double > myArray(3)产生valarray长度为 3 的 a,初始化为零。

std::valarray< double > myArray(1,3)产生valarray长度为 3 的 a,初始化为 1。

std::valarray< double > myArray(0,3)产生error: call to constructor of 'std::valarray<double>' is ambiguous.

我当然可以使用myArray(3)并添加一条注释,确认它已初始化为零,但根据我自己的理解,我希望有人能解释为什么这是模棱两可的——它是否以我错过的方式与另一个构造函数冲突?

4

1 回答 1

4

您的第三次调用与构造函数冲突valarray (const T* p, size_t n);。这是因为0它可以很容易地转换为 NULL 指针,就像它转换为 double 一样。您可以通过明确声明使用双精度来解决此问题:

std::valarray< double > myArray((double)0,3)
于 2014-09-10T14:30:48.840 回答