-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へのポインタへのポインタとして宣言する

于 2012-08-13T13:55:05.820 に答える
8

これはスパイラルルールで簡単!

ここに画像の説明を入力

:-P

于 2012-08-13T14:12:03.837 に答える
7

ポインターと参照の宣言を使用すると、右から左に読み取るだけです。

ptrは、ポインタへのポインタへのポインタへのポインタへのポインタへのポインタへのポインタへのポインタへのポインタへのポインタへのポインタへのconstポインタへのポインタへのポインタへのポインタへのポインタへのconst volatileポインタへのconstポインタへconstの未知の型のオブジェクトです。

constanyまたはvolatile修飾子最初の型指定子の(つまりvoid const *) ではなく後(つまり )に置くというガイドラインに従えば、一貫して右から左に読むことができます。そうしないと、左端に到達したときにわずかなしゃっくりが発生することがあります。const void *

らせん状の「ルール」は、宣言されている名前が宣言の最後にない、配列または関数を含む宣言に役立つ場合があります。この場合、名前の後に何もないため、右から左への読み取りに退化します。

于 2012-08-13T13:59:59.127 に答える
5

それはスパイラルルールがないからです。基本的に、オペランドは最初に右で処理し、次に左で処理し、どちらの場合も外向きに処理し、括弧を尊重します。cv-qualifiers は通常、それらの左側にあるものを修飾します。この宣言には右側にオペランドがないため、単純に右から左へ: ポインタへのポインタへのポインタへのポインタへのポインタ const へのポインタへのポインタへのポインタへのポインタ const volatile へのポインタへのポインタ const へのポインタへのポインタ (const) void へのポインタ。最後の const は、最後の const の左側に何もないためです。そのため、宣言を .void constではなく , であるかのように扱う必要がありconst voidます。それ以外は、見当違いのスパイラルを忘れていれば、宣言は問題を引き起こさないはずです。

于 2012-08-13T14:05:18.697 に答える