繁体   English   中英

如何在 Visual Studio 2013 中更改 C++ 标准

[英]How to change c++ standard in Visual Studio 2013

我一直在关注 Bjarne Stroustrup 的书的C++ 编程和原理第二版

我的问题是,在他的书中 Bjarne 使用了 C++11 标准中的一些函数,使用以下代码我发现我使用的是 c++98。

if (__cplusplus == 201103L) std::cout << "C++11\n";
else if (__cplusplus == 199711L) std::cout << "C++98\n";
else std::cout << "pre-standard C++\n";

当我发现这一点时,我正在一台装有 Win8.1 且平台工具集设置为 v12.0 或更高版本的机器上使用 VS 2013 Ultimate。 我的机器上也安装了 VS 2010 和 VS 2015(刚刚安装了 2015 以查看它是否解决了问题)。

这些都没有奏效。 除了将平台工具集设置为 v12.0 之外,我还没有在网上找到任何其他解决方案。 我的朋友通过并行在他的 Mac 上运行 VS 2013 和 2015 没有这个问题。

尽管 OP 使用的是 VS 2010: How to "activate" c++11 standard in Visual Studio 2010?这个线程也有同样的问题

该线程表明它可能是微软的问题,但仍然没有解决方案: https : //connect.microsoft.com/VisualStudio/feedback/details/763051/a-value-of-predefined-macro-cplusplus-is-still- 199711l

在这一点上我完全迷失了,不知道如何解决它。 没有这个标准,几乎不可能遵循 Bjarne 的书。

如何更改或更新我的 C++ 标准?!?!

编辑/解决方案:所以我写这篇文章的主要原因是在阅读上面的书时,我遇到了一个问题,即使用初始化列表不是公认的功能。 根据关于这个问题的其他帖子和提供的链接,初始化列表显然是 C++11 的一个特性,所以在我使用上面的代码之后,我假设我没有使用 C++11。

下面是我为解决此问题而采取的步骤。

  1. 首先,我卸载了所有 2010 可再发行组件,包括 VS 2010 本身。
  2. 通过程序和功能,我运行了 VS 2013 卸载向导并选择了“修复”
  3. 这解决了我遇到的关于“初始化列表”无法识别的问题,但是,还有另一个错误弹出,这本书没有涵盖。

尽管我直接从书中复制了链接,但我得到的错误和解决方案最终是由过时的std_lib_facilities.h引起的。

我得到的错误和解决方案可以在这里找到: 简单代码需要帮助 - 没有构造函数实例匹配参数列表

PS:我没有重新安装 2010 可再发行组件,因为我目前不认为我需要它们。

在 Visual Studio 中使用 C++11

您不能在 Visual Studio 中“激活或更改某个 C++ 标准”。 如果要使用宏进行条件编译,则必须查找要使用的功能以及支持它的 Visual Studio 版本。

如果您知道所需的 MSVC 版本,则可以使用以下内容

#if _MSC_VER >= 1800
// ...
#endif

VS2010 有#define _MSC_VER 1600 ,VS2012 有#define _MSC_VER 1700和 VS2013 有#define _MSC_VER 1800 afaik。

如果(部分)支持 C++11,为什么宏不等于201103L

Visual Studio 不完全支持 C++11: Supported C++11 features in VS2013

实际上标准在关于__cplusplus的注释中说:

本标准的未来版本旨在用更大的值替换此宏的值。 不符合标准的编译器应使用最多五位十进制数字的值。

我认为只要 Visual Studio 不完全符合 C++11(如果有的话;)),这个宏就不201103L201103L

我相信宏说199711L表示(几乎完整的)C++98 一致性(尽管我还剩下 C++98 特性,它们没有包含在 VS 中)。

我正在根据请求添加此答案。 这个答案也可以在 OP 中作为编辑找到。

编辑/解决方案:所以我写这篇文章的主要原因是在阅读上面的书时,我遇到了一个问题,即使用初始化列表不是公认的功能。 根据关于这个问题的其他帖子和提供的链接,初始化列表显然是 C++11 的一个特性,所以在我使用上面的代码之后,我假设我没有使用 C++11。

下面是我为解决此问题而采取的步骤。

首先,我卸载了所有 2010 可再发行组件,包括 VS 2010 本身。 通过程序和功能,我运行了 VS 2013 卸载向导并选择了“修复”。 这解决了我遇到的关于“初始化列表”无法识别的问题,但是,还有另一个错误弹出,这本书没有涵盖。

尽管我直接从书中复制了链接,但我得到的错误和解决方案最终是由过时的std_lib_facilities.h引起的。

我得到的错误和解决方案可以在这里找到:简单代码需要帮助 - 没有构造函数实例匹配参数列表

PS:我没有重新安装 2010 可再发行组件,因为我目前不认为我需要它们。

您链接的线程的问题是 VS2010 不支持许多 C++11 功能,例如 std::thread (这是操作所需要的)。

VS2013 支持大部分 C++11 特性。 您会注意到,如果您创建一个项目并使用#include <thread>它应该可以正常工作。

要查看您的编译器支持 C++11 的哪些特性,请查看: C++11 核心特性表

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM