Implementierung definiert Verhalten und undefiniertes Verhalten
Die Standard-C++ ist sehr spezifisch über die Auswirkungen der verschiedenen Konstrukte, insbesondere sollten Sie immer bewusst sein, diese Kategorien von Mühe:
Undefiniertes Verhalten bedeutet, dass keinerlei Garantien gegeben werden. Der Code könnte funktionieren, oder er könnte Ihre Festplatte oder make demons fly out your nose in Brand setzen. Was die C++ - Sprache betrifft, könnte absolut alles passieren. In der Praxis bedeutet dies, dass Sie einen nicht behebbaren Fehler haben. Wenn das passiert, können Sie nicht wirklich irgendetwas über Ihre Anwendung vertrauen (weil eine der Auswirkungen dieses undefinierten Verhaltens gerade gewesen sein könnte, den Speicher zu verschwenden, der vom Rest Ihrer Anwendung benutzt wird).Es ist nicht erforderlich, dass es konsistent ist. Wenn Sie also das Programm zweimal ausführen, erhalten Sie möglicherweise andere Ergebnisse. Es kann von den Mondphasen abhängen, von der Farbe des Hemdes, das du trägst, oder von absolut allem anderen.
Nicht spezifiziertes Verhalten bedeutet, dass das Programm muss etwas vernünftig und konsistent, aber es ist nicht erforderlich, Dokument dies.
Implementationsdefiniertes Verhalten ist ähnlich wie unspezifiziert, muss aber auch von den Compiler-Schreibern dokumentiert werden. Ein Beispiel dafür ist das Ergebnis einer reinterpret_cast
. in der Regel, ändert es einfach den Typ eines Zeigers, ohne die Adresse zu ändern, aber das Mapping ist tatsächlich implementation-defined, so könnte ein Compiler Karte auf eine völlig andere Adresse, solange es diese Wahl dokumentiert. Ein anderes Beispiel ist die Größe eines int. Die C++ Standard es egal, ob es 2, 4 oder 8 Bytes, aber es muss die für alle diese
jedoch gemeinsam
Compiler dokumentiert ist, dass sie am besten vermieden sind. Wenn möglich, bleiben Sie bei einem Verhalten, das zu 100% vom C++ - Standard selbst angegeben wird. Auf diese Weise ist die Portabilität garantiert.
Sie müssen sich oft auch auf einige implementierungsdefinierte Verhaltensweisen verlassen. Es kann unvermeidlich sein, aber Sie sollten immer noch darauf achten und sich bewusst sein, dass Sie sich auf etwas verlassen, das sich zwischen verschiedenen Compilern ändern kann.
Undefiniertes Verhalten, andererseits sollte immer vermieden werden. Im Allgemeinen sollten Sie einfach davon ausgehen, dass Ihr Programm auf die eine oder andere Weise explodiert.
Wenn Sie sich dafür entscheiden, die Bearbeitungen anderer Personen rückgängig zu machen, stellen Sie bitte sicher, dass Ihre Rechtschreibung, Interpunktion und Grammatik perfekt sind. Rollback-Bearbeitungen, die eine wesentliche Verbesserung gegenüber dem ursprünglichen Text darstellen, sind sinnlos. –