比较类型概述
注意:Qt 的比较类型提供了与 C++20 标准相同功能的特征。它们存在的原因是让该功能也能在 C++17 构建中使用。在 C++20 构建中,它们默认转换为 واستد عناصر النوعية `std
`،从而使其完全可互换。因此,我们建议您在您的项目中能够使用 C++20 时,优先使用 C++ 标准类型。Qt 的比较类型将在 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 | 否 | 否 | 是 |
最强的比较类型,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 表示,如名称所暗示的,是一种部分排序。它允许两个值可能不可比较的可能性,从而导致一个 无序 状态。此外,等效的值可能仍然是可区分的。一个实际的例子是两个浮点值的比较,用 NaN(非数字)进行比较将得到一个无序的结果。另一个例子是比较两个 QOperatingSystemVersion 对象。比较不同操作系统(如 Android 和 Windows)的版本将产生一个无序的结果。
使用这些比较类型可以增强定义关系的表达性。此外,它们是 C++17 实现三重比较的基本组件。
另请参阅 Qt::strong_ordering、Qt::weak_ordering 和 Qt::partial_ordering。
© 2024 The Qt Company Ltd. 本文档中包含的文档贡献的版权属于各自的版权所有者。本提供的文档是根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 许可的。Qt 和相应的标志是 The Qt Company Ltd. 在芬兰和/或其他国家/地区的商标。所有其他商标均为各自所有者的财产。