C++ 内联函数中的内联函数

C++ 内联函数中的内联函数,c++,inline,C++,Inline,对于以下功能: inline void A() { ... B(); ... } B是否也由编译器内联 如果不是,我是否应该使B内联以提高性能?在大多数情况下,您可以放心地将内联决策留给编译器,编译器将比您更清楚何时何时不内联将产生更好的性能 在这种特定的情况下,我很可能会怀疑编译器完全可以做什么。不,内联关键字只会导致A代码内联到调用方代码中。这不会影响B的内联 此外,在C++中,内联关键字只是编译器的提示,允许忽略它。现代编译器决定何时需要内联函数,即使没有使用关键字。当

对于以下功能:

inline void A() {
   ...
   B();
   ...
}
B是否也由编译器内联


如果不是,我是否应该使B内联以提高性能?

在大多数情况下,您可以放心地将内联决策留给编译器,编译器将比您更清楚何时何时不内联将产生更好的性能


在这种特定的情况下,我很可能会怀疑编译器完全可以做什么。

不,内联关键字只会导致A代码内联到调用方代码中。这不会影响B的内联


此外,在C++中,内联关键字只是编译器的提示,允许忽略它。现代编译器决定何时需要内联函数,即使没有使用关键字。

当您声明函数/方法
inline
时,它只是提示编译器应该内联此特定函数。编译器可能会也可能不会内联它。这同样适用于嵌套调用,如对
A()
内部
B()
的调用


我可能会在这两个函数中添加
inline
说明符,但这只是风格问题——像GCC这样的现代优化编译器无论如何都会对其进行优化。

不知何故,所有的评论者都没有提到,在某些情况下,inline不仅仅是对编译器的提示,而是一个强制关键字。如果将函数的非模板定义放入多个.cpp文件包含的头文件中,就会发生这种情况。在这种情况下,缺少内联将触发链接器错误。事实上,只有在这种情况下,人们才需要费心输入这6个字符。在其他情况下,编译器将尽其所能内联所有内容—无论是否存在此关键字。

此外,内联关键字只是一个提示或愿望,编译器不需要遵循它。我敢打赌,现代编译器完全忽略了它。这取决于语言。在您提到的例子中,函数实际上是内联的还是只解决链接器错误?@MonsterHunter,保证解决链接器错误。它不能保证执行实际的内联。但别担心。现代编译器喜欢内联。如果任何东西都可以内联,那么它就是内联的:)