首页 > 解决方案 > 为什么 C++ 标准为 cv 限定符定义部分排序?

问题描述

C++20 标准(在 N4892 上检查)指出:

cv 限定符有一个偏序,因此可以说一个类型比另一个类型更具有 cv 限定。表 13 显示了构成此排序的关系。

6.8.4.5。

使用表 13:

no cv-qualifier < const
no cv-qualifier < volatile
no cv-qualifier < const volatile
const           < const volatile
volatile        < const volatile

尽管定义非常清晰易懂,但我想知道它为什么存在。我在标准中找不到另一个使用这种顺序的段落(我可能错过了一些东西!)。Cppreference有同一个表,但也没有说明它的用途。

为什么存在这种偏序?

标签: c++constantslanguage-lawyervolatile

解决方案


只需在标准文档中搜索“more cv-qualified”即可。会有很多比赛。也许是最明显的例子:

char* pointer1;
...
const char* pointer2 = pointer1; // OK because it's more cv-qualified

在我看来,如果您正在寻找常识,只需考虑“const”而不是“cv”。


推荐阅读