Почему конструкторы инициализации std::vector и std::valarray отличаются?

Я только что был сожжен следующим.

Если я хочу инициализировать std::vector из n элементов константой X, я делаю это:

std::vector<double> v(n, X);

Но если мне нужно инициализировать std::valarray из n элементов с константой X, мне нужно поменять местами размер и инициализирующую константу:

std::valarray<double> va(X, n);

Мне это кажется произвольным «попался».

Есть ли техническая причина или какое-то конструктивное обоснование, предоставленное комитетом по стандартам при принятии решения о порядке параметров конструктора заполнения, когда std::vector и std::valarray были стандартизированы?


person one_two_three    schedule 08.07.2020    source источник
comment
std::valarray немного экзот среди контейнеров, полагаю, многое было бы иначе, если бы его добавили сегодня. Я помню ответ, объясняющий некоторую предысторию, давайте посмотрим, смогу ли я ее найти.   -  person 463035818_is_not_a_number    schedule 08.07.2020
comment
@Scheff точно, imho этот ответ хорошо объясняет, почему std::valarray никогда не был так полезен, как предполагалось   -  person 463035818_is_not_a_number    schedule 08.07.2020


Ответы (1)


Потому что они не берутся из одного и того же места: vector происходит из библиотеки STL, а valarray — нет (мне не удалось выяснить, откуда оно берется, но, похоже, есть тесные связи с Fortran).

Цитируя самого Бьерна:

Большую часть времени работа над каждым из этих компонентов велась изолированно от работы над остальными. Не было общего дизайна или философии дизайна.
[...]
По сути, комитет не смог включить «проектирование комитетом», поэтому, хотя STL отражает четкую философию и последовательный стиль, большинство других компоненты пострадали. Каждый представляет свой собственный стиль и философию, а некоторые (например, string) умудряются одновременно представлять несколько.

(Из книги «Развитие языка в реальном мире и для него: C++ 1991–2006».)

Так что я бы сказал, что логика традиционна для C++, вещи такие, какие они есть, и изменение их ради стандартизации многое сломает, так что давайте оставим это в покое.

person molbdnilo    schedule 08.07.2020