为什么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::vector
和std::valarray
标准化时,标准委员会在决定填料建造商参数的顺序时,是否提供了技术原因或一些设计依据?
因为它们不是来自同一个地方:vector
来自STL库,而valarray
不是(我还没能找到它的来源,但似乎与Fortran有很强的联系(。
引用Bjarne本人的话:
大多数时候,这些组件的工作都在与其他人的工作隔离。没有整体设计或设计理念
[…]
基本上,委员会未能包含"委员会设计",因此尽管STL体现了清晰的理念和连贯的风格其他部件受损。每个都代表自己的风格哲学,和一些(如string
(同时管理呈现几个。
(摘自《在现实世界中为现实世界发展语言:C++1991-2006》(
所以我想说,基本原理是传统的C++;事情就是这样,为了标准化而改变它们会破坏很多东西,所以让我们不要管它了"。
相关文章:
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 初始化具有非默认构造函数的std::数组项的更好方法
- 编译器如何区分std::vector的构造函数
- 为什么std::vector和std::valarray初始化构造函数不同
- std::make_shared和protected/private构造函数
- std::vector::p ush_back() 不会在 MSVC 上编译具有已删除移动构造函数的对象
- 仅包含可移动 std::map 的类的移动构造函数不起作用
- std::ofstream 作为类成员删除复制构造函数?
- std::string 构造函数如何处理固定大小的 char[]?
- 从具有按值捕获的 lambda 移动构造 std::函数时,移动构造函数调用两次
- 在构造函数中使用可变参数初始化 std::tuple
- 真的没有来自 std::string_view 的 std::string 的显式构造函数吗?
- 为什么 std::memmove 中联合的默认非平凡移动构造函数C++?
- 如何在构造函数参数中初始化"std::set"?
- 如何为 std::vector 分配内存,然后稍后为某些元素调用构造函数?
- 创建一个没有复制构造函数的类的 std::vector 的 std::vector
- 构造函数采用std::string_view与std::string并移动
- C++ - std::构造函数中的矢量初始化
- 关于 std::bitset 构造函数的几个问题?
- 对 std 构造函数的调用是否需要限定