Inicialización de miembros de datos estáticos

¿Por qué la inicialización de miembros de datos estáticos debe estar fuera de la clase?

class X
{
public:
      int normalValue = 5; //NSDMI
      static int i;
};

int X::i = 0;

¿Por qué el miembro de datos estáticos (aquí "i") es solo una declaración, no una definición?