編譯器警告 C4984

'if constexpr' 是 C++17 語言延伸模組

備註

if constexpr編譯器在使用預設 C++14 標準編譯的程式碼中找到運算式。 從 C++17 標準開始指定此運算式。 如果您需要 C++11 或 C++14 相容性,則此運算式無法移植。

C4984 預設會以錯誤的形式發出,但它是隱藏的。 若要藉由將您的程式碼編譯為 C++17 來啟用此運算式,請使用 /std:c++17 模式或更新版本。 若要在 if constexpr 針對 C++14 編譯的程式碼中使用運算式做為 Microsoft 延伸模組,您可以隱藏、停用或變更錯誤訊息的警告層級。 您可以使用 /wd4984 來停用 C4984 或 /w N 4984 ,將它啟用為層級 N 警告,而不是錯誤。 或者,請在造成來源檔案中警告的行之前使用 #pragma warning(suppress:4984)

從 Visual Studio 2017 15.3 版開始,即可使用此警告。 如需如何停用特定編譯器版本或更新版本中引進的警告的相關資訊,請參閱 編譯器版本的 編譯器警告。

範例

此範例會產生 C4984,並示範修正方法:

// C4984.cpp
// compile with: cl /EHsc C4984.cpp
#include <iostream>

int main()
{
    constexpr bool compile_time = true;
    // Uncomment the following line or use /std:c++17 to fix
    // #pragma warning(suppress:4984)
    if constexpr (compile_time)
    {
        std::cout << "compile_time is true";
    }
    else
    {
        std::cout << "compile_time is false";
    }
}