Anmerkung
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen, dich anzumelden oder die Verzeichnisse zu wechseln.
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen , die Verzeichnisse zu wechseln.
Der C++17-Standard erstellt throw() einen Alias für noexcept, entfernt throw()type-listund throw(...), und ermöglicht die Aufnahme noexceptbestimmter Typen . Diese Änderung kann zu einer Reihe von Quellkompatibilitätsproblemen im Code führen, der C++14 oder einer früheren Version entspricht. Die /Zc:noexceptTypes Option gibt die Konformität mit dem C++17-Standard an. /Zc:noexceptTypes- ermöglicht das Verhalten von C++14 und früheren Versionen, wenn Code im C++17-Modus kompiliert wird.
Syntax
/Zc:noexceptTypes[-]
Hinweise
Wenn die /Zc:noexceptTypes Option angegeben wird, entspricht der Compiler dem C++17-Standard und behandelt throw() als Alias für noexcept, entfernt und entfernt und throw(...)ermöglicht es bestimmten Typen, einzuschließennoexceptthrow(type-list). Die /Zc:noexceptTypes Option ist nur verfügbar, wenn /std:c++17 oder höher aktiviert ist. /Zc:noexceptTypes ist standardmäßig aktiviert, um den ISO C++17- und höher-Standards zu entsprechen. Die /permissive- Option wirkt sich nicht auf /Zc:noexceptTypes. Deaktivieren Sie diese Option, indem Sie angeben /Zc:noexceptTypes- , dass das Verhalten von noexcept C++14 wiederhergestellt werden soll, wenn /std:c++17 oder höher angegeben wird.
Ab Visual Studio 2017, Version 15.5, diagnostiziert der C++-Compiler mehr übereinstimmende Ausnahmespezifikationen in Deklarationen im C++17-Modus oder wenn Sie die /permissive- Option angeben.
In diesem Beispiel wird gezeigt, wie sich Deklarationen mit einem Ausnahmebezeichner verhalten, wenn die /Zc:noexceptTypes Option festgelegt oder deaktiviert wird. Um das Verhalten beim Festlegen anzuzeigen, kompilieren Sie mithilfe cl /EHsc /W4 noexceptTypes.cppvon . Um das Verhalten beim Deaktivieren anzuzeigen, kompilieren Sie es mithilfe von cl /EHsc /W4 /Zc:noexceptTypes- noexceptTypes.cpp.
// noexceptTypes.cpp
// Compile by using: cl /EHsc /W4 noexceptTypes.cpp
// Compile by using: cl /EHsc /W4 /Zc:noexceptTypes- noexceptTypes.cpp
void f() throw(); // equivalent to void f() noexcept;
void f() { } // warning C5043
void g() throw(...); // warning C5040
struct A
{
virtual void f() throw();
};
struct B : A
{
virtual void f() { } // error C2694
};
Bei der Kompilierung mithilfe der Standardeinstellung /Zc:noexceptTypesgeneriert das Beispiel die aufgelisteten Warnungen. Verwenden Sie zum Aktualisieren des Codes stattdessen Folgendes:
void f() noexcept;
void f() noexcept { }
void g() noexcept(false);
struct A
{
virtual void f() noexcept;
};
struct B : A
{
virtual void f() noexcept { }
};
Weitere Informationen über Konformitätsprobleme in Visual C++ finden Sie unter Nonstandard Behavior.
So legen Sie diese Compileroption in der Visual Studio-Entwicklungsumgebung fest
Öffnen Sie das Dialogfeld Eigenschaftenseiten des Projekts. Weitere Informationen erhalten Sie unter Set C++ compiler and build properties in Visual Studio (Festlegen der Compiler- und Buildeigenschaften (C++) in Visual Studio).
Klicken Sie auf der Eigenschaftenseite auf Konfigurationseigenschaften>C/C++>Befehlszeile.
Ändern Sie die Eigenschaft "Zusätzliche Optionen", um sie einzuschließen
/Zc:noexceptTypesoder/Zc:noexceptTypes-auszuwählen, und wählen Sie dann "OK" aus.
Siehe auch
/Zc (Konformität)
noexcept
Ausnahmespezifikationen (Auslösen)