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

时间:2016-06-22 18:14:42

标签: c++ g++ g++4.8

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

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

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

我的google-foo相当低,因为我已经搜索过,而且还没有能够找到任何类型的分析。 (也许是因为他们真的没有任何风险,我只是不知道。)

2 个答案:

答案 0 :(得分:2)

只需启用-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

答案 1 :(得分:1)

  

这会带来什么样的风险?我需要注意哪些事项?

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

  

什么类型的东西可能会破坏(除了不编译的东西)?

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

你必须判断,如果它实际上值得重构你的旧代码,或者只是保持原样。

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