4

次のコードは機能しますが、Visual C++ 2010 を使用する gcc 3.4.2 ではコンパイルされず、違法である可能性があると言われています。

int ar1[]{0,1,2,3,4,5,6,7,8,9},
    *ptr1 = ar1,
    ar2[]{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18},
    *ptr2 = ar2;

どうやら、それを機能させるにはいくつかの変更を加える必要があるようです (そのようなもの):

int ar1[]{0,1,2,3,4,5,6,7,8,9};
int *ptr1 = ar1;
int ar2[]{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18};
int *ptr2 = ar2;

そうですか?配列とポインタを一緒に宣言することはできませんか?

(コードは QT + gcc 4.8 で正常にコンパイルされます)

4

1 に答える 1

15

問題の宣言は、C++11 の初期化構文を使用しています。C++11 より前のコンパイラの観点からは、構文的に正しくありません。しかし、=それぞれの前に a を追加する{と、通常の完全に正当な C++98 宣言 (および C 宣言も同様) になります。

ポインタ宣言子と配列宣言子を混在させても、1 つの宣言で複数の宣言子を使用しても問題ありません。必要に応じて、そのミックスに関数宣言子を追加できます。唯一の制限は、そこに関数定義を埋め込むことができないことです。

于 2013-07-13T02:10:28.967 に答える