c和c++的区别(一)

1、函数参数的默认值(c++特有)

在函数声明或定义的地方,给函数参数加上默认的参数,在函数调用处,可以不必给该参数传值,会默认传入默认值。

  • 参数默认值的赋值

必须从右向左,依次赋值。

  • 参数默认值的作用域

在同一作用域中,函数参数的默认值,不可以重复赋值

2、宏函数和内联函数(c++)

宏函数:

优点:1、不存在栈帧的开辟

2、不存在参数的带入

3、不存在参数的带出

4、不存在参数的清除

缺点:1、不存在安全检查(类型检查)

2、不可以调试

内联函数:在普通函数前加上inline即可构成内联函数,内联函数会在调用点展开

问题1:内联函数在什么时候展开?

在编译期展开。

不在预编译期展开的原因:因为预编译期不进行类型检查,如果在预编译期展开就无法进行类型检查,就和宏函数一样了;

不在链接期展开的原因:因为在链接时,指令都已经生成完成,在此时展开并没有什么用。

注意:

        符号无法使用有两种情况1、符号不存在2、符号不允许使用。符号分为local类型和global类型,local类型符号只允许在指定作用域使用,比如静态函数在编译期间生成的就是一个local符号,只允许在本文件引用。

       内联函数在realse版本不产生符号,不可以调试。

       在debug版本产生一个local类型的符号,可以调试,会进行栈帧开辟等动作。

inlinestatic宏函数

debug版本产生local符号

realse版本不产生服啊后

产生local符号不产生符号

debug版本进行栈帧开辟等操作

realse版本直接在调用点展开(编译期)

进行栈帧开辟操作在调用点直接展开(预编译期)
dubug版本可以调试可以调试不可以调试
有类型检查有类型检查没有类型检查

问题2:内联函数一定会展开吗?

       inline是对编译器的一个建议,编译器会在具体情况考虑是否处理成内联,比如在递归的时候使用内联函数,在编译期间无法知道递归的次数,就无法确定展开多少次,无法展开。   

3、函数重载(c++)

  • c语言生成符号依靠函数名。
  • c++依靠函数名和参数列表生成符号

函数重载有以下要素:

  1. 函数名相同
  2. 参数列表不同
  3. 处于同一作用域

注意:传参时的类型转换,容易出现多个重载函数都匹配的情况。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值