C++的标准库容器有可以使用迭代器范围作为参数的构造函数。当输入容器的内容可转换为结果容器的内容,但不相同甚至容器不同的情况下,这会非常方便。构造函数重载允许在包含类的构造函数中进行此类型的转换,从而减少代码混乱。
因此,问题出现了:为什么Qt容器没有这种重载?这是一个疏忽还是设计选择背后有原因呢?
C++的标准库容器有可以使用迭代器范围作为参数的构造函数。当输入容器的内容可转换为结果容器的内容,但不相同甚至容器不同的情况下,这会非常方便。构造函数重载允许在包含类的构造函数中进行此类型的转换,从而减少代码混乱。
因此,问题出现了:为什么Qt容器没有这种重载?这是一个疏忽还是设计选择背后有原因呢?
Qt 容器中缺少 STL 容器的几个特性。您可以在 Marc Mutz 的博客 这里 中找到它们的详细评估。
我认为,计划是用 qCopy
在构造函数中替换使用迭代器范围的功能,http://doc.qt.io/qt-4.8/qtalgorithms.html。在 Qt 5 中,许多容器的 iterator
和 const_iterator
特性出现了,并且可能会在以后的版本中出现 QList 和 QVector 的适当构造函数(未公布,只是一种想法)。
#ifdef
掉了。然而,对于仅移动类型的支持设计存在缺陷:任何容器的operator[]
都需要发出代码以进行分离,如果引用计数大于1,则需要可用的复制构造函数进行分离。顺便说一句,关于异常支持,你可以永远这样说,不需要强制公开默认构造函数等等。 - peppeenable_if
来禁用复制操作,并可能提供所有非const操作的替代实现(使它们甚至不会发出detach()的代码,这在某些容器中是非模板化的代码...)。鉴于Qt容器在过去几年中受到的关注很少,为什么不直接使用STD呢? - peppe