Erben von Konstruktoren in C ++ 0x

8

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%     
Clinton 23.03.2011, 10:07
quelle

1 Antwort

4

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%     
Nawaz 23.03.2011, 10:14
quelle

Tags und Links