我正在研究一种主要使用C ++作为其核心组件的产品。虽然它使用Visual C ++作为Windows平台的主要编译器及其编辑器和调试器作为主要开发环境,但未使用任何Microsoft特定技术。对于其他平台,它使用gcc进行编译。
我的代码库大量使用模拟右值引用(使用Boost移动库),可变参数模板(使用Boost处理器),在某些情况下使用表达式模板。
我很想转用C ++ 11来获得更清晰的代码库,使用rvalue引用,完美转发,默认和删除构造函数,可变参数模板以及auto和decltype。
如果我这样做,我可能会对现有代码进行一些修改以简化它(使用模板别名和constexpr)。在这种情况下,我必须使用mingw切换到Windows平台的gcc,因为Visual Studio没有默认和删除的实现,以及可变参数模板。另外,我必须切换到gdb作为调试器和不同的代码编辑器。
对我来说,在代码简单性和性能方面看起来很大,不过稳定性,可用性(在某些平台上如Android),调试(从Visual Studio迁移到gdb,因为我们有许多为Visual Studio调试器开发的可视化工具) )和代码编辑器(对于大量模板代码而言,我没有太多使用自动完成,重构等,Codelite,Codeblocks,QtCreator与我们的构建系统配合良好)是一些问题。
我想知道是否有任何中型/大型项目(商业或开源)使用/打算使用上述任何C ++ 11功能?这种迁移需要多少努力?
任何实践经验,技巧或智慧之词都会帮助我做出决定。
答案 0 :(得分:7)
首先:这取决于政策。
与所有技术一样,从有效的东西转换为新的东西本身就是一种风险。根据您的思维方式和对项目的批评,您接受的风险程度可能会有所不同(例如,我在个人项目中使用Clang树版本的顶部,但在工作时使用成熟的gcc)。
就我个人而言,我建议不潜水首先进行生产准备项目,而是逐步选择有效的功能。
你提到:
default
/ delete
auto
/ decltype
)constexpr
VC ++ 11附带support for many C++11 features。例如,您现在可以立即开始使用右值引用和类型推断。如果我没记错的话,那些可以和gcc 4.5.x分支一起使用,已经超过一年了,非常好。
你的列表中有一个值得注意的缺席是 lambdas ,例如VC ++ 11和gcc都支持。
如果您想进一步移动,则必须切换编译器和环境。由于你需要重新培训团队,所以工作量要大得多(就我个人而言,我在gingw上遇到了一些gdb的瑕疵......)。
我建议樱桃选择适用于两个编译器的功能,现在,除非你觉得有冒险精神。但迁移始终是一种商业风险。