指向指针的常量转换

4
我正在阅读一本名为 C++ Gotchas 的书,其中解释了 const 指针之间的转换问题,但我对以下规则有些困惑:

如果存在类型 T 和整数 n > 0,使得两个指针类型 T1 和 T2 相似,则:

T1 是 cv 1 , 0 指向 cv 1,1 指向 ... cv 1,n−1 指向 cv 1,n T

而且,

T2 是 cv 2,0 指向 cv 2,1 指向 ... cv 2,n−1 指向 cv 2,n T

其中每个 cvi,j 可以是 const、volatile、const volatile 或无。

有人能指引我到正确的方向,让我了解cv 1,0cv 1,1在上述序列中分别代表什么吗?这本书没有帮助我理解。但我确信这与C++语言有关。

1个回答

4

cv i,j表示2*(n+1)个占位符的集合:

对于每个 i j 的组合,其中 1 <= i <= 2 0 <= j <= n ,占位符 cv i, j 代表三个说明符 const,volatile,const volatile 或什么也没有。

换句话说,书中节选的意思是,如果可以找到这些占位符和类型T,使得两个语句(“T1是...”)被满足,则称T1T2为“相似”。

例如,T1 = const int* T2 = int*是相似的,因为它们符合节选中的两个语句,如果选择:

  • T = int n = 1
  • cv1,0 = {nothing} cv1,1 = const
  • cv2,0 = {nothing} cv2,1 = {nothing}

只需插入占位符即可看到:

const int*是指向const int的指针

int*是指向int的指针


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接