比较类型概述
注意:Qt 的 比较类型提供了与 C++20 标准中对应类型等效的功能。它们存在的唯一目的是让 C++17 构建环境也能使用这些功能。 在 C++20 构建中,它们会与 `std ` 类型之间进行隐式转换,因此完全可以互换使用。因此,如果您的项目已支持 C++20,我们建议您在代码中优先使用 C++ 标准类型。Qt XML 比较类型将在 Qt 7 中被移除。
Qt 提供了多种用于三元比较的比较类型,这些类型均可与零字面量进行比较。要使用这些比较类型,您需要包含<QtCompare> 头文件。这些比较类型根据其顺序进行分类,顺序是一个用于描述元素排列或排名的数学概念。提供了以下类别:
| C++ 类型 | Qt 类型 | 严格 | 总和 | 示例 |
|---|---|---|---|---|
| std::strong_ordering | Qt::strong_ordering | 是 | 是 | 整数类型、区分大小写的字符串、QDate 、QTime |
| std::weak_ordering | Qt::weak_ordering | 否 | 是 | 不区分大小写的字符串、无序关联容器、QDateTime |
| std::partial_ordering | Qt::partial_ordering | 否 | 否 | 浮点类型,QOperatingSystemVersion ,QVariant |
最强的比较类型Qt::strong_ordering 表示一种严格的总序。它要求任意两个元素之间具有可比较性,即相等意味着可互换。换言之,等价的值无法相互区分。 一个实际的例子是两个字符串的区分大小写比较。例如,比较值"Qt" 和"Qt" 时,结果为Qt::strong_ordering::equal 。这两个值无法区分,且对它们执行的所有确定性操作都会产生相同的结果。
Qt::weak_ordering 表示全序。虽然任意两个值仍需可比较,但等价的值可能具有可区分性。此处的典型例子就是两个字符串的不区分大小写的比较。 例如,在比较值"Qt" 和"qt" 时,两者包含相同的字母但表示形式不同。此比较的结果为Qt::weak_ordering::equivalent ,但实际上并非Equal 。另一个例子是QDateTime ,它可以用当地时间或任何其他时区(包括 UTC)来表示某个特定时刻。尽管它们的time() 甚至有时date() 可能不同,但这些不同的表示形式是等价的。
Qt::partial_ordering 正如其名,它表示一种偏序关系。它允许两个值可能不可比,从而导致unordered 状态。此外,等价的值仍可能具有可区分性。一个实际例子是比较两个浮点数值,若与NaN(非数值)进行比较,则会产生无序的结果。 另一个例子是两个 `QOperatingSystemVersion ` 对象的比较。比较两个不同操作系统(如 Android 和 Windows)的版本时,会产生无序结果。
利用这些比较类型可以增强定义关系时的表达能力。此外,它们还是实现 C++17 三路比较的基本组成部分。
另请参阅 Qt::strong_ordering 、Qt::weak_ordering 以及Qt::partial_ordering 。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.