c++17语言扩展和std:c++17标志。

问题描述 投票:0回答:1

我在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标志可以解决这些问题,但为什么会有两个不同的信息?语言扩展和编译器标志要求之间有什么区别?

我对这个事情比较感兴趣,因为我在虚幻引擎4.24中写一个游戏,我可以使用'if constexpr',但是我不能使用'structured bindings',即使我使用的是同一个编译器。

为什么会这样?

visual-studio unreal-engine4 compiler-flags structured-bindings if-constexpr
1个回答
3
投票

if constexpr 是来自C++17的一个非常有用的语言结构。 例如,它对于在标准库中实现许多优化是非常方便的。

因此,当Visual Studio 15.3最初实现了 "结构化绑定 "时,它是一个非常有用的语言结构。if constexpr在他们的标准库实现中,即使是在C++14模式下编译,也大量使用了这些代码。但是由于这些代码大部分都在头文件中,而头文件对于编译器来说是源代码的一部分,这意味着 也能使用它。为了让这一点,他们做了 使用 if constexpr 来自C++14的警告 而不是一个错误,他们在头文件中用 #pragmas.

然而,尽管MSVC的文件 呼叫 是一个警告,它是由编译器发出的。而这一点是可以压制的。

因此,这两个条件在措辞上的差异很可能是由于以下事实造成的。if constexpr "error "被认为是一个 "警告",尽管默认情况下它本身呈现为一个 "错误"。

© www.soinside.com 2019 - 2024. All rights reserved.