2008-05-05

scope jumble

What's the value of X::i?

int g() { return 23;}
struct X {
    static int g() { return 42; }
    static int i;
};
int X::i = g();

The answer is: 42 - says ISO C++ in section 9.4.2. The initialization of the static data member is implicit in the scope of the struct. Oh, yes! The standard's example is even more fun:

int g();
struct X {
        static int g();
};
struct Y : X {
        static int i;
};
int Y::i = g();         // equivalent to Y::g();
Note that X could be definied in another header file than g and that the initialization normaly is in a cc-file. Find, Rover, find!

Thank you, Roker


Posted by Alexander Bernauer | Permanent Link | Categories: C++