在Visual Studio 2013中禁用C++11特性

12

在Visual Studio 2013编写代码时,有没有办法禁用C++11功能?

我希望我的代码也能在旧版本的编译器(如VS 2008)上编译。

我尝试通过以下方式进行更改: 项目->属性->常规->平台工具集,将 "Visual Studio 2013 (v120)" 更改为较早版本,但这是该下拉菜单中唯一的选项。


为什么不干脆不使用任何C++11(或更新)的功能呢? - Some programmer dude
8
我是C++的新手,无法确定每个特性是否属于C++11特性。 - user3066442
1
那我可以推荐一个好的参考网站吗?它清楚地展示了哪些特性、类和函数属于C++03、C++11或C++14。然而,最好的方法是使用一个不支持C++11或更高版本的旧编译器来编译你的程序。 - Some programmer dude
1
对于 g++/clang,C++98/03 和 C++11 之间存在 ABI 差异,因此链接使用不同 C++ 标准编译的对象是非法的。不确定 VS 是否也存在这种情况。 - sstn
你为什么不直接使用VS2008呢? - Max
显示剩余4条评论
5个回答

10

你无法这样做。

很遗憾,你不能在Visual Studio中禁用C++11功能并降级到C++03或C++98。你可以在这里这里查看哪些功能属于C++11,并尽量不使用它们。

然而,更好的选择是使用较旧的VS版本,以确保你不使用任何新功能。

个人而言,我在Windows上使用MinGW/GCC,可以使用编译器开关-std=c++03-std=c++98或不使用-std=c++11来禁用C++11。


8
如果您安装了其他版本的Visual Studio,则可以选择旧的工具集。这可能会有所帮助。
更好的解决方案,我认为是建立一个持续集成服务器,为所有支持的编译器、配置和平台构建您的代码。然后,一旦您进行不支持的操作,就会立即出现构建中断。理想情况下,CI服务器还会运行所有单元测试,这样您就可以看到任何配置是否会破坏您的测试。

1
我在VS 2013旁边安装了VS 2008,现在我可以从下拉菜单中选择VS 2008。这很有帮助。 - user3066442

2

0
要么使用编译器明确设置所使用的标准(Clang和GCC允许选择标准版本),要么熟悉C++11中的更改,以避免在代码中出现问题。
如果您需要参考:http://en.cppreference.com/w/这些页面清楚地显示了特定功能是在哪个标准版本中引入的。

13
尝试编写C++03代码时,很容易错误地使用C++11功能。例如,在C++03中,std::vector要求元素是可复制赋值和可复制构造的,而C++11删除了这些限制。因此,在某些情况下,“避免使用C++11功能”这样的说法与“避免编写错误”一样无用。 - JDiMatteo

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接