c++ - 将 valarray 显式初始化为零有歧义吗?

标签 c++ initialization valarray

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/

相关文章:

c++ - OpenMP 任务和数据环境

c++ - 3 个级别的初始化列表

c++ - 使用 {0}、{0、} 进行数组初始化?

c++ - 关于C++中 vector 、 union 和指针的问题

C++ 函数返回/输入引用类型

c++ - 代码对象和可执行文件的区别

arrays - 初始化多维数组

c++ - 在什么意义上 valarray 没有别名?

C++ valarray 与 vector

c++ - `valarray` 是否能够利用 SIMD 支持?