1、默认值
默认值需从右至左给出,不能跳跃性的给出。
声明可写多次,但默认值只能给一次。
int sum(int a,int b=10);//√
int sum(int a=20,int b);//error
2、内联函数
①C++中的内联函数,在调用点把代码直接展开(编译阶段)。
感觉和#define类似,那么这两个之间有什么区别呢?
宏:在预编译阶段进行替换,没有进行类型检查,所以不安全
内联函数:在编译阶段处理,进行类型检查,安全性好,所以又叫更安全的宏
例:
#define Max(a,b) a>b ? a:b
..
int a=MAx(10,20)+20;//a=10>20?10:40
..
②内联函数和普通函数的区别
内联函数不需要开辟栈桢,清理栈桢,而普通函数需要进行栈桢的开辟和清理。
内联函数定义一般都写在头文件,普通函数只在头文件中声明。
普通函数生成的符号属性是global,inline不生成符号。
如果栈桢开辟的开销 > 函数执行的开销,那么可将此函数写成inline函数。
③inline和static函数的区别
static函数需要开辟栈桢,清理栈桢
static函数生成的符号属性是local,inline不生成符号。
相同点:只在本文件有效。
④inline只在release版本生效,debug版本不起作用
inline知识给编译器一个建议
⑤inline函数对递归函数不起作用
因为递归函数在编译阶段不能知道它调用的次数,就无法展开代码,所以inline函数对递归函数不起作用。
3、函数重载
C语言中函数产生符号--->函数名称
C++中函数产生符号--->函数名称+形参列表
例:
bool Compare(int a,int b)//Compare_int_int
{
return a==b;
}...//还有double,char*类型,实现都一样在此就不写了
int main()
{
bool Compare(int a,int b);//在局部声明了之后,调用时会调用形参是int的
Compare(10,20);//Compare_int_int
Copmare(10.5,20.5);//Compare_double_double double可以强转成int
Compare("hello word");//Compare_char_char 会出错 因为char*不能转成int
}
类型转换:
蓝色:无条件转换,自动转换
红色:强制类型转换
例:
unsigned a=1;
char b=-1;
char c=a>b?'a':'b'
cout<<c<<endl;
输出:b
short a=1;
char b=-1;
char c=a>b?'a':'b'
count<<c<<endl;
输出:a4、C和C++的相互调用
extern 'C'告诉编译器按照C语言的规则生成符号
(1)在C++中调用C
extern ‘C’
{
int sum(int a,int b);//此函数的实现在.c里面
}
int main()
{
sum(20,30);
}
(2)在C中调用C++
.c中有一个声明,.cpp中定义,想要在.c中调用
解决方案:①已知cpp中的定义以及实现,把定义及实现括在extern 'C'中
②不知道.cpp中的实现
加一个中间文件(.cpp)
.cpp中
#ifdef_cplusplus
extern 'C'
{
#endif
int sum(int a,int b)
{
return a+b;
}
#ifdef_cplusplus
}
#endif
.cpp(中间文件)
int sum(int a,int b);
extern 'C'
{
int mysum(int a,int b)
{
return sum(a,b);
}
}
.c文件
int mysum(int a,int b);
int main()
{
mysum(a,b);
return 0;
}
5、const
在C语言中:
不一定要初始化,const修饰的量叫做常变量。const修饰的常变量定义以后,不能做左值,与普通变量编译方式一样。
在C++中:
const修饰的量叫常量,所有使用常量名的地方全部替换成常量的初始值。所以在C++中可以定义int arr[a];而C中不行。
需要注意的是,引用一个编译阶段不明确的值的时候常量就退化成为常变量。
如:
int b=20;
const int a=b;
int arr[a]={0};//这句就会出错
6、引用(&)
取地址的符号和引用的符号一样都是&,区分很简单,&前面有类型是引用,没有是取地址。
(1)定义引用必须初始化
(2)初始化的值必须要能取地址
(3)引用不能改变,int &a=b;&a=c;//error
(4)访问引用变量,永远访问的是它所引用的内存