一、名字修饰
1、在C语言中,名字修饰只是在函数名之前加下划线,所以只要函数名相同,就会导致冲突;
2、在C++中,名字修饰是“?函数名@域名1@域名2…@@参数列表@Z”的格式构成的,包含:a:函数名,b:所在域,c:参数列表,所以在C++中,以上三个必须完全相同,才会出现冲突,这就是函数重载的原理;
二、引用
1、引用是给一个变量起别名,两个名字都指一个变量,操作谁,在结果上是一致的;
2、引用是代替指针完成跨栈操作的,所以它具备指针跨栈的一切特点;
3、引用的底层实现实际是指针;
4、在语法概念上引用就是一个别名,没有独立空间,和其引用实体共用同一块空间,在底层实现上实际是有空间的,因为引用是按照指针方式来实现的。
特点:
1、引用在定义时,必须初始化;
2、一个变量可以有多个引用;
3、一个引用一旦引用了一个变量,就不能再引用其他变量了。
引用比指针使用起来相对安全,因为指针有可能存在其他指向,但是引用不会;
三、内联函数
1、调用时不创建新栈而直接在调用处展开的函数叫做内联函数,关键字为inline;
2、内联函数是一个对编译器的建议,如果函数过于复杂,编译器会不接受你的建议,而处理成普通的函数;
3、inline函数可以代替带参数的宏。
四、auto关键字(C++11新增)
数组的元素类型不能包含auto类型;
1、auto是一个类型修饰符,他会根据你给变量初始化的值的类型来决定自己是什么类型;
2、auto定义的变量必须初始化,否则不知道auto是什么类型;
3、auto可以连续定义变量,类型由第一个定义的变量决定,后续不能违背这个类型,但是可以定义对应类型的指针和引用;
注:
auto不能做函数的参数类型;
auto不能参与数组的类型;
C++11后,auto会失去原本的含义;