c++ - c++11 兼容的编译器是否总是忽略内联提示?

标签 c++ c++11 inline

正在阅读 old answerWhen should I write the keyword 'inline' for a function/method?上面写着:

It is said that inline hints to the compiler that you think the function should be inlined. That may have been true in 1998, but a decade later the compiler needs no such hints. Not to mention humans are usually wrong when it comes to optimizing code, so most compilers flat out ignore the 'hint'.

这个答案是在 2009 年发布的,所以我想最终弄明白:

  1. 现代 c++11 兼容编译器是否总是忽略用户指定的inline 提示并且仅自动执行此操作?
  2. inline 提示只是为了提供向后兼容性吗?
  3. 如果不是1.那么这个答案不正确?

最佳答案

  1. 不,他们只是按照标准要求来解释它,但一些编译器可能仅此而已(根据 MSVC 根据 inline 关键字的存在选择的文档,以及 GCC 5.1。 0 在决定时考虑了 inline 关键字。
  2. 不,在链接时也需要内联来避免重复符号。

inline 关键字确实有意义,但不是您所期望的意义。这并不意味着编译器必须/应该/可能内联扩展函数,编译器可能决定按照它认为合适的方式执行,无论您是否使用 inline

它的意思是您应该并且可以在使用它的每个编译单元中重复函数定义,而不会导致链接错误 - 与 static 关键字非常相似。

例如 GCC 4.7.2(它可能不是最先进的,但仍然是一个相当现代的编译器)似乎对 inline 的解释不超过标准规定的范围。如果禁用优化并且打开优化,它似乎不会内联函数,它似乎无论如何都会内联。唯一的区别是编译器在不同情况下如何处理“大纲”函数,对于内联函数,它只是简单地丢弃它或以一种在链接时避免重复符号的方式处理它。

关于c++ - c++11 兼容的编译器是否总是忽略内联提示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32047466/

相关文章:

c++ - CentOS构建wxWidget项目失败,错误: invalid static_cast from type ‘wxAppConsole*’

c++ - 如何打印迭代器类型 list<pair<int,int>>::iterator it 指向的元素

c++ std vector - 无效的迭代器问题

c++ - 如何调用一个变量(包含 rand() 函数)并始终得到不同的数字?

function - pl/sql 中的内联函数?

C++11:当定义移动构造函数时,按值返回对象不会抛出异常吗?

c++ - C++ 中成员函数的 const& 、 & 和 && 说明符

c++ - 检查 C++ 编译器隐式生成的代码

css - 内联 div 未正确对齐

css - 为什么 z-index :99999999999; Disables inline style definition?