conv.qual#1:
类型T
的 * 限定分解 * 是 cvi 和 Pi 的序列,使得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*
开头的东西怎么会是类型呢?
1条答案
按热度按时间7vux5j2d1#
cv_0 P_0 cv_1 P_1 ⋯ cv_n-1 P_n-1 cv_n U
并不意味着表示 type-id 的语法形式,例如const int**
。它表示在替换
U
、P
s和cv
s之后的类型的正式全文名称。正如注解所述,由type-id
const int**
形成的类型在形式上是“*pointer to pointer toconst
int
*”(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
中获得此正式名称。