我是C ++和Qt的新手,但我非常擅长C#/ Java。
关键是我喜欢跨平台,但我对Qt感到困惑。是不是std::vector
已经跨平台,Qt是否提供了与非跨平台事物相当的东西?
File
和QFile
有何不同?
链接会很好,谢谢:)
答案 0 :(得分:42)
这篇文章很好。它将Qt模板库与标准模板库进行比较:
希望,您会发现文章中列出的所有差异很有趣。
编辑:
以下是我感兴趣的内容:
像他说的那样,没有明确的赢家。但仍然阅读这篇文章会让很多事情变得清晰。在不知道另一个的情况下,更好地了解其中的差异。我认为最大 QTL的优势在于它具有 相同的实施(包括 所有操作系统上的二进制兼容性 Qt支持。一些STL 实施可能低于标准 谈到表演或他们 可能缺少功能。一些 平台甚至没有STL!上 另一方面,STL更多 可定制的,并在其中提供 整个头文件... 就像我说的, 没有明确的赢家。
答案 1 :(得分:13)
QVector类是引用计数,适合在不复制的情况下共享。 Qt提供了许多与STL容器相对应的容器。一个描述这些内容的文档,内容有一些解释和一些基本原理:
答案 2 :(得分:9)
来自over here:
Qt起源于C ++和 标准库不是 标准化或得到良好支持 编译器。因此它重复了一个 很多东西现在都在 标准库,如容器 和类型信息。最 显然,他们修改了C ++ 语言提供信号,这样 Qt类不能轻易使用 非Qt课程。
答案 3 :(得分:1)
C ++的std::vector
是跨平台的,因为它是C ++标准的一部分。每个符合C ++标准的编译器都必须提供它。
我不熟悉Qt,但我确实看到了in the docs:
注意:此课程中的所有功能都是 折返。
也可能(推测)QVector类更容易集成以容纳以std::vector
为中心的以Qt为中心的对象。再一次,我不熟悉Qt所以你必须自己决定。
根据经验(有许多例外情况),我倾向于使用std::vector
,除非我有一个令人信服的理由使用某些特定于库的容器类。
答案 4 :(得分:1)
我与QTL
的不良体验与QTL
没有提出任何例外有关;这使得跟踪和修复关键错误变得更加困难。此外,STL
实现与编译器密切相关,因为库的某些部分需要特定于编译器的语言扩展。这意味着STL
实施通常可以胜过QTL
,这需要是可移植的,因此无法从所述扩展中受益。调试问题对我来说至关重要。
答案 5 :(得分:1)
由于没有答案,Qt容器(包括QVector
)通常具有更完整的API,与std::vector
相比,它确实提供了一定程度的额外便利并减少了冗长性。
QVector
并未真正集成到Qt API中,该角色是由不合适的QList
承担的,因此,使用QVector
以获得更好的整体兼容性并不是一个很强的论点Qt API。请注意,随着QList
的缺点越来越为人们所认识,这对于Qt 6可能会有所改变。
话虽如此,如果您已经在应用程序上依靠Qt了,那么为方便起见,使用QVector
是很有意义的。我假设没有人会为一个或两个容器添加像Qt这样a肿的依赖项。 QVector
是高效且稳定的执行者,它将在Qt支持的任何平台上正常运行。
另一方面,如果您想创建一个与框架无关的核心逻辑API,则最好在标准C ++中进行开发,这样您就可以获得与特定项目无关的可移植性GUI框架,因此您将来可以根据需要轻松地将其迁移到其他框架。