见标题:C++ 函数内联意味着什么?
原文由 user7545 发布,翻译遵循 CC BY-SA 4.0 许可协议
它只意味着一件事和一件事:编译器将省略函数的多个定义。
一个函数通常不能定义多次(例如,如果您将非内联函数定义放入头文件中,然后将其#include 到多个编译单元中,您将收到链接器错误)。将函数定义标记为“内联”会抑制此错误(链接器确保发生正确的事情)。
它并不意味着更多!
最重要的是,这并不意味着编译器会将编译后的函数嵌入到每个调用站点中。是否发生这种情况完全取决于编译器的突发奇想,通常 inline 修饰符几乎不会改变编译器的想法。编译器可以——并且确实——内联 未 标记为内联的函数,并且它可以 对 标记为内联的函数进行函数调用。
删除多个定义是要记住的。
原文由 DrPizza 发布,翻译遵循 CC BY-SA 2.5 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
该函数被放置在代码中,而不是被调用,类似于使用宏(概念上)。
这可以提高速度(没有函数调用),但会导致代码膨胀(如果函数使用 100 次,您现在有 100 个副本)。
您应该注意,这不会强制编译器使函数内联,如果它认为这是一个坏主意,它将忽略您。同样,编译器可能会决定为您内联普通函数。
这也允许您将整个函数放在头文件中,而不是在 cpp 文件中实现它(无论如何您都不能这样做,因为如果它被声明为内联,那么您会得到一个未解析的外部,除非当然只有那个 cpp 文件用过)。