为什么 std::vector 和 std::valarray 初始化构造函数不同?
Why are std::vector and std::valarray initializing constructors different?
我刚刚被下面的东西烫伤了。
如果我想用常量 X
初始化 std::vector
个 n
元素,我这样做:
std::vector<double> v(n, X);
但是如果我需要用常量 X
初始化 std::valarray
个 n
元素,我需要交换大小和初始化常量:
std::valarray<double> va(X, n);
这在我看来像是一个任意的 'gotcha'。
当 std::vector
和 std::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++,“事情就是这样,为了标准化而改变它们会破坏很多东西,所以我们不要管它”。
我刚刚被下面的东西烫伤了。
如果我想用常量 X
初始化 std::vector
个 n
元素,我这样做:
std::vector<double> v(n, X);
但是如果我需要用常量 X
初始化 std::valarray
个 n
元素,我需要交换大小和初始化常量:
std::valarray<double> va(X, n);
这在我看来像是一个任意的 'gotcha'。
当 std::vector
和 std::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 asstring
) manage simultaneously to present several.
(来自“在现实世界中并为现实世界发展一种语言:C++ 1991-2006”。)
所以我会说基本原理是传统的 C++,“事情就是这样,为了标准化而改变它们会破坏很多东西,所以我们不要管它”。