c++ 关于conv.qual#1的说明

qf9go6mv  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(87)

conv.qual#1:
类型T的 * 限定分解 * 是 cviPi 的序列,使得T

  • n* ≥ 0时,*  

其中每个 cvi 是一组cv限定符([basic.type.qualifier]),每个 Pi 是“指向”([dcl.ptr]),[...]
[示例1: 由type-id const int **表示的类型有三个限定分解,将U作为“int“,作为“指向const int的指针“,以及作为“指向指向const int的指针“。- 结束示例]
我不明白““cv 0 P0 cv1 P1 cv_n-1 Pn-1 cvn U”for n ≥ 0”的描述如何与示例兼容。 
我的意思是,这个例子是针对T == const int**的,并且可以说存在一个可能的分解,U是int。这怎么可能const int**T)如何写成 * cv 0 P0 cv1 P1 * cv_n-1 Pn-1 cvn* int
但更一般地说,我不明白为什么U在结尾,而不是在开始,* cv 0 P0 cv1 P1,* cvn-1 Pn-1 cvn* U_。以const * volatile * const*开头的东西怎么会是类型呢?

7vux5j2d

7vux5j2d1#

cv_0 P_0 cv_1 P_1 ⋯ cv_n-1 P_n-1 cv_n U并不意味着表示 type-id 的语法形式,例如const int**
它表示在替换UP s和cv s之后的类型的正式全文名称。
正如注解所述,由type-id const int**形成的类型在形式上是“*pointer to pointer to constint *”(int const**将形成相同的类型)。
通过选择n = 2并将U替换为int,将cv_2替换为const,将P_1替换为“pointer to”,将P_0替换为“pointer to”,将剩余的cv替换为``,可以从cv_0 P_0 cv_1 P_1 ⋯ cv_n-1 P_n-1 cv_n U中获得此正式名称。

相关问题