Gibt es ein Konstrukt wie Java, das Blöcke in C ++ initialisiert?

8

Ich habe in einigen Artikeln gelesen, dass es in Java etwas namens Initializing blocks gibt; wo wir einige Initialisierungszuweisungen durchführen können, wenn die Klasse geladen oder eine Instanz erstellt wird.

  

Abgesehen von Methoden und Konstruktoren sind Initialisierungsblöcke der dritte Platz in einem Java-Programm, in dem Operationen ausgeführt werden können.

%Vor%

Ich frage, ob es solch ein Paradigma in C ++ gibt? Danke.

    
Blood-HaZaRd 09.05.2012, 16:35
quelle

2 Antworten

4

Es muss darauf hingewiesen werden, dass es in Java zwei verschiedene Formen von Initialisierungsblöcken gibt. Der bare {...} -Block, ohne das Schlüsselwort static , ist nur ein bisschen Compiler-Swizzling - der Text im Block wird an die Front aller Konstruktoren angehängt, die definiert sind - es wird kein separates Code-Segment generiert. Ein Block, der static {... beginnt, ist andererseits ein statischer Initialisierungsblock und eine (halb-) richtige Prozedur an sich (benannt, nicht überraschend, "statisch").

Der static -Block wird nur einmal sofort (mit ein paar Vorbehalten) ausgeführt, nachdem die Klasse geladen wurde. Der nicht statische Initialisierer wird (aufgrund der Tatsache, dass er in die Konstruktoren kopiert wird) jedes Mal ausgeführt, wenn ein Konstruktor ausgeführt wird, und ist daher im Allgemeinen für statische Initialisierung ungeeignet.

    
Hot Licks 09.05.2012, 18:20
quelle
2

Kurz gesagt, C ++ hat kein direktes Äquivalent für dieses Java-Konstrukt.

Um ein ähnliches Verhalten zu erhalten, müssten Sie x und y aus den Konstruktoren von InitDemo setzen (was Sie auch in Java tun können).

    
NPE 09.05.2012 16:39
quelle

Tags und Links