之间有什么区别
#include <iostream>
using namespace std;
int exforsys(int);
void main( )
{
int x;
cout << "n Enter the Input Value: ";
cin>>x;
cout << "n The Output is: " << exforsys(x);
}
int exforsys(int x1)
{
return 5*x1;
}
和
#include <iostream>
using namespace std;
int exforsys(int);
void main( )
{
int x;
cout << "n Enter the Input Value: ";
cin>>x;
cout << "n The Output is: " << exforsys(x);
}
inline int exforsys(int x1)
{
return 5*x1;
}
这两个定义对于我猜的代码是一样的,那么使用内联函数定义有什么好处呢?
答案 0 :(得分:10)
inline
关键字建议编译器内联函数。
通常,当调用函数时,寄存器的当前内容为pushed
(复制)到内存。函数返回后,它们为popped
(复制回来)。
这需要一点时间,但通常很少,无论函数做什么都会使函数调用开销相形见绌。有时,当一个非常小的函数在紧密循环中每秒调用数千次时,所有这些函数调用的组合函数调用开销可能会累加起来。在这些情况下,程序员可以向编译器建议,不要在该循环中调用该函数,而是将函数的内容直接放入循环中。这避免了开销。
某些编译器,尤其是Microsoft Visual C ++,忽略了inline
关键字。微软认为他们的优化器非常聪明,可以知道何时应该内联函数。对于那些确实想要内联函数的情况,Microsoft和其他供应商有时会提供专有的,“不,我的意思是!”关键词。在Visual C ++的情况下,如果我没记错的话,它是__forceinline
。但是,如果优化器非常强烈地认为内联函数是一个坏主意,那么即使是这样,仍然可以忽略。
答案 1 :(得分:6)
由于编译器足够聪明,可以决定哪些函数可以从内联中受益,哪些不会,inline
只有真正的效果就是改变函数 link < / em>的。默认情况下,inline
个函数具有外部链接。
inline
关键字只是对编译器的建议。编译器可以决定内联未声明为inline
的函数,或者不是内联函数声明为inline
。
答案 2 :(得分:0)
嗯,内联函数的代码在编译期间被置于其使用状态。因此,它的执行速度和源代码长度都很小。
答案 3 :(得分:0)
当您调用内联函数时,预处理器不会将执行控制转移到此函数,而是将所有此类函数调用替换为实际的函数代码。在C ++中,当您在类中定义一个函数时,默认情况下它是内联的,前提是它没有循环语句。
答案 4 :(得分:0)
内联函数调用实际上已替换为内联函数本身。
这解释了它优雅而简单。 http://www.cprogramming.com/tutorial/lesson13.html
维基百科文章也很有帮助。 http://en.wikipedia.org/wiki/Inline_function
答案 5 :(得分:0)
来自C++ language specification 7.1.2
带有内联说明符的函数声明声明了内联 功能。内联说明符指示实现 在呼叫点处对函数体进行内联替换 优于通常的函数调用机制。
这意味着实现可以用方法体替换方法调用,从而避免了通常在normall方法调用过程中发生的开销。但是,内联替换并不是强制性的,而是特定于实现的。
执行此内联替换不需要实现 在通话点;然而,即使这种内联替换是 省略,7.1.2定义的内联函数的其他规则 仍然受到尊重