首页 > 解决方案 > 资格转换的歧义

问题描述

我想我要么误解了某些东西,要么标准中的某些东西可能模棱两可。这是关于资格转换的。

根据最新草案http://eel.is/c++draft/conv.qual#1

类型 T 的 cv 分解是 cvi 和 Pi 的序列,使得对于 n>0,T 是“cv0 P0 cv1 P1⋯cvn−1 Pn−1 cvn U”,

至于我对类型 T 的分解的理解:

using T1 = const char * const **;

可能正在关注

但由于没有说明分解应该朝哪个方向(IMO​​)也可以用另一种方式解释:

这将对以下句子http://eel.is/c++draft/conv.qual#3.3产生影响:

如果 cv1i 和 cv2i 不同,那么 const 在每个 cv2k 中,因为 0 < k < i。

因为对于第一种解释,对于 i = 1 或 2,句子永远不会被满足,而对于第二种解释,对于 i = 1 或 2,句子将是正确的。

我的第二个疑问是,如何解释这句话

如果 cv1i 和 cv2i 不同,那么 const 在每个 cv2k 中,因为 0 < k < i。

对于 i = 0 或 1。对于 i = 0 或 1,cv 集合是空的,因此我们可以说这个集合的所有 cv 都有 const,因为一切都没有,集合中没有元素,但我们也可以说没有元素有 const,因为集合中没有元素。

标准中是否有任何地方可以解释如何准确理解 cv 分解以及应该朝哪个方向发展?

标签: c++type-conversionconstantsvolatilequalifiers

解决方案


@MartinBonner 在问题的评论中给出了答案。

我没有注意到 U 旁边有 cvn,这意味着 constness分解是从最外层指针到最内层指针

(索引最大的 cv 将最接近 U 型)。


推荐阅读