2

extern キーワードは単にコンパイラを「ブラインド」するはずではありませんか? エラーがない理由が理解できないコードを次に示します。

struct A {
    int a;
};

class B {
    static A x;
public:
    void f() { x.a=0; }
};

extern A B::x; // not allocated.

main() {
    B z;
    z.f();
}

ご存知のように、静的メンバーは手動でインスタンス化する必要があります。ただし、 extern キーワードを追加しました。これは、実際には割り当てられていないことを意味します。正常にコンパイルされるのは非常に奇妙です!

4

1 に答える 1