内联函数与预处理器宏有何不同?
原文由 Subodh 发布,翻译遵循 CC BY-SA 4.0 许可协议
要了解 宏和内联函数 之间的区别,首先我们应该知道它们到底是什么以及何时应该使用它们。
功能:
int Square(int x)
{
return(x*x);
}
int main()
{
int value = 5;
int result = Square(value);
cout << result << endl;
}
宏:
# define Square(x) x*x;
int main()
{
int value = 5;
int result = Square(value);
cout << result << endl;
}
#define
关键字编写的语句将被替换或扩展整数结果 = 平方(x*x)
但是宏可能会导致意外行为。
#define Square(x) x*x
int main()
{
int val = 5;
int result = Square(val + 1);
cout << result << endl;
}
这里的输出是 11 ,而不是 36。
内联函数:
inline int Square(int x)
{
return x * x;
}
int main()
{
int val = 5;
int result = Square(val + 1);
cout << result << endl;
}
输出: 36
inline
关键字要求编译器将函数调用替换为函数体。这里的输出是正确的,因为它首先计算表达式,然后使用结果来执行函数的主体。内联函数减少了函数调用开销,因为不需要将返回地址或函数参数存储到堆栈中。
宏和内联函数的比较:
结论:
内联函数有时比宏更有用,因为它们使用安全,但也可以减少函数调用开销。 inline
关键字是对编译器的 _请求_,某些函数不会被内联,例如:
这是一件好事,因为它允许编译器确定以另一种方式做事是否更好。
原文由 Sheetal 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
预处理器宏只是应用于您的代码的替换模式。它们几乎可以在您的代码中的任何地方使用,因为它们在任何编译开始之前被它们的扩展替换。
内联函数是其主体直接注入其调用站点的实际函数。它们只能在函数调用合适的地方使用。
现在,就在类似函数的上下文中使用宏与内联函数而言,请注意: