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

问题描述 投票:3回答:3

我一直在关注Bjarne Stroustrup的书的C++ Programming and Principles 2nd Edition

我的问题是,在他的书中,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终极版。我在我的机器上安装了VS 2010和VS 2015(刚安装2015以确定是否解决了问题)。

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

虽然OP使用的是VS 2010:How to "activate" c++11 standard in visual studio 2010?,但这个帖子也有同样的问题

这个帖子表明它可能是一个微软问题,但仍然没有解决方案:qazxsw poi

我完全迷失了,并且不知道如何解决它。如果没有这个标准,它就会让Bjarne的书几乎不可能。

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

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

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

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

尽管我直接从书中复制了链接,但我得到的错误和解决方案最终导致std_lib_facilities.h过时了.PDF

我得到的错误和解决方案可以在这里找到:https://connect.microsoft.com/VisualStudio/feedback/details/763051/a-value-of-predefined-macro-cplusplus-is-still-199711l

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

c++ visual-studio visual-studio-2013 standard-library
3个回答
0
投票

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

VS2013支持大多数C ++ 11功能。你会注意到,如果你制作一个项目和Simple Code Need Help - no instance of constructor matches argument list它应该适合你。

要查看编​​译器支持的C ++ 11的哪些功能,请查看:#include <thread>


0
投票

Using C++11 in Visual Studio

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

如果你知道所需的MSVC版本,你可以使用类似的东西

C++11 Core Features Table

VS2010有#if _MSC_VER >= 1800 // ... #endif ,VS2012有#define _MSC_VER 1600,VS2013有#define _MSC_VER 1700 afaik。

Why doesn't the macro equal #define _MSC_VER 1800 if C++11 is (partially) supported?

Visual Studio不完全支持C ++ 11:201103L

实际上标准在关于Supported C++11 features in VS2013的说明中说:

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

我认为只要Visual Studio不完全符合C ++ 11(如果有的话),宏就不等于qazxsw poi)。

我相信宏说qazxsw poi表示(几乎完整)C ++ 98一致性(虽然我还有C ++ 98的功能,但不包含在VS中)。


0
投票

我按照请求添加了这个答案。这个答案也可以在OP中找到作为编辑。

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

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

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

尽管我直接从书中复制了链接,但我得到的错误和解决方案最终导致std_lib_facilities.h过时了.PDF

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

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

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