簡體   English   中英

c++17 語言擴展和 std:c++17 標志

[英]c++17 language extension and std:c++17 flag

我對 Visual Studio 2017(版本 15.9.11)中的不同錯誤感到困惑:

'if constexpr' is a C++17 language extension

language feature 'structured bindings' requires compiler flag '/std:c++17'

我知道添加 /std:c++17 標志可以解決這些問題,但為什么會有兩條不同的消息? 語言擴展和編譯器標志要求有什么區別?

我對這件事更感興趣,因為我正在使用 Unreal Engine 4.24 編寫游戲,我可以使用“if constexpr”,但即使使用相同的編譯器,我也不能使用“結構化綁定”。

為什么?

if constexpr是來自 C++17 的非常有用的語言構造。 例如,在標准庫中實現許多優化非常方便。

因此,當 Visual Studio 15.3 最初實現if constexpr時,即使在 C++14 模式下編譯時,它也被廣泛用於其標准庫實現中。 但是由於大部分代碼都在頭文件中,就編譯器而言,它是源代碼的一部分,這意味着您也可以使用它。 為此,他們使用來自 C++14 的if constexpr發出警告而不是錯誤,這是他們在標題中使用#pragma禁用的警告。

但是,盡管 MSVC 的文檔將其稱為警告,但編譯器仍將其作為錯誤發出,可以抑制。

因此,這兩個條件之間的措辭差異很可能if constexpr “錯誤”被認為是“警告”這一事實,盡管默認情況下將其自身呈現為“錯誤”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM