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

one*_*ree 19 c++ vector c++-standard-library language-lawyer valarray

我刚刚被以下内容灼伤。

如果我要初始化std::vectorn一个常量元素X我这样做:

std::vector<double> v(n, X);
Run Code Online (Sandbox Code Playgroud)

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

std::valarray<double> va(X, n);
Run Code Online (Sandbox Code Playgroud)

在我看来,这就像一个任意的“陷阱”。

是否有技术原因或者决定有关的填充构造函数的参数的顺序时,当由标准委员会提供的一些设计原理std::vector,并std::valarray进行了规范?

mol*_*ilo 21

因为它们不是来自同一个地方:vector来自 STL 库,并且valarray不是(我一直无法找出它来自哪里,但似乎与 Fortran 有很强的联系)。

引用 Bjarne 本人的话:

大多数情况下,这些组件中的每一个的工作都是独立于其他组件的工作进行的。没有整体设计或设计理念。
[...]
基本上,委员会未能包含“委员会设计”,因此虽然 STL 反映了清晰的理念和连贯的风格,但大多数其他组件都受到了影响。每一种都代表了自己的风格和哲学,有些(例如string)设法同时呈现了几种。

(摘自“在现实世界中发展语言:C++ 1991-2006”。)

所以我想说的是传统 C++ 的基本原理,“事情就是这样,为了标准化而改变它们会破坏很多东西,所以让我们先放过自己吧”。