我一直关注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?
这个帖子说明它可能是一个微软问题,但仍然没有解决方案:https://connect.microsoft.com/VisualStudio/feedback/details/763051/a-value-of-predefined-macro-cplusplus-is-still-199711l
我完全迷失了,并且不知道如何解决它。如果没有这个标准,那么Bjarne的书几乎是不可能的。
如何更改或更新我的C ++标准?!?!
编辑/解决方案:所以我发布这篇文章的主要原因是在上面的书中,我遇到了一个问题,即使用初始化列表不是一个公认的功能。根据这个问题的其他帖子和提供的链接,初始化列表显然是C ++ 11的一个特性,所以在我使用上面的代码后,我假设我没有使用C ++ 11。
下面是我为解决此问题而采取的步骤。
由于过时而导致的错误和解决方案 std_lib_facilities.h 尽管我直接从书中复制了链接.PDF
我在这里可以找到错误和解决方案: Simple Code Need Help - no instance of constructor matches argument list
PS:我没有重新安装2010年可再发行组件,因为我不认为我现在需要它们。
答案 0 :(得分:0)
您无法在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。
201103L
?Visual Studio不完全支持C ++ 11:Supported C++11 features in VS2013。
实际上标准在关于__cplusplus
:
本标准的未来版本旨在用更大的值替换此宏的值。不合格的编译器应使用最多五位小数的值。
我认为只要Visual Studio不完全符合C ++ 11(如果有的话),宏就不会对201103L
有效。
我相信宏说199711L
表示(几乎已满)C ++ 98一致性(虽然我还有剩下的C ++ 98功能,但未包含在VS中)。
答案 1 :(得分:0)
您链接的线程的问题是VS2010不支持许多C ++ 11功能,例如std :: thread(这是操作所需的)。
VS2013支持大多数C ++ 11功能。您会注意到,如果您创建项目并且#include <thread>
它应该适合您。
要了解编译器支持的C ++ 11的哪些功能,请查看:C++11 Core Features Table
答案 2 :(得分:0)
我按照请求添加此答案。这个答案也可以在OP中找到作为编辑。
编辑/解决方案:所以我发布这篇文章的主要原因是在上面的书中,我遇到了一个问题,即使用初始化列表不是一个公认的功能。根据这个问题的其他帖子和提供的链接,初始化列表显然是C ++ 11的一个特性,所以在我使用上面的代码之后我假设我没有使用C ++ 11。
下面是我为解决此问题而采取的步骤。
首先,我卸载了所有2010年可再发行组件,包括VS 2010本身。通过程序和功能,我运行了VS 2013卸载向导并选择了&#39; repair&#39;。这解决了我遇到的问题&#39;初始化列表&#39;但是,没有被识别出来,还有另一个错误,出现了这本书没有涵盖的内容。
由于我直接从书中复制了链接,因此我的错误和解决方案因为过时而导致 std_lib_facilities.h .PDF
我可以在这里找到我得到的错误和解决方案:简单代码需要帮助 - 没有构造函数的实例匹配参数列表
PS:我没有重新安装2010年可再发行组件,因为我不认为我现在需要它们。