I always read initialization list is preferred over constructor body for variable initialization. I also know that static variable can be initialized outside the class when defiling them.
But my question is why we can't initialize static variable in constructor initialization list , but we can in constructor body
class sample
{
    static int i;
public:
    sample (int ii=20) { i=ii;}
    void show()
    {
        cout << i << endl;
    }
};
int sample::i=12;
int main()
{
    sample s;
    s.show();
    return 0;
}
works fine and prints 20. but i replace constructor with
sample (int ii=20): i(ii){}
It gives error. Why?
 
     
     
    