【问题标题】:Why is the Visual Studio Community 2017 C++ standard C++98?为什么 Visual Studio Community 2017 C++ 标准是 C++98?
【发布时间】:2018-09-23 11:09:53
【问题描述】:

昨天我升级到最新的VS Community 2017(上一个是去年安装的),想检查一下C++标准。所以我运行下面的代码来检查它,结果我有 C++98:

#include<iostream>
using namespace std;
int main()
{
    cout << __cplusplus << endl;
    system("pause");
}

哪些输出

199711

为什么我没有最新的 C++ 标准?

【问题讨论】:

  • 尝试更改相关项目属性。
  • 您应该使用/std:c++17/permissive- 进行构建。
  • 不要相信__cplusplus。 VS2017 很好地支持 C++17 - 你只需要传递正确的命令行选项来启用它。

标签: c++ visual-studio standards


【解决方案1】:

默认情况下,__cplusplus 的值对于当前版本的 Visual Studio 暂时故意不符合标准,以避免破坏现有代码。这并不意味着您的编译器不支持任何 C++11(或更新的)功能。

引用MSVC now correctly reports __cplusplus:

/Zc:__cplusplus

您需要使用/Zc:__cplusplus 开关进行编译才能看到__cplusplus 宏的更新值。我们尝试默认更新宏,发现当我们更改__cplusplus 的值时,很多代码都无法正确编译。对于 19.xx 系列中的所有次要版本的 MSVC,我们将继续要求使用 /Zc:__cplusplus 开关。

【讨论】:

  • 成功!我按照将 /Zc:__cplusplus 设置为启用的说明进行操作,我看到我有 c++14 (201402)。这是执行此操作的指南:docs.microsoft.com/en-us/cpp/build/reference/…
  • 如果编译器执行的实际标准是关注的焦点,而不是该宏的值,您可以在解决方案资源管理器中右键单击您的项目。并选择Properties。然后展开左侧的C/C++ 菜单,选择Language 子菜单。在那里你可以选择++14++17++latest
  • 即使将 C++ 设置为特定的 C++ 标准,编译器也可能不支持该标准的所有功能。这是一个feature test 程序,它可以帮助辨别一个编译器是否支持所需的核心或库功能,如果用作检查,__cplusplus 可能会产生误导。
猜你喜欢
  • 2020-08-04
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-28
  • 2020-06-26
相关资源
最近更新 更多