-1

当我使用螺旋规则时,我在 10 个螺旋步骤内对下面的线感到困惑。有更快的方法吗?

// compiles in VC++ 2010
const void * const ** const volatile ***  const **** _foo_; 

例如ptr 是一个指向指针的指针,它们都是指向指针的指针,它们都是 const void 但其中 2 个是 volatile void const

4

4 回答 4

13

cdecl 说

const void * const ** const volatile ***  const **** p

将 p 声明为指向指针的指针 指向 const 的指针 指向指向 const 的指针的指针 指向 const 的指针 指向 const 的指针 指向 const void 的指针

于 2012-08-13T13:55:05.820 回答
8

这很容易用螺旋规则!

在此处输入图像描述

:-P

于 2012-08-13T14:12:03.837 回答
7

使用指针和引用声明,您只需从右到左阅读:

ptr是指向指针的指针,指向指针的指针,指向指针的指针,const指向指针的指针,指向指针的const volatile指针,指向未知类型对象的const指针。const

如果您遵循在第一个类型说明符(ie )之后而不是在它之前(ie)放置任何constvolatile限定符的准则,那么您可以从右到左一致地阅读;否则,当你到达左手端时,你有时会打嗝。void const *const void *

螺旋“规则”有时对涉及数组或函数的声明很有用,其中声明的名称不是声明中的最后一件事。在这种情况下,名称后面没有任何内容,它退化为从右到左阅读。

于 2012-08-13T13:59:59.127 回答
5

那是因为没有螺旋规则。基本上,您首先在右侧处理操作数,然后在左侧处理,在两种情况下都向外处理,并尊重括号。并且 cv 限定符通常限定它们左边的内容。由于这个声明在右边没有操作数,它只是从右到左: 指向指针的指针 指向 const 的指针 指向 const 的指针 指向 const 的指针 volatile 指向 const 的指针 指向 (const) void 的指针。最后一个 const 是因为最后一个 const 左边没有任何东西,所以我们必须将声明视为void const,而不是const void. 除此之外,如果您忘记了被误导的螺旋,那么声明应该不会造成任何问题。

于 2012-08-13T14:05:18.697 回答