1: inline内联函数
C++中的const常量可以替代宏常数定义,如const int a = 3 # define a 3
C++中使用内联函数代替宏代码片段,使用inline关键字声明内联函数。内联函数声明时inline关键字必须和函数定义结合在一起,否则编译器会直接忽略内联请求。
内联函数在编译时直接将函数体插入函数调用的地方。inline只是一种请求,编译器不一定允许这种请求。
# include "iostream"
using namespace std;
//带参数的宏与内联函数比较
# define MYFUNC(a,b) ( (a) < (b) ? (a) : (b) )
inline int myfunc(int a,int b)
{
return a < b ? a : b;
}
int main()
{
int a = 1;
int b = 3;
int c1 = myfunc(++a,b); // a=2,b=3,c1=2
printf("a=%d\n", a);
printf("b=%d\n", b);
printf("c1=%d\n", c1);
int c2 = MYFUNC(++a,b); //宏替换并展开((++a)<(b)?(++a):(b))//a=3,b=3,c2=3
printf("a=%d\n",a);
printf("b=%d\n",b);
printf("c2=%d\n",c2);
}
C++中内联编译的限制:不能存在任何形式的循环语句;不能存在过多的条件判断语句;函数体不能过于庞大;不能对函数进行取址操作。
函数内联声明时必须在调用语句之前,编译器对于内联函数的限制并不是绝对的。内联函数相对普通函数的优势只是省去了函数调用时压栈,跳转和返回的开销。因此,当函数体的执行开销远大于压栈,跳转和返回所用的开销时,那么内联将无意义。
2:默认参数
C++中可以在函数声明的时候为参数提供一个默认值。当函数调用时没有指定这个参数的值,编译器会自动用默认值代替。
# include "iostream"
using namespace std;
//①默认参数
void my(int x = 3)
{
cout << "x=" << x << endl;
}
void my2( int m, int n,int x = 3,int y = 4)//默认参数规则:如果默认参数出现,那么右边的都必须有默认参数。
{
cout<<"x="<<x<<endl; //即只有参数列表后面部分的参数才可以提供默认参数值。
} //一旦在一个函数调用中开始使用默认参数值,那么这个参数后的所有参数都必须使用默认参数值。
void main()
{
my(4); //若你填写了参数,则使用你填的,若没填,则使用默认的。 x=4
my(); //使用默认的,x=3
}
3:函数占位参数
void fun(int a,int b,int)
{
cout<<"a="<<a<<"b="<<b<<endl;
}
void main()
{
//fun(1,2); //× fun()函数不接受2个参数。
fun(1,2,3); //函数占位参数,函数调用时必须写够参数。
}
4:默认参数和占位参数
void func(int a,int b,int = 0)
{
cout<<"a="<<a<<"b="<<b<<endl;
}
void main()
{
func(1,2); // √
func(1,2,3); //√
}
意义:为以后程序的扩展留下线索,兼容C程序中可能出现的不规范写法。(不是我说的,老师说的
![大笑](http://static.blog.csdn.net/xheditor/xheditor_emot/default/laugh.gif)
5:函数重载
我觉得这个有必要单独拉出来总结一下,下次见