gpt4 book ai didi

c++ - Visual Studio 6.0 和 VS 2010 编译器之间的主要区别

转载 作者:搜寻专家 更新时间:2023-10-31 01:10:50 26 4
gpt4 key购买 nike

几个月前我发布了以下问题 Problem with templates in VS 6.0

随后的讨论和您的评论帮助我意识到必须使用新的编译器 - 或者基本上它们是让我行动起来的最后 Spark 。经过一个月的公司内部“游说”,我终于得到了 VS 2012! (谢谢大家)

我必须使用的几个旧工具是用 VS 6.0 开发的
我担心其中一些工具可能无法与新的编译器一起使用。这就是为什么我想知道这里是否有人可以指出 VS 6 和 VS 2012 之间的主要区别 - 或者至少 VS 6 和 VS 2010 之间的主要区别 - 从 2010 年到 2012 年的变化在网上都有很好的记录。

显然 VS 6.0 和 VS 12 之间的差异一定是巨大的......我主要关心基本的东西,比如转换等。网络上几乎没有关于 VS 6.0 的任何信息 - 我有点不知所措:(

我想我将不得不创建具有相同类的新项目。在第二步中,我将用旧工具覆盖 .h 和 .cpp 文件。因此至少我将能够通过新的编译器打开文件。仍然可能不支持某些类型转换或类定义,我想大致了解调试时要查找的内容:)

最佳答案

自 VS 6.0 发布以来,该语言发生了重大变化。VS6.0 是 C++98 之前的版本; VS 2012 是 C++03,有一些来自C++11。

大多数较新的语言特性都是向上兼容的;旧代码应该仍然有效。尽管如此,VC 6.0 还是预标准,并且委员会不太关心打破现有的以前没有标准(和实现)时的代码确实有所不同)。语言有几个方面(至少)这可能会导致问题。

首先是 VC 6.0 仍然使用旧的作用域for 中定义的变量.因此,在 VC 6.0 中,如下所示是合法的:

int findIndex( int* array, int size, int target )
{
for ( int i = 0; i < size && array[i] != target ; ++ i ) {
}
return i;
}

这不会在 VC 2012 中编译(除非还有一个全局的变量 i ,在这种情况下,它将返回 that,而不是本地的)。

IIRC 也是,VC 6.0 在强制访问方面不是很严格控件和常量。迁移时这可能不是问题,但是,由于 VC 2012 在某些方面仍然无法符合 C++98在更明显的情况下,至少使用默认选项。(您仍然可以将临时变量绑定(bind)到非常量引用,例如示例。)

另一个不向后兼容的主要语言变化是模板中的名称查找。然而,这里也是,即使在 VC 中2012 年,Microsoft 实现了预标准名称查找(以及我的意思是 C++98 之前的版本)。如果你想,这是一个严重的问题将您的代码移植到其他编译器,但它确实使迁移从 VC 6.0 到 VC 2012 更容易。

关于图书馆,我不记得是不是6.0是否支持 C++98 库,或者它是否仍然预标准(或者可能两者都支持)。如果你的代码有像#include <iostream.h>之类的东西在其中,为一些准备此处的差异:对于直接使用 << 来说是次要的和 >> ;主要如果你实现一些复杂的streambuf .和当然,所有库都从全局命名空间移动到 std:: .

对于其余部分:您的代码显然不会使用任何功能VC 6.0出现后引入。这不会导致迁移问题(因为仍然支持旧功能),但是你肯定会想回去,逐步升级迁移后的代码。 (你提到类型转换。这是一个很好的例子:C 风格的转换仍然是合法的,与他们一直都有的语义,但在新代码中,你会想要避免它们,至少在涉及指针或引用时。)

关于c++ - Visual Studio 6.0 和 VS 2010 编译器之间的主要区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15543190/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com