gpt4 book ai didi

qt - 为什么像 QList 和 QVector 这样的 Qt 容器没有迭代器范围构造函数?

转载 作者:行者123 更新时间:2023-12-04 00:38:14 24 4
gpt4 key购买 nike

C++ 中的标准库容器具有采用迭代器范围的构造函数。当输入容器的内容可转换为但与结果容器中的内容不同,或者即使容器只是不同时,这很方便。构造函数重载允许这种类型的转换发生在周围类的构造函数中,从而减少代码中的困惑。

那么问题来了,为什么Qt容器没有这个重载呢?这种笨拙的设计选择背后是疏忽还是有原因?

最佳答案

除了“到目前为止还没有人实现它们”之外没有其他原因,因为 Qt 项目没有无限的开发带宽。

说到这些缺失的功能,您可以这样说:

  • 由于隐式共享,您不能在 Qt 容器中存储只能移动的类型;
  • 缺乏安置功能(以及它们即将推出的关联容器试用版);
  • 缺少右值重载函数(没有QList::push_back(T &&));
  • QList 在 STL 中没有对应项,并且是一个具有严重性能问题的非常奇怪的怪物。现在公认,它不应该成为 Qt 中随处可见的“良好的通用容器”;
  • 没有任何异常(exception)的安全保证;

等等。

最近有很多关于 Qt 容器与 STL 容器相比状态不佳的讨论(参见 this thread),以至于我们开始在 Qt 自己的实现中使用 STL 容器。

除非您有使用 Qt 的特定原因(例如,您需要将它们传递给 Qt-ish API,或者您喜欢/需要隐式共享等),否则如今 STL 容器比 Qt 容器要好得多。


更新:Qt 6 中的 QList 将成为一个合适的向量,而 QVector(在 Qt 6 中)将成为 QList 的别名。上面的一些评论将不再适用。我没有修改答案的其余部分,因为它仍然适用于 Qt 5.15。

关于qt - 为什么像 QList 和 QVector 这样的 Qt 容器没有迭代器范围构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38262041/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com