繁体   English   中英

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

[英]Why are std::vector and std::valarray initializing constructors different?

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

如果我想用常数X初始化n元素的std::vector ,我这样做:

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

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

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

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

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

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

引用 Bjarne 自己的话:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM