19

我刚刚被下面的东西烧了。

如果我想用一个常量初始化一个元素,std::vector我这样做:nX

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

但是如果我需要用一个常量初始化一个元素,std::valarray我需要交换大小和初始化常量:nX

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

在我看来,这似乎是一个任意的“陷阱”。

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

4

1 回答 1

21

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

引用 Bjarne 自己的话:

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

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

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

于 2020-07-08T11:36:34.187 回答