我在互联网上搜索了一些与内联函数相关的主题,但没有一个让我怀疑。
到目前为止,我知道内联函数的工作方式与方法或块相同,但最近看到了以下响应:
通过声明函数内联,告诉编译器替换 该函数的完整代码直接进入它所在的地方 被称为。这是一个需要相当高级的功能 对低级程序设计的理解。
所以这意味着在正常的功能中:我在A点并且想要去B点,因为我离开A然后去B,对吧?
内联函数是否以这种方式工作:我在A点,并希望转到B点,B点到达A点?
我上面说的是对的吗?
答案 0 :(得分:1)
引用应该是"替换呼叫" ......"放置完整的代码"。内联函数背后的理想类似于宏;在源代码中调用内联函数的每个位置,而不是调用内联函数,调用将替换为内联函数中的完整代码,并且不进行调用。这可能会生成大量重复的代码,但应该导致更快的执行,除非代码大小的增加导致缓存问题。在某些情况下,编译器可能会忽略内联选项并使用正常调用。
答案 1 :(得分:1)
理想情况下,使用inline
关键字,编译器会在调用函数的位置粘贴内联函数的内容。
假设:
void Print(void)
{
cout << "Hello World!\n";
}
int main(void)
{
Print();
return 0;
}
编译器会发出汇编指令来调用Print
函数内的main
函数。
当将Print
函数声明为内联时,编译器将在下面生成概念main()
函数:
int main(void)
{
// Substitute content of Print function because it's declared as inline
cout << "Hello World!\n";
return 0;
}
请记住,inline
关键字是对编译器的建议,编译器可以忽略它。编译器可能已经内联小函数而不使用inline
关键字。
很久以前,inline
关键字用于强制编译器粘贴调用函数的代码。该技术用于消除函数调用开销。这是编译器对优化不太聪明的时代。
答案 2 :(得分:0)
当你想节省运行时间时,内联函数是一个很好的工具,因为当你调用这种函数(内联)时,它的代码会被写入调用的位置。为什么节省时间?因为调用常规函数只需要花费更多时间而不仅仅是粘贴其功能。例如:
inline void sayHi()
{
std::cout<<"Hi!";
}
int main()
{
sayHi(); //Calling an inline function
std::cin.get();
}
编译器粘贴std :: cout&lt;&lt;“嗨!”;而不是sayHi(); 所以你所说的实际上是正确的。