Я хотел бы знать, есть ли разница между этим кодом:
class Foo{
private:
int a = 0;
public:
Foo(){}
}
и
class Foo{
private:
int a;
public:
Foo(): a(0) {}
}
И если да, то что должно быть предпочтительнее? Я знаю, что предпочтительнее использовать список инициализаторов, чем назначать в теле конструктора, но что относительно списка инициализаторов против прямой инициализации в объявлении поля (для примитивных типов, по крайней мере, как это имеет место здесь)?
Кроме того, что касается нижеприведенного случая:
class Foo{
private:
int a = 0;
public:
Foo(){}
Foo(int i): a(i) {}
}
Когда вызывается нестандартный конструктор: "а" инициализируется дважды, сначала до 0, затем до "i" или непосредственно к "i"?