引用的特性
引用在定义时必须初始化
一个变量可以有多个引用
应用一旦引用一个实体, 再不能引用其他实体
引用的使用
引用在实践中主要是引用传参和引用返回值中减少拷贝提高效率和改变引用对象时间同时改变被引用对象
引用传参和指针传参功能相似,引用传参相对方便一些
引用和指针在实践中相辅相成,功能有重叠性,但各有特点,互相不可替代. *(c++中引用定义后不能改变指向)
const引用
可以引用一个const对象, 但必须用const引用. const引用也可以引用普通对象. 因为对象的访问权限在引用过程中可以缩小,但不能放大
在c++中临时对象具有常规性 所以在对具有常规性的对象进行引用时需要加上const
*(所谓临时对象就是编译器需要一个空间暂存表达式的求值结果时,临时创建的一个未命名对象)
指针和引用的关系
语法概念上 引用是一个变量的取别名不开空间, 指针是存储一个变量的地址, 要开空间
引用在定义时必须初始化, 指针建议初始化,但语法上不必须
引用在初始化时引用一个对象后, 就不能再引用其他对象; 而指针可以不断的改变指向对象
引用可以直接访问指向对象, 指针需要解引用才是访问指向对象
sizeof中含义不同,引用结果为引用类型大小,但指针始终是地址空间所占字节个数
(32位平台下占4个字节,64位下是8 btye)
指针很容易出现野指针和空指针的情况,引用出现的情况很少,相对安全一些
inline
用inline修饰的函数叫做内联函数,编译时c++编译器会在调用的地方展开内联函数,这样调用内联函数就需要建立栈帧了,可以提高效率
inline对于编译器来说只是一个建议, inline适用于频繁调用的短小函数, 对于递归函数和一些比较多的函数前的inline会被忽略
c++所设计的inline目睹就是为了代替c中的宏函数 (因为宏函数的实现很复杂且容易出错)
inline不建议声明和定义分离到两个文件,分离会导致链接错误. 因为inline被展开, 就没有函数地址,链接时对出现报错
nullptr
c++11中引入nullptr, nullptr是一个特殊的关键字,是一种特殊类型的字面量,它可以转换成任意其他类型的指针类型,
使用nullptr定义空指针可以避免类型转换的问题, 因为nullptr只能被隐式地转换为指针类型,而不能被转换为整数类型