首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c++17语言扩展和std:c++17标志

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

Stack Overflow用户
提问于 2020-06-05 13:59:27
回答 1查看 715关注 0票数 0

我对Visual 2017 (15.9.11版)中的不同错误感到困惑:

代码语言:javascript
复制
'if constexpr' is a C++17 language extension

代码语言:javascript
复制
language feature 'structured bindings' requires compiler flag '/std:c++17'

我知道添加/std:c++17标志可以解决这些问题,但是为什么有两种不同的消息呢?语言扩展和编译器标志需求之间有什么区别?

我对这件事更感兴趣,因为我在虚幻引擎4.24中写了一个游戏,我可以使用‘constexpr',但我不能使用’结构化绑定‘,即使我使用的是同一个编译器。

为什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-05 14:10:37

if constexpr是来自C++17的一个非常有用的langauge构造,它非常方便地实现,例如,标准库中的许多优化。

因此,当VisualStudio15.3最初实现if constexpr时,即使在以C++14模式编译时,也可以在其标准库实现中广泛使用它。但是,由于大部分代码都在头中,就编译器而言,它是源代码的一部分,这意味着您也可以使用它。考虑到这一点,他们创建了来自C++14的警告而不是一个错误,这是一个警告,在他们的标题中禁用了#pragma的警告。

然而,尽管MSVC的文档称它是一个警告,但它是由编译器作为错误发出的,这是可以被抑制的。

因此,这两个条件之间的措词差异很可能是由于if constexpr“错误”被认为是一种“警告”这一事实,尽管在默认情况下它被称为“错误”。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62217082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档