Вы неявно конвертируете 9
и 3
в A
.
Небольшой тест докажет это:
class A {
public:
int x,y;
explicit A(int a=0, int b=0) {
x=a;y=b;
}
};
Это приведет к ошибке компиляции.
Это означает, что ваш код преобразуется в:
A t[2] = {A(9),A(3)};
Поскольку, закомментировав конструктор преобразования (давайте назовем его так, хотя я не уверен в этом), он больше не будетвозможность конвертировать int
в A
.
Второй фрагмент инициализирует только первый элемент.
РЕДАКТИРОВАТЬ: Чтобы уточнить, попробуйте следующий тест:
int x[10] = {1,1,1};
Это будет инициализировать только первые 3 элемента массива.
Также, без конструктора преобразования, попробуйте следующее:
A t[4] = {1,1,2,2};
Первые 2 A
будутинициализируется.