0

今日は、 c 構造体と c++ 構造体の振る舞いに少し驚きました。

fun.cpp: http://ideone.com/5VLPC

struct nod
{
    static int i;
};

int main()
{

    return 0;  
}

上記のプログラムは完全に機能します。

しかし、

同じプログラムをC環境で実行すると、次のエラーが発生します。

prog.c:3: error: expected specifier-qualifier-list before ‘static’

こちらをご覧ください: http://ideone.com/2JRlF

なぜそうなのですか?

4

3 に答える 3

7

C++ では、構造体はデフォルトの可視性がpublic. したがって、C では、構造体はデータの集合体にすぎず、スタンドアロン型として認識される可能性があるという事実について何も知りません。

C++ の構造体とクラスの違いも参照してください。

于 2012-06-21T13:12:42.167 に答える
4

各C++クラスにはクラス名前空間があるため、その静的データメンバーを、クラス名前空間の外部から、およびその内部でnod::i単純に参照できます。iCには名前空間スコープがなく、C構造体の「中に」コードがないため、名前空間でグローバルを非表示にしたり、独自のスコープで修飾されていない名前でグローバルを参照したりする方法はありません。したがって、Cでは静的データメンバーと呼ばれるものをC++で使用する動機はありませんでした。

ただやってくださいint nod_i;

于 2012-06-21T13:14:07.087 に答える
3

staticin Cは、内部リンケージの意味のみを持ちます。C++structの astructまたは aのように C- を考えないでください。classこれは単なるアグリゲーターであり、OOP コンストラクトではありません。

C にはクラスがないため、この の使用にstaticは意味がありません。

于 2012-06-21T13:12:29.967 に答える