/Zc:noexceptTypes
(C++17無規則)
C++17 標準會建立 throw()
、 移除)
type-list
throw(
和 throw(...)
的noexcept
別名,並允許包含特定類型。noexcept
這項變更可能會導致程序代碼中符合C++14 或更早版本的許多來源相容性問題。 選項 /Zc:noexceptTypes
會指定符合 C++17 標準。 /Zc:noexceptTypes-
當程式代碼以 C++17 模式編譯時,允許C++14 和更早的行為。
語法
/Zc:noexceptTypes
[-
]
備註
/Zc:noexceptTypes
指定 選項時,編譯程式符合 C++17 標準,並將 視為 throw()
、 移除)
type-list
throw(
和 throw(...)
的別名noexcept
,並允許特定類型包含 。noexcept
/Zc:noexceptTypes
只有在或更新版本啟用時/std:c++17
,才能使用此選項。 /Zc:noexceptTypes
默認會啟用,以符合 ISO C++17 和更新版本標準。 選項 /permissive-
不會影響 /Zc:noexceptTypes
。 藉由指定 /Zc:noexceptTypes-
還原為指定或更新版本的 C++14 行為noexcept
/std:c++17
,以關閉此選項。
從 Visual Studio 2017 15.5 版開始,C++編譯程式會在 C++17 模式的宣告中診斷出更多不相符的例外狀況規格,或當您指定 /permissive-
選項時。
此範例示範當選項設定或停用時 /Zc:noexceptTypes
,具有例外狀況規範的宣告如何運作。 若要在設定時顯示行為,請使用 cl /EHsc /W4 noexceptTypes.cpp
編譯。 若要在停用時顯示行為,請使用 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
};
使用預設設定 /Zc:noexceptTypes
編譯時,此範例會產生列出的警告。 若要更新您的程式代碼,請改用下列命令:
void f() noexcept;
void f() noexcept { }
void g() noexcept(false);
struct A
{
virtual void f() noexcept;
};
struct B : A
{
virtual void f() noexcept { }
};
如需 Visual C++ 中一致性問題的詳細資訊,請參閱 Nonstandard Behavior。
在 Visual Studio 開發環境中設定這個編譯器選項
開啟專案的 [屬性頁] 對話方塊。 如需詳細資料,請參閱在 Visual Studio 中設定 C ++ 編譯器和組建屬性。
選取 [組態屬性]>[C/C++]>[命令列] 屬性頁。
修改 [其他選項] 屬性以包含
/Zc:noexceptTypes
或/Zc:noexceptTypes-
,然後選擇 [確定]。