スパイラルルールを使用すると、10 スパイラルステップ以内の線の下で混乱します。より速い方法はありますか?
// compiles in VC++ 2010
const void * const ** const volatile *** const **** _foo_;
ptrなどはポインターへのポインターへのポインターであり、それらはすべて const void ですが、そのうちの 2 つは volatile void const です
const void * const ** const volatile *** const **** p
pをポインタからポインタへのポインタからconstへのポインタへのポインタconstへのポインタへのポインタconstへのポインタへのポインタとして宣言する
これはスパイラルルールで簡単!
:-P
ポインターと参照の宣言を使用すると、右から左に読み取るだけです。
ptr
は、ポインタへのポインタへのポインタへのポインタへのポインタへのポインタへのポインタへのポインタへのポインタへのポインタへのポインタへのconst
ポインタへのポインタへのポインタへのポインタへのポインタへのconst volatile
ポインタへのconst
ポインタへconst
の未知の型のオブジェクトです。
const
anyまたはvolatile
修飾子を最初の型指定子の前(つまりvoid const *
) ではなく後(つまり )に置くというガイドラインに従えば、一貫して右から左に読むことができます。そうしないと、左端に到達したときにわずかなしゃっくりが発生することがあります。const void *
らせん状の「ルール」は、宣言されている名前が宣言の最後にない、配列または関数を含む宣言に役立つ場合があります。この場合、名前の後に何もないため、右から左への読み取りに退化します。
それはスパイラルルールがないからです。基本的に、オペランドは最初に右で処理し、次に左で処理し、どちらの場合も外向きに処理し、括弧を尊重します。cv-qualifiers は通常、それらの左側にあるものを修飾します。この宣言には右側にオペランドがないため、単純に右から左へ: ポインタへのポインタへのポインタへのポインタへのポインタ const へのポインタへのポインタへのポインタへのポインタ const volatile へのポインタへのポインタ const へのポインタへのポインタ (const) void へのポインタ。最後の const は、最後の const の左側に何もないためです。そのため、宣言を .void const
ではなく , であるかのように扱う必要がありconst void
ます。それ以外は、見当違いのスパイラルを忘れていれば、宣言は問題を引き起こさないはずです。