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

jte*_*erm 3 c++ boost c++11 visual-studio-2012

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

我的团队领导对此表示反对,因为他没有看到迁移的业务案例,并指出我们将通过 C++11 获得的大多数性能改进功能已经通过 BOOST 和其他库实现。他还表示,这将需要更改我们所有平台上的运行时,这可能会改变某些行为。这意味着我们需要在我们部署到的所有服务器上重新测试。

我对第一个论点有些理解,尽管我相信 C++11 代码会比使用 BOOST 干净得多(同样不是一个很好的商业案例)。

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

我不明白会有什么问题。我有什么遗漏的吗?我还应该引用其他关于迁移的良好论据来帮助我的案例吗?

Dav*_*vid 5

  • 所有第 3 方库都需要使用新编译器构建
  • 当前代码可能在不知不觉中依赖于未定义的行为,新的编译器可能会为 UB 执行与当前编译器完全不同的操作(并导致问题)

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

std::vector<Blah> func(std::vector<Asdf> v); // notice all the pass by value
Run Code Online (Sandbox Code Playgroud)

... C++11 可能会带来很大的性能改进。但在 C++98/03 中你不会这样做。

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

  • C++11 风格代码更少、更简单
  • VS2012 添加了 C++11 标准库 - 您可以停止手动滚动 50 个充满 bug 的替代品
  • 程序员希望使用现代语言和现代工具来工作。这将引发全公司范围内的学习和最佳实践的复兴,从而提高代码质量、员工保留率、员工继续教育等
  • 何时进行此类升级是一个微妙的平衡。如果你经常这样做,你就会花钱而没有获得任何商业优势。如果你这样做的频率太低,那么你就会处理太多的遗留技术和遗留代码,维护可能会成为一场噩梦。当您最终将要进行的重大语言更改发生时,最好尽早进行(顺便说一句,这并不是特别快) - 否则您只会不断积累稍后将被视为遗留代码的内容。为新工具迁移到新编译器通常是不值得的。进行重要的语言升级通常是值得的。

我不知道这些是否对你的团队领导有吸引力。不过祝你好运