4

私はこれに精通していませんでした。Googleで検索しましたが、答えが見つかりませんでした。だから、私の質問を投稿してください。次のプログラムを試してみました:

#include <iostream>
class test
{
    static char a[];
    static int b[];
};
int main()
{
    test t;
}

MSVS 2010 および g++ 4.8.1 では、警告なしで正常にコンパイルされます。また、C++14 コンパイラでも問題なくコンパイルされます。(ここでライブデモを参照してください ) では、C++ 標準はこれについてどこで述べているのでしょうか? テスト クラスの char 配列の宣言から static キーワードを削除すると、g++ でコマンド ライン オプションISO C++ forbids zero size arrayを使用し、MSVS 2010 コンパイラでオプションを使用すると、コンパイラでエラーが発生します。だから、私の質問は次のとおりです。-pedantic-errors/Zaerror C2133: 'test::a' : unknown size

1) 未知のサイズの静的配列の使用は何ですか?

2)後でそれらのサイズを指定してその配列要素にアクセスするにはどうすればよいですか? 私は本当に混乱しています。

3) static キーワードを削除するとコンパイル エラーが発生するのはなぜですか?

誰かが簡単な例を使って説明してくれるとよいでしょう。

ありがとう。

4

1 に答える 1

4

コンパイラはサイズを気にしません。これは静的フィールドの単なる宣言なので、配列があることを伝えるだけで十分です。この時点でサイズは問題ありません。

この時点では、静的フィールドの宣言しかありません。これらの配列を使用することはなく、コンパイラは許容的です...文句はありません。

ただし、それらを使用する場合は、定義が必要になります。そこでサイズを省略すると、前に見たのと同様のエラー メッセージが表示されます。

特別なことは何も起こっていません。

于 2015-08-16T06:53:08.950 に答える