Frage

Beim Lesen dieses Wikipedia-Artikel von einem des repliers auf die folgende Frage hingewiesen:

C ++ Kopierkonstruktor, Provisorien und kopieren Semantik

Ich kam in dieser Zeile

  

Je nach Compiler und die Einstellungen des Compilers, das daraus resultierende Programm kann eine der folgenden Ausgänge angezeigt werden:

Ist dies nicht für undefiniertes Verhalten qualifizieren? Ich weiß, dass der Artikel sagt Depending on the compiler and settings aber ich will nur diese löschen.

War es hilfreich?

Lösung

Nein, es ist nicht undefiniert Verhalten. Undefiniertes Verhalten eine spezifische Definition in der Norm hat (meist: „Verhalten, wie zum Beispiel bei der Verwendung eines fehlerhaften Programmkonstrukt oder fehlerhafter Daten, für die diese Internationale Norm legt keine Anforderungen ergeben könnte“) In diesem Fall ist das Verhalten nicht spezifiziert, aber nicht undefiniert.

Der Unterschied besteht darin, dass jede Ausführung von irgendetwas mit undefiniertem Verhalten macht das Verhalten des Programms nicht definiert (das heißt alles passieren kann). Mit diesem besonderen unspecified Verhalten kann nur eine von zwei Dingen passieren: Entweder ist die Copykonstruktor ausgeführt wird, oder es funktioniert nicht

.

Andere Tipps

Nein. Das Verhalten ist so definiert einer der Ausgänge auf der Liste sein. Undefiniertes Verhalten beinhaltet Dämonen der Nase fliegen aus.

Siehe auch: Nasal Demons

undefiniertes Verhalten ist ganz anders als Implementierung definiert Verhalten , das ist das, was hier beteiligt ist.

Hängt was Sie von nicht definiert bedeuten. Ich glaube, was andere hier gesagt haben - durch die Definition der Standards Verwendung dokumentieren. Aber ich weiß auch, dass, wenn jemand sagt, „entweder dieser oder jene, ich sage dir nicht, welche“ Ich denke, es als nicht definiertes Verhalten.

Es ist keine große Sache, aber, wie es nie einen Fehler verursachen sollte. Wenn Sie bestimmte Methoden definieren, werden Sie erwartet, dass sie folgende besondere Konventionen definieren -. Es zwischen Ihnen eine Art implizite Vertrag ist, der Compiler und der Menschen wird der Code verwenden und pflegen

In diesem Fall, ob Sie ein Kopie-Konstrukt etc oder das optimierte Verhalten erhalten, wird der Effekt erwartet das gleiche zu sein - der Anrufer erhält den gewünschten Wert. Wenn Ihr Copykonstruktor druckt „Hallo Welt!“ oder hat andere unangemessene Nebenwirkungen, ist es nicht das erwartete Verhalten für einen Konstruktor Implementierung, so dass der Fehler bei Ihnen für das Brechen des Vertrages ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top