几个月前,我发布了以下问题 Problem with templates in VS 6.0
接下来的讨论和你的评论让我意识到,开始使用新的编译器是强制性的 - 或者基本上它们是让我开始行动的最终火花。经过一个月的公司内部“游说”,我终于获得了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文件。因此,至少我将能够通过新的编译器打开文件。仍然可能不支持某些强制转型或类定义,我想在调试时大致了解要查找的内容:)
答案 0 :(得分:4)
自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
,在这种情况下,它将返回那个,而不是
当地人)。
另一种主要的语言变化,它不向后兼容 是模板中的名称查找。然而,这也是在VC中 2012年,微软实施了pre-standanrd名称查询(和 我的意思是预C ++ 98)。如果你愿意,这是一个严重的问题 将您的代码移植到其他编译器,但它确实进行迁移 从VC 6.0到VC 2012要容易得多。
关于图书馆,我不记得是否6.0
支持C ++ 98库,或者它是否仍然存在
预标准(或可能同时支持)。如果您的代码有
像#include <iostream.h>
这样的东西,为一些人做好准备
这里的差异:对于<<
和>>
的直接使用是次要的
streambuf
;如果您实现一些复杂的std::
,则为major。和
当然,所有的库都从全局命名空间移到了
{{1}}。
其余的:您的代码显然不会使用任何功能 VC 6.0出现后推出。这不会导致迁移 问题(因为仍然支持较旧的功能),但是 你无疑会想要回去,并逐步升级 您迁移后的代码。 (你提到演员。这是 一个很好的例子:C风格的演员阵容仍然是合法的,具有相同的 他们一直有的语义,但在新的代码中,你会想要的 避免它们,至少涉及指针或引用时。)