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?