std::valarray< double > myArray(3)
产生 valarray
长度为 3,初始化为零。
std::valarray< double > myArray(1,3)
产生 valarray
长度为 3,初始化为 1。
std::valarray< double > myArray(0,3)
生产 error: call to constructor of 'std::valarray<double>' is ambiguous
.
我当然可以使用 myArray(3)
并添加一条评论,确认它已初始化为零,但就我自己的理解而言,我希望有人能解释为什么这是模棱两可的——它是否以我错过的方式与另一个构造函数发生冲突?
最佳答案
您的第三次调用与构造函数 valarray (const T* p, size_t n);
冲突。这是因为 0
可以很容易地转换为 NULL 指针,就像转换为 double 一样。您可以通过明确声明使用 double 来解决此问题:
std::valarray< double > myArray((double)0,3)
关于c++ - 将 valarray 显式初始化为零有歧义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25768068/