4

これをクラスでデータ メンバーとして読んだ場合、static参照は式全体 (配列自体) を参照しているのか、それとも配列の要素を参照しているのか?

static const int* array[100];

配列はarray静的ですか、それとも配列に 100 が含まれていstatic const int pointersますか?

前者だと思いますが、言葉の意味の変化の仕方は、表現のどこにあるconstかによっても意味が変わるのではないかと思います。static上記では、ポインタarrayconstまだ配列の要素は ではないので、配列のポインタ constではないでしょうかstatic

4

2 に答える 2

4

C ++ 11 7.1.1ストレージクラス指定子:
§5

静的指定子は、変数と関数の名前、および匿名ユニオン(9.5)にのみ適用できます。ブロック内に静的関数宣言を含めることも、静的関数パラメーターを含めることもできません。変数の宣言で使用される静的指定子は、変数がスレッドストレージ期間(3.7.2)を持つことを宣言するthread_local指定子が伴わない限り、変数が静的ストレージ期間(3.7.1)を持つことを宣言します。静的指定子は、クラスメンバーの宣言で使用できます。9.4はその効果を説明しています。静的指定子で宣言された名前のリンクについては、3.5を参照してください。

では、コード例で何を宣言していますか?

static const int* array[100];

明らかに、あなたは変数を宣言しているarrayので、staticはに適用されarrayます。ストレージクラス指定子cv-qualifiers
と 混同しないでください。前者は宣言されている変数に適用され、後者はに適用されます。

于 2013-01-20T07:35:24.327 に答える
2

static、この例では、宣言する変数externregister適用します。array

したがって、定数整数への100個のポインターの静的配列を取得します。

于 2013-01-20T07:30:10.637 に答える