/Zc:noexceptTypes (C++17無規則)

C++17 標準會建立 throw() 、 移除)type-listthrow(throw(...)noexcept別名,並允許包含特定類型。noexcept 這項變更可能會導致程序代碼中符合C++14 或更早版本的許多來源相容性問題。 選項 /Zc:noexceptTypes 會指定符合 C++17 標準。 /Zc:noexceptTypes- 當程式代碼以 C++17 模式編譯時,允許C++14 和更早的行為。

語法

/Zc:noexceptTypes[-]

備註

/Zc:noexceptTypes指定 選項時,編譯程式符合 C++17 標準,並將 視為 throw() 、 移除)type-listthrow(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 開發環境中設定這個編譯器選項

  1. 開啟專案的 [屬性頁] 對話方塊。 如需詳細資料,請參閱在 Visual Studio 中設定 C ++ 編譯器和組建屬性

  2. 選取 [組態屬性]>[C/C++]>[命令列] 屬性頁。

  3. 修改 [其他選項] 屬性以包含 /Zc:noexceptTypes/Zc:noexceptTypes- ,然後選擇 [確定]。

另請參閱

/Zc (一致性)
noexcept
例外狀況規格 (throw)