用于以下功能:
inline void A() {
...
B();
...
}
B 也由编译器内联?
如果没有,我应该将 B 内联以提高性能吗?
答案 0 :(得分:6)
在大多数情况下,您可以轻松地休息,将内联决策留给编译器,这将比您更好地了解它何时何时会导致更好的性能。
在这种特殊情况下,我会强烈怀疑这完全取决于编译器做什么。
答案 1 :(得分:4)
不,内联关键字只会导致A代码在调用者代码中内联。这不会影响B的内联。
除此之外,在c ++中,inline关键字只是对编译器的一个提示,允许忽略它。现代编译器决定何时需要内联函数,即使未使用关键字。
答案 2 :(得分:4)
不知何故,所有评论者都没有提到有些情况,内联不仅仅是对编译器的暗示,而是一个强制关键字。当一个函数的非模板定义放在多个.cpp文件包含的头文件中时,就会发生这种情况。在这种情况下,缺少内联将触发链接器错误。事实上,这是唯一一个人甚至打扰输入这6个字符的情况。在其他情况下,编译器将内联所有内容 - 无论此关键字存在。
答案 3 :(得分:2)
当你声明一个函数/方法inline
时,编译器只是一个提示,应该内联这个特定的函数。然后编译器可能会也可能不会内联它。这同样适用于嵌套调用,例如在B()
内调用A()
。
我可能会在这两个函数中添加inline
说明符,但这只是一种风格问题 - 像GCC这样的现代优化编译器无论如何都会优化它。