您的位置:首页 > 编程语言 > C语言/C++

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

2017-12-21 12:35 771 查看
一、默认值
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语言不能重载。
例:C:int
sum(int,int) ----> _sum()
C++:int sum(int,int) ----> _sum_int_int()
 
四、const
1、C语言: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
和 返回值
寄存器带出的值不能取地址&
引用&的时候有临时变量产生
 
 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐