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

Upgrading c++98 code to c++11

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

默认情况下,项目中的 makefile 是为 c++98 编译的。我想打开 c++11,因为它显然提供了许多语言优势。 g++ 4.8 对 c++11 有 rather complete support

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

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

只需打开 -std=c++11,其他任何东西都应该是相当低的风险。由于突然在以前无法执行的位置执行移动,您可能会看到一些小的速度改进,但我怀疑您会 运行 遇到任何问题(除非代码包含未定义的行为并且 gcc 在 C 中更积极地利用它++11 模式 - 我不知道它是否如此。

至于代码现代化,您可能需要查看 clang tidy/clang modernize。但是一旦你开始真正主动地用新的现代 C++11 版本替换旧的工作代码,这就是你需要非常小心的地方,确保你做对了,并完全理解你正在替换的代码和新的代码您用来替换它的功能。

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

尤其是 'modernize-*' 检查:http://clang.llvm.org/extra/clang-tidy/checks/list.html

What kind of risk does this introduce? What things do I need to watch out for?

通常情况下,当前标准 () 无缝编译旧标准代码。

What type of things could break (besides things just not compiling)?

您可能会看到一些关于已弃用内容的警告,例如std::auto_ptr 但它仍然可以正常工作。


您必须判断是否真的值得重构您的旧代码,或者保持原样。

如果使用更新的语言功能可能会改进界面,您可以考虑重构。