C ++标准版本与Visual Studio版本

时间:2018-12-20 05:03:48

标签: c++ visual-studio

/std (Specify Language Standard Version) option is available in Visual Studio 2017 and later。这是否意味着Visual Studio的早期版本使用特定版本的C ++标准,并且与gcc / clang不同,VS版本与编译器提供的默认C ++标准版本之间存在1:1映射?

2 个答案:

答案 0 :(得分:2)

有一篇博客文章Standards version switches in the compiler,其中介绍了该功能的介绍以及MSVC以前的用途:

  

传统上,我们将以默认模式发布该编译器,该模式结合了跨越C ++语言的多个版本的功能,例如C ++ 98,C ++ 03,C ++ 11,C ++ 14等,以及一致性改进漏洞修复程序。这可能导致难以同时升级到更新更好的编译器,同时又无法向前移动代码的情况。非常感谢您提供给我们有关一致性改进和新功能工作的宝贵反馈。由于C ++标准委员会正在为新的C ++版本做准备,因此我们已主动帮助您在构建系统或编译器命令行中陈述您喜欢的C ++版本,同时更新到下一版本的Visual C ++。

     

在Visual Studio 2015的第一版和VS 2015 Update 3之间,Visual C ++在遵循C ++标准方面取得了重大进展。我们已修复了constexpr,改进的表达式SFINAE支持,初始化列表评估,变量模板和更多。我们的标准库实现与C ++ 14后标准草案采用的功能保持同步。而且我们已经实现了委员会目前正在考虑的一些主要功能,包括C ++模块和协程。我们希望您从这一切中受益,同时也希望您在升级到此新更新时按自己的进度使用这些功能。

     

此更新中实现的所有后C ++ 14功能默认情况下处于关闭状态;保留先前版本中包含的内容,以避免引起构建。

     

...

答案 1 :(得分:1)

根据我收集到的信息/std:c++17相当于clang / gcc -std=c++17参数。

某些版本的msvc可能无法完全实现某些版本的iso C ++。

  

根据Visual C ++编译器版本或更新级别,当您指定/ std:c ++ 14或/ std:c +时,某些C ++ 14或C ++ 17功能可能无法完全实现或完全符合要求。 +17个选项。例如,Visual C ++ 2017 RTM编译器不完全支持符合C ++ 14的constexpr,表达式SFINAE或两阶段名称查找。

(cf:https://docs.microsoft.com/en-us/cpp/build/reference/std-specify-language-standard-version?view=vs-2017

因此,这不完全是“ VS版本与编译器提供的默认C ++标准版本之间的1:1映射”。

您不应该依赖于此。 相反,您应该阅读所用VS版本的文档。

希望这可以回答您的问题。