По сути, вы правы, но инициализатор не должен рассматриваться отдельно от конструктора .Инициализатор является частью конструктора и вызывается перед основным телом конструктора.
Когда вы объявляете автоматическую переменную встроенного типа, это одновременно и определение, и объявление.Это объявление, потому что идентификатор привязан к типу, и это определение, потому что компилятор выделяет для него хранилище.
int var1; // declares/defines var of type int
int var2 = 0; // declares/defines a var of type int and initializes it to 0
Инициализатор устанавливает переменную с начальным значением, когда оно определено, но считается ранее определенныминициализатор.
int x = 5;
int y = 5;
int main()
{
int x = x; // x is undefined here not 5 because x refers to itself
int y[y];
int size = sizeof(y)/sizeof(int); // size is 5 (y[5]) since y isn't defined until after the enclosing bracket so y referred to the global y in the declaration.
}
Существуют некоторые переменные, которые должны быть инициализированы, однако, .Константы и ссылки.
То же самое с конструкторами.Точка, в которой были определены члены, находится прямо перед телом ctor.Это порядок, в котором члены и базы определяются при вызове конструктора.
- виртуальные базовые классы
- базовый класс
- члены - впорядок, в котором они были объявлены
- выполняется тело ctor
После выхода из тела конструктора все было инициализировано.
Если вы этого не сделаетеиспользуйте инициализатор, тогда вы можете предположить, что он уже определен при вводе тела ctor, но вы не можете предполагать, что он имеет какое-то конкретное значение.Опять же, константы и ссылки должны быть инициализированы в инициализаторе члена.