/ / C ++ 11: Unterschied zwischen Test * test = neuer Test; und Test * test = neuer Test (); - c ++ 11, Konstruktor, Initialisierung, neuer Operator

C ++ 11: Unterschied zwischen Test * test = neuer Test; und Test * test = neuer Test (); - c ++ 11, Konstruktor, Initialisierung, neuer Operator

Gibt es unter C ++ 11, wenn "Test" eine gewöhnliche Klasse ist, einen Unterschied zwischen:

Test* test = new Test;
//and
Test* test = new Test();

Hinweis: Dies ist die gleiche Frage Machen die Klammern hinter dem Typnamen einen Unterschied zu neuen? nochmal gefragt, weil der alte Thread vor C ++ 11 steht, während ich gerne fragen würde ob da ein Unterschied unter C ++ 11 Standard ist.

Die akzeptierte Antwort dieser Frage lautet:

  • In C ++ 1998 gibt es 2 Arten der Initialisierung: Null und Standard In
  • C ++ 2003 ein 3. Typ der Initialisierung, Wert Initialisierung wurde hinzugefügt.

Ich verstehe, dass C ++ 11 nur 2 Initialisierung, Standard und Wert hat. Also ich denke, die Antwort ist ein bisschen anders?

Antworten:

1 für die Antwort № 1

C ++ 11 hat Null-Initialisierung, Standard-Initialisierung, Wert-Initialisierung (8.5 / 5, / 6 und / 7, entsprechend), Kopier-Initialisierung (8.5 / 14), Direkt-Initialisierung (8.5 / 15) und Listeninitialisierung (8.5.4).

In Gedenken an new bestimmtes:

5.3.4 / 15 EIN neuer Ausdruck das erstellt ein Objekt vom Typ T initialisiert das Objekt wie folgt:

- Wenn die Neuinitialisierer entfällt, das Objekt ist default-initialisiert (8.5); Wenn keine Initialisierung durchgeführt wird, hat das Objekt einen unbestimmten Wert.

- Ansonsten der Neuinitialisierer wird gemäß den Initialisierungsregeln von 8.5 für die direkte Initialisierung interpretiert.