将C ++ 98代码升级到C ++ 11

Lev*_*viX 5 c++ g++ g++4.8

我继承了一个大型的c ++代码库,并最终使它可以在64位Red Hat 7(gcc版本4.8.5 20150623)上编译和运行。

默认情况下,项目中的makefile是针对c ++ 98编译的。我想打开c ++ 11,因为它显然提供了许多语言上的好处。g ++ 4.8 完全支持 c ++ 11。

我的问题是:这会带来什么样的风险?我需要注意什么?什么类型的东西可能会破坏(除了不编译之外)?

我的google-foo在这方面的水平很低,因为我已经搜索过,但是还没有找到任何对此类型的分析。(也许因为我真的没有任何风险,我只是不知道。)

Jes*_*uhl 2

只打开-std=c++11而不做任何其他事情的风险应该相当低。您可能会看到一些小的速度改进,因为在以前无法执行的地方突然执行了移动,但我怀疑您会遇到任何问题(除非代码包含未定义的行为并且 gcc 在 C++11 模式下更积极地利用) - 我不知道是不是这样)。

至于现代化代码,您可能需要查看 clang tidy/clang现代化。但是,一旦您开始实际积极地用新的现代 C++11 版本替换旧的工作代码,您就需要非常小心并确保您做对了并完全理解您要替换的代码以及新的代码您用来替换它的功能。

http://clang.llvm.org/extra/clang-tidy/index.html

特别参见“modernize-*”检查:http://clang.llvm.org/extra/clang-tidy/checks/list.html