迁移到c++;11 我正在研究一个产品,它主要使用C++作为核心组件。虽然它使用Visual C++作为Windows平台的主编译器,其编辑器和调试器是主要的开发环境,但不使用任何微软特定的技术。对于其他平台,它使用gcc进行编译

迁移到c++;11 我正在研究一个产品,它主要使用C++作为核心组件。虽然它使用Visual C++作为Windows平台的主编译器,其编辑器和调试器是主要的开发环境,但不使用任何微软特定的技术。对于其他平台,它使用gcc进行编译,c++,c++11,C++,C++11,我的代码库大量使用模拟的右值引用(使用Boost move库)、可变模板(使用Boost处理器)以及在某些情况下的表达式模板 我很想切换到C++11,使用右值引用、完美转发、构造函数的default和delete、可变模板以及auto和decltype来获得更干净的代码库 如果我这样做,我可能会对现有代码进行一些返工以简化它(使用模板别名,可能还有constexpr)。在这种情况下,我必须使用mingw为Windows平台切换到gcc,因为visualstudio没有default、delete

我的代码库大量使用模拟的右值引用(使用Boost move库)、可变模板(使用Boost处理器)以及在某些情况下的表达式模板

我很想切换到C++11,使用右值引用、完美转发、构造函数的default和delete、可变模板以及auto和decltype来获得更干净的代码库

如果我这样做,我可能会对现有代码进行一些返工以简化它(使用模板别名,可能还有constexpr)。在这种情况下,我必须使用mingw为Windows平台切换到gcc,因为visualstudio没有default、delete和variadic模板的实现。此外,我必须切换到gdb作为调试器和不同的代码编辑器

对我来说,从代码的简单性和性能来看,好处是巨大的,但是稳定性、可用性(在某些平台上,如Android)、调试(从Visual Studio迁移到gdb,因为我们有许多为Visual Studio调试器开发的可视化工具)和代码编辑器(与其说是重模板代码,不如说是自动完成、重构等,而Codelite、Codeblocks、QtCreator与我们的构建系统配合得很好)是其中的一些问题

我想知道,是否有任何中/大型项目,无论是商业项目还是开源项目,使用/打算使用上述C++11功能中的任何一项?进行此类迁移需要付出多少努力


任何实践经验、技巧或智慧之言都将帮助我做出决定。

首先:这取决于政策

与所有技术一样,从有效的技术转换到新的技术本身就是一种风险。根据您的思维方式和项目的关键性,您接受的风险程度可能会有所不同(例如,我在个人项目中使用顶级版本的Clang,但在工作中使用成熟的gcc)

就我个人而言,我建议不要在准备生产的项目中先发制人,而是对工作的特性进行零碎的选择

你提到:

  • 右值引用和完美转发
  • 默认值
    /
    删除
  • 可变模板
  • 类型推断(
    auto
    /
    decltype
  • 模板别名和
    constexpr
VC++11附带。例如,您可以现在就开始使用右值引用和类型推断。如果我没记错的话,这些可以用于GCC4.5.x分支,它已经有一年多的历史了,非常陈旧

您的列表中有一个值得注意的缺失,例如lambdas,它也受到VC++11和gcc的支持

如果你想更进一步,那么你必须切换编译器和环境。由于你需要对团队进行再培训,这方面的努力要大得多(就我个人而言,我在mingw上与gdb有一些缺点…)


我建议cherry现在选择在这两种编译器上都有效的方法,除非你觉得有冒险精神。不过,迁移始终是一个业务风险。

建议和列表问题通常不是堆栈溢出的问题。我建议你再等一段时间。等到适当的VC++支持。mingw32中的头文件有问题。看一看在clang项目中,存储库[1]中有[C++11 Migrator][1]: