一个类型的多个cv分解

Jan*_*šil 10 c++ type-systems pointers language-lawyer

[conv.qual] / 1中的示例说该类型const int **具有两个cv分解。

类型T的cv分解是cv_i和P_i的序列,使得T为

“ cv_0 P_0 cv_1 P_1?cv_ {n?1} P_ {n?1} cv_n U”

对于n?0,其中每个cv_i是一组cv限定词([basic.type.qualifier]),每个P_i是“指向”的指针([dcl.ptr]),“指向类型为Ci的类的成员的指针”([dcl.mptr]),“ N_i数组”或“的未知范围的数组”([dcl.array])。如果P_i指定一个数组,则元素类型上的cv限定符cv_ {i + 1}也被视为该数组的cv限定符cv_i。[?示例:由type-id表示的类型const int **具有两个cv分解,以U为“ int”和“指向的指针const int。结束示例]在T的最长cv分解中,第一个cv限定词之后的n元组,​​即cv_1,cv_2,…,cv_n,被称为T的cv限定签名。

为什么类型没有三个分解,第三个分解为n = 0,cv_0为空,U =“指向”的指针const int

Lan*_*yer 5

为什么类型没有三个分解

它有,但这个例子与规范部分有点不同步。规范性措辞最近发生了变化,此提交替换了 cv 分解定义中的条件 from n > 0to n ? 0

解决示例中问题的 PR 在这里