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

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

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

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

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

我的 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

关于c++ - 将 c++98 代码升级到 c++11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37975466/

相关文章:

c++ - -Xlinker -export-dynamic 和 -rdynamic 之间有什么区别吗?

c++ - vector<unique_ptr> 上的 is_copy_constructible 误报

c++ - 为什么这个递归调用以这种方式工作?

C++ boost属性树获取值

c++ - 在概念中表达对数据成员的概念要求的最佳方式是什么?

c++ - 在 msvc 和 gcc 上使用 vsnprintf 时的不同行为

c++ - 为什么 vector<bool>::reference 不返回对 bool 的引用?

c++ - c_str() 的生命周期是否在 g++ 4.8.4 和 g++ 5.3.1 之间发生了变化?

c++ - 从 msvc c++ 执行控制台应用程序

c++ - 在 C++ 中使用 sort 对索引进行排序