一 .C++中的内联函数
C++中使用内联函数替代宏代码片段;
C++中使用inline关键字声明内联函数。
inline fuc(int a,int b)
{
return a < b ? a:b;
}
内联函数声明时inline关键字必须和函数定义结合在一起,
否则编译器会直接忽略内联请求。
说明:(1)C++编译器可以将一个函数进行内联编译。
(2)内联函数在最终生成的代码中是没有定义的。
(3)内联函数没有普通函数调用时额外的开销(压栈,跳转,返回)。
(4)C++编译器不一定准许内联请求。
(5)宏代码片段是有预处理器处理,进行简单的文本替换,时会带来副作用。
(6)现代C++编译器能进行代码优化,一些函数没有inline声明也可以进行内联编译。
(7)强制内联 _attribute_( (always_inline)) 属性
#include <stdio.h>
#define FUNC( a, b) ( a < b ? a : b )
inline int func( int a, int b)
{
return a < b ? a:b;
}
int main()
{
int a = 1;
int b = 3;
int c = func(++a,b);
//int c = FUNC(++a,b);
printf("a= %d\n",a);
printf("b= %d\n",b);
printf("c= %d\n",c);
return 0;
}
当执行 c= func(++a,b); 时输
当执行 c= FUNC(++a,b);时输出:
内联函数的实现机制:
二. 默认函数参数
说明:(1)C++中可以在函数声明时为函数提供一个默认参数,定义时不需要。
(2)只有参数表后面的部分参数才可以提供默认参数。
eg: int f( int a, int b= 0, int c = 1);
#include <stdio.h>
int nul( int a = 0);
int main()
{
printf("nul(2)=%d\n",nul(2));
printf("nul(-3)=%d\n",nul(-3));
printf("nul()= %d\n",nul());
return 0;
}
int nul(int a)
{
return a*a;
}
c++中的占位参数可以为以后程序的扩展留下线索,兼容c语言不规范写法。
int f( int a, int b, int )
{
return a+b;
}