I for one would almost go as far as to say that initialisation list is always preferable over using the function body.
However there is one gotcha, the variables initialised in an initialisation list are actually initialised in the order that the variables are declared within the class, not merely in the order they appear in the initialisation list. Not knowing this can lead to writing incorrect code, where direct assignment statements would have worked.
It is also worth noting that there are some things for which the initialisation list is the only option (i.e references) and there are some things for which assignment statements are the only option (i.e. initialising an array).
Lastly, dare I blow your mind with function try blocks?!