为什么 std::vector 和 std::valarray 初始化构造函数不同?

Why are std::vector and std::valarray initializing constructors different?

我刚刚被下面的东西烫伤了。

如果我想用常量 X 初始化 std::vectorn 元素,我这样做:

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

但是如果我需要用常量 X 初始化 std::valarrayn 元素,我需要交换大小和初始化常量:

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

这在我看来像是一个任意的 'gotcha'。

std::vectorstd::valarray 被标准化时,在决定填充构造函数参数的顺序时,是否有技术原因或标准委员会提供的一些设计原理?

因为它们不是来自同一个地方:vector来自STL库,而valarray不是(我没能找到它的来源, 但似乎与 Fortran 有很强的联系)。

引用 Bjarne 自己的话:

Most of the time, work on each of these components progressed in isolation from work on the others. There was no overall design or design philosophy.
[...]
Basically, the committee failed to contain “design by committee” so whereas the STL reflects a clear philosophy and coherent style, most of the other components suffered. Each represents its own style and philosophy, and some (such as string) manage simultaneously to present several.

(来自“在现实世界中并为现实世界发展一种语言:C++ 1991-2006”。)

所以我会说基本原理是传统的 C++,“事情就是这样,为了标准化而改变它们会破坏很多东西,所以我们不要管它”。