1

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)、これがゼロに初期化されていることを確認するコメントを使用して追加することはできますが、私自身の理解のために、これがあいまいである理由を誰かが説明できることを望んでいました.

4

1 に答える 1

4

3 番目の呼び出しは、コンストラクターと競合しvalarray (const T* p, size_t n);ます。これは0、 double への変換と同じくらい簡単に NULL ポインターへの変換が可能なためです。double を使用するように明示的に指定することで、これを修正できます。

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