Неопределенность в явной инициализации valarray к нулю?

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) и добавьте комментарий, подтверждающий, что это инициализируется нулем, но для моего собственного понимания я надеялся, что кто-то может объяснить, почему это неоднозначно — противоречит ли это другому конструктору таким образом, который я пропустил?

1

Решение

Ваш третий вызов конфликтует с конструктором valarray (const T* p, size_t n);, Это потому что 0 так же легко конвертируется в NULL-указатель, как и в double. Вы можете исправить это, явно указав использовать double:

std::valarray< double > myArray((double)0,3)
4

Другие решения


По вопросам рекламы [email protected]