我一直在跟踪Bjarne的书的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";
当我发现这一点时,我在一台平台工具集设置为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。
下面是我为解决这个问题所采取的步骤。
我得到的错误和解决方案最终是由过时的std_lib_facilities.h造成的,尽管我从.PDF一书中直接复制了链接。
我得到的错误和解决方案可以在这里找到:简单代码需要帮助-没有构造函数实例匹配参数列表
PS:我还没有重新安装2010年的再发行版,因为我没有看到我现在对它们有需求。
发布于 2015-04-28 14:06:44
在中使用C++11
您不能在Visual中“激活或更改某个C++标准”。如果要使用宏进行条件编译,则必须查找将要使用的特性以及支持宏的Visual版本。
如果您知道所需的MSVC版本,您可以使用类似于
#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特性)。
https://stackoverflow.com/questions/29921621
复制相似问题