我一直在跟随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之外,我没有在网上找到其他解决方案。我的朋友通过parallels在Mac上运行VS 2013和2015,并没有遇到这个问题。
这个线程有相同的问题,尽管OP使用的是VS 2010: 如何在Visual Studio 2010中“激活”c++11标准? 这个线程证明了这可能是微软的问题,但仍然没有解决方案: 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年可再发行组件,因为我目前不需要它们。
--std=c++11
。 - πάντα ῥεῖ__cplusplus
版本。请参见此链接。如果您正在使用已安装的最新平台工具集版本,则可以使用该编译器版本支持的所有功能。 - Praetorian