首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Visual 2013中更改c++标准

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

Stack Overflow用户
提问于 2015-04-28 13:56:09
回答 3查看 9.1K关注 0票数 4

我一直在跟踪Bjarne的书的C++编程与原则第二版

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

代码语言:javascript
运行
复制
if (__cplusplus == 201103L) std::cout << "C++11\n";
else if (__cplusplus == 199711L) std::cout << "C++98\n";
else std::cout << "pre-standard C++\n";

当我发现这一点时,我在一台平台工具集设置为v12.0或更高的机器上使用VS 2013极限。我在我的机器上安装了VS 2010和VS 2015 (刚刚安装了2015年,看看它是否解决了问题)。

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

虽然OP使用的是VS 2010:如何在visual 2010“激活”c++11标准?,但这个线程也有相同的问题。

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

在这一点上,我完全迷失了方向,不知道该如何修复它。没有这个标准,就几乎不可能遵循比昂的书。

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

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

下面是我为解决这个问题所采取的步骤。

  1. 首先,我卸载了所有2010年的再发行版,包括VS 2010本身。
  2. 通过程序和特性,我运行VS 2013卸载向导,并选择“修复”
  3. 这解决了我遇到的关于“初始化程序-列表”的问题,但是,书中没有提到的另一个错误出现了。

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

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

PS:我还没有重新安装2010年的再发行版,因为我没有看到我现在对它们有需求。

EN

Stack Overflow用户

发布于 2015-04-28 14:06:44

在中使用C++11

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

如果您知道所需的MSVC版本,您可以使用类似于

代码语言:javascript
运行
复制
#if _MSC_VER >= 1800
// ...
#endif

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

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

Visual不完全支持C++11:支持C++11特性的VS2013

实际上,标准是在一份关于__cplusplus的报告中提到的

该标准的未来版本将以更大的值取代此宏的值。不符合要求的编译器应该使用一个不超过五位小数位的值。

我认为,只要Visual不完全符合201103L (如果有的话;),宏就不适用于C++11。

我相信宏199711L表示(几乎完全符合) C++98一致性(尽管我仍然保留了VS中没有包含的C++98特性)。

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

https://stackoverflow.com/questions/29921621

复制
相关文章

相似问题

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