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
和 返回值
寄存器带出的值不能取地址&
引用&的时候有临时变量产生
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
和 返回值
寄存器带出的值不能取地址&
引用&的时候有临时变量产生
相关文章推荐
- 位运算+引用+const+new/delete+内联函数、函数重载、函数缺省参数
- C++ 引用、内联函数、函数默认参数、函数重载
- VS2010 C++ 学习笔记(一) 引用 函数参数默认值 函数重载 内联inline
- 【从C到C++学习笔记】引用/const引用/引用传递/引用作为函数返回值/引用和指针的区别
- C++ const类型引用做函数参数
- C++语言笔试题目 C++中为什么用模板类&& 类中如何使用const &&函数重载,我们靠什么来区分调用的那个函数?靠返回值判断可以不可以
- C++函数中返回引用和返回值的区别
- C++之函数参数的值传递、指针传递以及引用传递的区别和联系
- [C/C++] const 详解(修饰变量、输入参数、返回值、成员函数)
- C++面向对象、const和指针混用、函数参数的默认值
- C++函数参数和返回值三种传递方式:值传递、指针传递和引用传递(着重理解)
- [C/C++] const 详解(修饰变量、输入参数、返回值、成员函数)
- 北大 C++ 1.7 内联函数、函数重载和函数缺省参数
- [C++学习笔记]--内联函数、函数重载、函数defualt参数
- C++中 函数的升级---内联函数、默认参数、占位参数、函数重载、C与C++结合
- C++函数参数和返回值三种传递方式:值传递、指针传递和引用传递(着重理解)
- C++函数参数传值OR传引用_C++函数返回值返回对象OR对象引用
- C++函数参数中引用和指针区别
- C++文件头,命名空间,new和delete,内联函数,引用,函数重载,构造函数和析构函数,深拷贝和浅拷贝,explict,this指针
- 总结1->sizeof-默认值参数的函数-static-指针和引用概念-const-CAS