Sagen wir, ich habe den folgenden Code in dem, was wir erwarten, der nächste C ++ - Standard zu werden:
%Vor%Würde dies den Standardkonstruktor von B aufrufen und 5 ausgeben und m_y = 25 setzen? Oder wird der Standardkonstruktor von B nicht ausgeführt und m_y nicht initialisiert?
Und wenn das letztere der Grund dafür ist, den B-Standardkonstruktor nicht aufzurufen? Es ist ziemlich klar, dass das A (int) B erbt nur A initialisiert und B in einem unbestimmten Zustand lässt. Warum sollte C ++ ein nicht definiertes Verhalten wählen, anstatt einfach den Standardkonstruktor von B () aufzurufen? Es vereitelt weitgehend den Zweck der Funktion Erben Konstruktoren.
Bearbeiten:
Vielleicht sollte das erlaubt sein:
%Vor% using A::A;
deklariert implizit B(int)
in der abgeleiteten Klasse. Das ist es.
Der Rest Ihres Programms sollte nicht wie erwartet funktionieren. Weil Sie B(int)
mit B(5)
aufrufen und m_y
nicht initialisiert bleibt.
Siehe dieses Beispiel von Bjarne Stroustrups Seite:
%Vor%Ein weiteres Beispiel aus demselben Link:
%Vor%Tags und Links c++ c++11 constructor