在 VS2012 上禁用 C++11 功能

Posted

技术标签:

【中文标题】在 VS2012 上禁用 C++11 功能【英文标题】:Disabling C++11 features on VS2012 【发布时间】:2013-07-19 17:37:00 【问题描述】:

是否可以?我的代码还没有准备好,我不想引入更多的混乱

【问题讨论】:

评论帮助中提到here的方法是否(即通过VS2012使用VS2008编译器)? 我也想知道在VS2010上是否可以,抱歉劫持。 ***.com/questions/3536029/… 那你至少晚了两年 如果你的代码“还没有准备好”那么它一定是一个严重的黑客攻击。如果代码还需要在其他编译器上编译,则有必要对 C++11 的使用发出警告。但是禁用 C++11?不需要。 【参考方案1】:

从 Visual C++ 2015 Update 3 开始,现在可以为语言行为指定语言版本(显然它不仅仅影响一致性检查):

https://blogs.msdn.microsoft.com/vcblog/2016/06/07/standards-version-switches-in-the-compiler/

不幸的是,唯一的选项是“C++14”(不准确,它包括以前发布的 C++14 后特性)和“C++ 最新”(C++14 加上 C++17 的部分实现)和建议,但不是“实验性”功能)

对应的命令行开关是:

/std:c++14 /std:c++latest

【讨论】:

【参考方案2】:

右键项目->属性->常规->平台工具集->Visual Studio 2010

这将使用 Visual Studio 2010 编译器编译项目。

【讨论】:

但是,VS2010的c++11也有限。 并且您需要在您的系统上安装 VS'10 的编译器。它不包含在 VS'12 中 @Waldermort 还有 VS2008,它没有任何 C++11 @Caesar 我想我得认输升级了。我只是希望 VS2010 的烦恼已得到修复。 令我震惊的是为什么,随着编译器越来越好,IDE 越来越臃肿,它们为您提供了结合两者最差的选项——新的 IDE + 旧的编译器——而不是相反。或者有人为 VC++ 2010 编写了一个目标包来运行 2012 编译器?【参考方案3】:

是的,您可以在 Visual C++ 编译器上禁用 C++11 功能。 /Tc 编译器选项将导致 C++11 语法错误。

不幸的是,C++03 和 C++98 将是附带损害。剩下的将是 C89,以及一些 Microsoft 扩展,例如对 //single line comments 的支持。

【讨论】:

我认为重要的是要进一步澄清 Tc 将降级为 C。这不仅仅是你失去了一些 C++,而是你完全失去了 C++。 @Csaba:是的,没错。我的第二段对你来说意味着什么? @JohnDibling:可能是因为我没有回答 OP 明显意味着的问题。但我不认为“如何在 C++03 模式下运行 Visual C++ 2012?”有任何答案。 @BenVoigt 我没有投反对票。我承认,“剩下的都是 C89”确实说你只留下了 C。但有些人可能会忽略这一点。 诸如“是的,您可以禁用 C++11 功能,但只能通过禁用 所有 C++ 功能”之类的措辞可能避免了反对票。但是,我喜欢它,就像它一样...... :)

以上是关于在 VS2012 上禁用 C++11 功能的主要内容,如果未能解决你的问题,请参考以下文章

使用VS 2012在构造函数中初始化树节点中的数组

禁用菜单项时,如何将 VS Profiler 2012 附加到 ASP.NET 解决方案?

使用 VS 2015 构建 QtWebEngine 5.8 时如何禁用 Windows 10 功能?

VS2012 和 VS2013 解决方案之间是不是存在任何功能差异?

VS 2012项目转换烦恼

可以在Visual Studio Community 2015/17和VS Team Services上禁用结帐文件功能