Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Standard C++17 tworzy throw() alias dla noexcept, usuwa throw(type-list) i throw(...), i umożliwia niektórym typom dołączanie noexceptelementów . Ta zmiana może spowodować szereg problemów ze zgodnością źródła w kodzie zgodnym z językiem C++14 lub starszym. Opcja /Zc:noexceptTypes określa zgodność ze standardem C++17. /Zc:noexceptTypes- umożliwia zachowanie języka C++14 i starszego podczas kompilowania kodu w trybie C++17.
Składnia
/Zc:noexceptTypes[-]
Uwagi
Po określeniu /Zc:noexceptTypes opcji kompilator jest zgodny ze standardem C++17 i traktuje throw() go jako alias dla noexceptelementu , usuwa throw()type-listi throw(...)zezwala na uwzględnienie noexceptniektórych typów. Opcja /Zc:noexceptTypes jest dostępna tylko wtedy, gdy /std:c++17 jest włączona lub nowsza. /Zc:noexceptTypes jest domyślnie włączona zgodnie ze standardami ISO C++17 i nowszymi. Opcja /permissive- nie ma wpływu na /Zc:noexceptTypes. Wyłącz tę opcję, określając/Zc:noexceptTypes-, aby przywrócić zachowanie języka C++14 w przypadku /std:c++17 określenia lub nowszegonoexcept.
Począwszy od programu Visual Studio 2017 w wersji 15.5, kompilator języka C++ diagnozuje bardziej niezgodne specyfikacje wyjątków w deklaracjach w trybie C++17 lub po określeniu /permissive- opcji.
W tym przykładzie pokazano, jak deklaracje z specyfikatorem wyjątku zachowują się, gdy opcja jest ustawiona /Zc:noexceptTypes lub wyłączona. Aby pokazać zachowanie podczas ustawiania, skompiluj przy użyciu polecenia cl /EHsc /W4 noexceptTypes.cpp. Aby pokazać zachowanie po wyłączeniu, skompiluj przy użyciu polecenia 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
};
Podczas kompilowania przy użyciu ustawienia /Zc:noexceptTypesdomyślnego przykład generuje wyświetlone ostrzeżenia. Aby zaktualizować kod, użyj następującego polecenia:
void f() noexcept;
void f() noexcept { }
void g() noexcept(false);
struct A
{
virtual void f() noexcept;
};
struct B : A
{
virtual void f() noexcept { }
};
Aby uzyskać więcej informacji na temat problemów ze zgodnością w programie Visual C++, zobacz Zachowanie niezgodne.
Aby ustawić tę opcję kompilatora w środowisku programowania Visual Studio
Otwórz okno dialogowe Strony właściwości projektu. Aby uzyskać szczegółowe informacje, zobacz Set C++ compiler and build properties in Visual Studio (Ustawianie właściwości kompilatora języka C++ i kompilowania w programie Visual Studio).
Wybierz stronę Właściwości>konfiguracji C/C++>Wiersza polecenia.
Zmodyfikuj właściwość Opcje dodatkowe, aby uwzględnić
/Zc:noexceptTypeslub/Zc:noexceptTypes-, a następnie wybierz przycisk OK.