![](/img/trans.png)
[英]How to change default C++ language standard in Visual Studio 2019?
[英]How to change c++ standard in Visual Studio 2013
我一直在关注 Bjarne Stroustrup 的书的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";
当我发现这一点时,我正在一台装有 Win8.1 且平台工具集设置为 v12.0 或更高版本的机器上使用 VS 2013 Ultimate。 我的机器上也安装了 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引起的。
我得到的错误和解决方案可以在这里找到: 简单代码需要帮助 - 没有构造函数实例匹配参数列表
PS:我没有重新安装 2010 可再发行组件,因为我目前不认为我需要它们。
您不能在 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
于201103L
。
我相信宏说199711L
表示(几乎完整的)C++98 一致性(尽管我还剩下 C++98 特性,它们没有包含在 VS 中)。
我正在根据请求添加此答案。 这个答案也可以在 OP 中作为编辑找到。
编辑/解决方案:所以我写这篇文章的主要原因是在阅读上面的书时,我遇到了一个问题,即使用初始化列表不是公认的功能。 根据关于这个问题的其他帖子和提供的链接,初始化列表显然是 C++11 的一个特性,所以在我使用上面的代码之后,我假设我没有使用 C++11。
下面是我为解决此问题而采取的步骤。
首先,我卸载了所有 2010 可再发行组件,包括 VS 2010 本身。 通过程序和功能,我运行了 VS 2013 卸载向导并选择了“修复”。 这解决了我遇到的关于“初始化列表”无法识别的问题,但是,还有另一个错误弹出,这本书没有涵盖。
尽管我直接从书中复制了链接,但我得到的错误和解决方案最终是由过时的std_lib_facilities.h引起的。
我得到的错误和解决方案可以在这里找到:简单代码需要帮助 - 没有构造函数实例匹配参数列表
PS:我没有重新安装 2010 可再发行组件,因为我目前不认为我需要它们。
您链接的线程的问题是 VS2010 不支持许多 C++11 功能,例如 std::thread (这是操作所需要的)。
VS2013 支持大部分 C++11 特性。 您会注意到,如果您创建一个项目并使用#include <thread>
它应该可以正常工作。
要查看您的编译器支持 C++11 的哪些特性,请查看: C++11 核心特性表
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.