2010-12-07 12 views

Antwort

10

ist es garantiert?

Ja, es ist garantiert. Die Werte von S().i und S().j wären 0. () impliziert value initialization. (das bedeutet i und j wäre Null initialisiert, weil S ist eine Klasse ohne Konstruktor Benutzer definierten Standard)

+0

Wow !!!! Danke vielmals. – Bollinger

+0

Insbesondere wird das Hinzufügen von 'S() {}' (ein do-nothing benutzerdefinierter ctor) zu "struct S" dazu führen, dass "i" und "j" nicht initialisiert bleiben, was bedeutet, dass 'assert()' wahrscheinlich ist auslösen. –

+0

Yup right [.....] –

0

Von C++ Norm ISO/IEC 14882: 2003 (E) Punkt 3.6.2

Objekte mit statischer Speicherdauer (3.7.1) müssen auf Null initialisiert werden (8.5), bevor eine andere Initialisierung stattfindet.

Das ist also gültig, da beide Variablen Null initialisiert sind.

+3

Ich sehe hier kein Objekt mit statischer Speicherbelegung. Ausdruck 'S()' erzeugt ein ** temporäres Objekt ** lokal für den Geltungsbereich von 'assert()'. –

+0

Sie möchten Abschnitt 8.5, der den allgemeinen Fall der Initialisierung behandelt. – birryree

+0

Entschuldigung ... irgendwie dachte ich, dass er die globale Variable –

-1

Technisch, ja. Sie werden auf 0 initialisiert (zumindest unter einem Nicht-Debug-Build für die meisten Compiler. Der Visual Studio-Compiler initialisiert normalerweise nicht initialisierte Variablen mit einem bestimmten Muster in Debug-Builds) .

Wenn Sie jedoch in einer Codeüberprüfung sitzen, seien Sie nicht überrascht, wenn Sie dafür angebrüllt werden, Ihre Variablen nicht explizit zu initialisieren.

+0

verwendet, die garantiert null ist. Wegen der Klammern(). –