C++对C的函数扩展

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程序中可能出现的不规范写法。(不是我说的,老师说的 大笑

5:函数重载

我觉得这个有必要单独拉出来总结一下,下次见偷笑

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值