Допустим, у меня есть следующий код, который, как мы ожидаем, станет следующим стандартом C ++:
int f(int x)
{
std::cout << x;
return x * x;
}
struct A
{
A(int x) : m_x(x) {}
int m_x;
};
struct B : A
{
using A::A;
B() : m_y(f(m_x)) {}
int m_y;
};
int main()
{
B(5);
}
Будет ли это вызывать конструктор по умолчанию для B, распечатывать 5 и устанавливать m_y = 25? Или конструктор B по умолчанию не запустится и m_y останется неинициализированным?
И если последнее, то каков смысл отказа от вызова конструктора B по умолчанию? Совершенно ясно, что A (int) B наследует только инициализирует A и оставляет B в неопределенном состоянии. Почему C ++ предпочел бы неопределенное поведение простому вызову конструктора по умолчанию для B ()? Это в значительной степени противоречит цели наследования конструкторов.
Изменить:
Возможно, это следует разрешить: есть идеи, как это исправить?