Неявный вызов конструктора копирования

#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"; }

то получите ожидаемую вами строку.

→ Ссылка