std::valarray< double > myArray(3)
производит valarray
длины 3, инициализируется до нуля.
std::valarray< double > myArray(1,3)
производит valarray
длиной 3, инициализируется в единицу.
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)