В обоих случаях этот оператор определяет b1 и копирует-инициализирует его из инициализированного значением временного B
объекта.
B b1 = B();
Когда B
не имеет объявленного пользователем конструктора, инициализация значения приводит к тому, что вызов членов B
будет value-initalized , и для простого типы, такие как int
, это означает инициализация нуля .
Когда B
имеет объявленный пользователем конструктор, инициализирующее значение пытается вызвать конструктор по умолчанию. Если члены x
и y
не перечислены в списке инициализатора конструктора, они остаются неинициализированными.
B b2;
В функциях локальные объекты типа POD без инициализатора остаются неинициализированными. Если вы не определяете конструктор для B
, это POD-класс, поэтому он применяется, и значения b2.x
и b2.y
имеют неопределенные значения.
Если объект относится к типу класса, отличному от POD, то он инициализируется по умолчанию , но если это вызывает конструктор, который оставляет его члены неинициализированными, то это не имеет значения.