当我使用螺旋规则时,我在10个螺旋步骤内的下线处感到困惑。有更快的方法吗?
// compiles in VC++ 2010
const void * const ** const volatile *** const **** _foo_;
例如 ptr是一个指向指向指针的指针的指针,所有这些指针都是const void但其中有2个是volatile void
答案 0 :(得分:13)
const void * const ** const volatile *** const **** p
声明p作为指向指向指向指针的指针指向const指针指向指向const指针的指针指向指向const指针的const指针
答案 1 :(得分:8)
螺旋规则很容易!
: - P
答案 2 :(得分:7)
使用指针和引用声明,您只需从右向左阅读:
ptr
是一个指向指针的指针的指针,指针指向指向指向指向指针的const
指针的指针的指针的const volatile
指针const
指向未知类型的const
对象。
如果您遵循在之后放置任何const
或volatile
限定符第一个类型说明符(即void const *
)的指导原则,而不是之前 / em> it(即const void *
),那么你可以从右到左一致地阅读;否则,当你到达左手边时,你有时会有轻微的打嗝。
螺旋式"规则"偶尔对涉及数组或函数的声明很有用,其中声明的名称不是声明中的最后一个。在这种情况下,名称后面没有任何内容,它会退化为从右向左阅读。
答案 3 :(得分:5)
那是因为没有螺旋规则。基本上,您处理操作数
在右边,然后在左边,在两种情况下向外工作,和
尊重括号。而且cv-qualifiers通常符合条件
他们的左边。由于此声明右侧没有操作数,
它只是从右到左:指向指向指针的指针的指针
const指针指向指向const指针的指针的指针
to const指向(const)void的指针。最后一个const是因为最后的
const左边没有任何东西,所以我们必须对待
声明好像是void const
,而不是const void
。其他
除此之外,声明应该没有问题,如果你忘了
关于被误导的螺旋。