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!