Heim  >  Artikel  >  Backend-Entwicklung  >  Behandelt Ihr C-Compiler „neue' Operatorausnahmen korrekt?

Behandelt Ihr C-Compiler „neue' Operatorausnahmen korrekt?

Linda Hamilton
Linda HamiltonOriginal
2024-11-19 05:33:02775Durchsuche

Does Your C   Compiler Correctly Handle `new` Operator Exceptions?

Neue auslösende Ausnahmen: Eine Prüfung der C-Standard-Konformität

Der C-Standard schreibt vor, dass der neue Operator eine std::bad_alloc-Ausnahme auslöst, wenn Die Speicherzuweisung schlägt fehl. Es wurden jedoch Bedenken hinsichtlich des Verhaltens bestimmter Compiler, insbesondere VC6, in dieser Hinsicht geäußert.

VC6: Breaking the Standard

Um die Gerüchte zu bestätigen, zeigt VC6 kein Verhalten -konformes Verhalten. Anstatt bei einem Zuordnungsfehler eine Ausnahme auszulösen, wird ein Wert von 0 (oder NULL) zurückgegeben. Diese Abweichung vom Standard stellt eine potenzielle Herausforderung für Entwickler dar, da nach jedem neuen Aufruf explizite Nullprüfungen erforderlich sind, was zu Problemen mit der Codeästhetik führt.

Eine benutzerdefinierte Problemumgehung für VC6

Um dieses Problem in VC6 zu mildern, bietet Microsoft eine Problemumgehung mit einem benutzerdefinierten neuen Handler. Diese Lösung ergänzt das Standardverhalten durch Ausnahmebehandlung.

Variables Verhalten in neueren MSVC-Compilern

In MSVC-Compilern ab Version 7.0 ist das Verhalten von neuen komplexer. Diese Compiler können basierend auf bestimmten Regeln, einschließlich der Verknüpfung mit der Objektdatei nothrownew.obj, standardmäßig entweder werfendes oder nicht werfendes Verhalten verwenden.

Konsistenz in MSVC 8.0 und höher

Mit der Veröffentlichung von MSVC 8.0 (VS2005) wurde ein konsistenterer Ansatz gewählt. Dieser Compiler löst standardmäßig immer neue Ausnahmen aus, es sei denn, er ist explizit mit nothrownew.obj verknüpft.

Verwendung von std::nothrow für nicht auslösendes Verhalten

Entwickler können diese neuen Ausnahmen explizit anfordern Geben Sie 0 zurück, anstatt eine Ausnahme auszulösen, indem Sie den Parameter std::nothrow verwenden. Dies ermöglicht eine Abwärtskompatibilität mit vorhandenem Code, der für das VC6-Verhalten geschrieben wurde.

Durch das Verständnis dieser Nuancen und die Implementierung geeigneter Problemumgehungen können Entwickler sicherstellen, dass ihr C-Code unabhängig vom verwendeten Compiler dem Standard entspricht.

Das obige ist der detaillierte Inhalt vonBehandelt Ihr C-Compiler „neue' Operatorausnahmen korrekt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn