C/C++的区别(默认值、内联函数、函数重载、const、引用、参数、返回值)


一、默认值

1、C语言

C89标准无默认值

C99标准有默认值

最新的标准:C11

2、C++

C++99标准

C++11标准

从右向左依次给出默认值

参数的默认值只能给1次

 

例:int Sum(int,int);

int main()

{

Sum(10,20);

Return 0;

}

 

编译时

链接出错:因为函数没有定义(实现),符号解析出错

 

二、内联函数(inline)

inline函数:在函数调用点直接展开

(1)内联函数修饰声明时无作用

(2)Debug版本下无作用

1、内联函数与普通函数的区别

普通函数:(1)函数调用过程

         2)函数执行过程

内联函数:无函数调用过程

2、内联函数和static修饰的函数的区别

(1)static修饰的函数有堆栈调用过程,内联函数没有函数调用过程

(2)static修饰的函数有符号生成(local),内联函数无符号生成

共同点:本文件内部有效

3、内联函数和宏定义的区别

(1)宏在预编译期间,无类型检查,无安全检查

inline在编译期间,有类型检查,有安全检查

(2)宏不能调试,内联函数inline可以调试

4、内联函数的缺点:空间换时间

                代码膨胀为代价来提高效率

                缺少函数调用的开销

5、什么情况用inline合适?

   当函数调用开销  远大于  函数执行的开销

6、所有函数都能设成inline函数吗?

   如:递归、循环  编译器不会将它们在函数调用点展开



三、函数重载





1、函数重载的条件

(1)函数名相同

(2)形参类型不同、形参个数不同、形参类型顺序不同

(3)相同作用域下

 

C/C++由于生成符号的方式不同,C语言只和函数名有关,所以C语言不能重载。

例:Cint sum(int,int) ----> _sum()

C++:int sum(int,int) ----> _sum_int_int()

 

四、const

1C语言:const:常变量

           编译期间,看这个变量有无作左值

2、C++:const:常量

          1)必须初始化

         2)编译时:对于所有用到该常量的地方,直接进行替换

         3)const常量:可以作数组的下标

         2)拿变量初始化常量时,const退化成常变量

             例如: int b = 10;

                    const int a = b ;

         5)const修饰的符号是一个local

 

五、引用

表层:起别名

底层:指针指向

例子:void Swap(int &pa,int &pb)

      {

        int tmp = pa;

          pa = pb;

          pb = tmp;

      }

(1)引用必须初始化

(2)引用不能再修改,再引用

(3)引用占内存

(4)编译期间处理的时候,对所有使用引用的地方,编译器默认加一个解引用

(5)引用不参与类型,要和类型结合在一起

六、参数

1、实参传形参的过程:初始化的过程

2、const不会对实参有影响

3、不能返回局部变量的指针或引用

七、const 和 返回值

寄存器带出的值不能取地址&

引用&的时候有临时变量产生

 

 

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值