Неявный вызов конструктора копирования
#include <iostream>
struct A {
A() { std::cout << 'A'; }
A(const A&) { std::cout << 'a'; }
};
struct B : A {
B() { std::cout << 'B'; }
B(const B&) { std::cout << 'b'; }
};
int main() {
B b1;
B b2{b1};
}
Почему программа выводит
ABAb
а не ожидаемое мной
ABab
Почему разработчики стандарта решили именно такое поведение установить?
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Раз вы не указали конструктор для базового класса A явно:
B(const B&) { std::cout << "b"; }
компилятор вызывает конструктор по умолчанию.
Если напишете
B(const B&b):A(b) { std::cout << "b"; }
то получите ожидаемую вами строку.