Для простых старых данных (POD) это имеет небольшое преимущество, но как только вы начинаете использовать ссылки или составлять классы, это имеет значение:
class Foo {
Bar bar;
public:
// construct bar from x
Foo(int x) : bar(x) { }
};
против
Foo::Foo(int x)
{
// bar is default-constructed; how do we "re-construct" it from x?
bar = x; // requires operator=(int) on bar; even if that's available,
// time is wasted default-constructing bar
}
Иногда у вас даже не будет способа «перестроить» объект после его создания, поскольку класс может не поддерживать сеттеры или operator=
.const
члены, безусловно, не могут быть "восстановлены" или сброшены:
class FooWithConstBar {
const Bar bar;
public:
Foo(int x) {
// bar is cast in stone for the lifetime of this Foo object
}
};
Редактировать : спасибо @Vitus за указание на проблему со ссылками.