你应该将项目迁移到C ++ 11吗?

时间:2013-10-17 19:33:51

标签: c++ visual-studio-2012 boost c++11

我一直在努力让我们的团队将一个大型C ++项目从VS2008迁移到VS2012。我想这样做主要是因为我想开始使用C ++ 11并且IDE更好。所以我的理由有些自私。

我的团队负责人正在推迟,因为他没有看到迁移的商业案例,理由是我们已经通过BOOST和其他库获得了C ++ 11带来的大多数性能改进功能。他还说,这将需要改变我们所有平台上的运行时间,这可能会改变某些行为。这意味着我们需要重新测试我们部署到的所有服务器。

我有点理解的第一个论点,虽然我相信C ++ 11代码比使用BOOST更清晰(同样不是一个很好的商业案例)。

关于使用不同运行时的争论我不明白。本机C ++应用程序使用哪些运行时?这不是VC ++。他的担心只是STL不会完全相同吗?

我不知道会有什么问题。有什么我想念的吗?还有其他任何有关迁移的好论据,我应该引用它来帮助我的案例吗?

3 个答案:

答案 0 :(得分:4)

  • 所有第三方库都需要使用新编译器构建
  • 代码目前可能在不知情的情况下依赖于未定义的行为,新的编译器可能会为UB做一些与当前的完全不同的事情(并导致问题)

性能不会发生太大变化,因为你不会用C ++ 11风格进行编码(基本上,很多东西都按照值传递,而不是之前)。如果你的代码库有很多......

std::vector<Blah> func(std::vector<Asdf> v); // notice all the pass by value

... C ++ 11可以带来很大的性能提升。但是在C ++ 98/03中,你不会这样做。

你需要为你的团队领导降低入学门槛。自己进行迁移并对产品进行冒烟测试。然后告诉他。之后,这是升级的抽象原因:

  • C ++ 11样式代码更少,更简单
  • VS2012增加了C ++ 11标准库 - 你可以停止手动滚动50个错误的替换
  • 程序员希望使用现代语言和现代工具。这将激发公司在学习和最佳实践方面的重新崛起,从而提高代码质量,员工保留率,员工继续教育等。
  • 进行此类升级时,这是一个微妙的平衡。如果你经常这样做,你就会花钱而不会获得任何商业优势。如果你很少这样做,你就会处理如此多的遗留技术和遗留代码,以至于维护可能会成为一场噩梦。当一个重大的语言变化出现时,你最终会转移到最后,最好早点做到这一点(顺便说一句,这不是特别很快) - 否则你只是继续积累以后的东西考虑遗留代码。迁移到新工具的新工具通常是不值得的。移动重要的语言升级通常是值得的。

这对你的团队领导是否有吸引力超出了我。祝你好运

答案 1 :(得分:2)

去年VS2012已经过时了,已经过时了,所以好的微软在使用1年后就取而代之了,批评,眼睛眩目的白度和所有大写!

但考虑到您可以在较新的IDE中构建VS2008项目意味着您可以立即升级到VS2013并随着时间的推移将项目升级到VS2013工具。

你的TL是正确的,升级需要完全重新测试,但如果你有时间添加功能,那么就可以适应这么大的测试。

我认为升级的主要方面只是为了保持最新状态,今天并不是什么大不了的事,但是在另外5年时间里,你的旧VS2008版本可能会开始阻碍你(因为我知道最近升级了)一个到2010年的VS2002项目,随着你离开它的时间越来越长,它永远不会是一个好主意,你最终必须做的升级努力就越多。这就是实现这一目标的真正原因 - 微软不会在下一版本中支持2008版本,而旧版IDE将无法在Windows 9上运行,每年都会获得更大的成功。最好在有空的时候解决这个问题。

答案 2 :(得分:0)

我想我不会对性能改进有太多期待,但对于测试,我建议对任何类型的编译器或工具链更改进行全面重新测试,无论您是否更改了代码。

编辑:我将补充一点,我会在下一个发布周期中转移到更新的编译器...这将删除测试参数(因为无论如何你都需要进行测试)。