1.引用?
引用的概念:引用就是被引用变量的别名,这就意味着被引用变量可以通过两个或多个命名标识符访问内存,故这些命名标识符的内存地址是相等的,引用可以视为隐式的指针变量。但是没有指针变量的解引用和对变量的取 地 址的麻烦。下面是引用变量的一些结论和使用误区:
C1:引用变量必须在声明的时候就有初值,这个初值有两层含义。被引用内存的值和地址。并且,一旦引用,终身引用。即引用变量一旦引用了一个内存,不能再引用别的内存。注意和用别的变量来赋值的区分。比如:
T x=...,y=...
T& refx=x; 表示refx和x共享同一片内存。
refx=y; 表示修改引用内存中的值,而不是该向引用y的内存。等价于x=y;
C2: 同指针变量一样,多个引用变量可以共享统一内存,在这些引用变量的任何一个对共享内存(数据)的修改在其他的所有引用变量可见。
C3:const T&不能修改引用内存(内存中的数据),但是可以读取。
C4 :引用变量的对象可以提高函数参数传递和从函数返回的效率,从而避免了赋值内存,而是复制内存地址,相当于在同一内存上的操作。对于对象而言,更是避免了函数参数(以对象)传递和返回对象因为赋值对象而调用复制构造函数的开销。但是非const引用可能不经意间修改内存,那么const T&更为常用。const T&的特点那就是更安全、更高效。
C5:引用可以想象成不能改指的指针。T* const.
C6:基于申明引用的同时就要初始化引用变量(让它引用被引用变量的内存)考虑,类中的引用数据成员必须用成员初始化器初始化引用数据成员。事实上,使用成员初始化器初Ctor,始化成员的好处远不止这些。
C7:const T&可以引用右值(又叫右值引用),右值通常是一些const对象/变量、常量、临时变量或对象、未命名的内存(无名变量)等,而左值引用恰好相反,它必须引用一个清晰定义了的内存,即合法的命名内存(因为计算机按名存取变量)。
C8:可以对任意数据类型的变量引用,甚至是指针变量(指针的引用,引用的是一个指针变量)。但是无法声明引用的引用(&&)和指向引用的指针。
C9:最后一点,引用应该尽可能引用一个合法标识符标示的未被释放(注销或销毁)的内存。因为,被引用的变量消失,引用失效。这可能导致一些难以预料或不可诊断的BUG,或一些标准以外的未定义行为发生。
总之,决定引用变量引用哪个内存(变量)的唯一之处就是在声明引用变量时,初始化的那个内存缓冲区。
编程箴言,引用比指针安全,const引用比非const引用安全。引用劣于指针的一点大概就是,指针变量可以改指,引用变量绝不可能改指。
2.文本?
3.文本表达式?
4.静态(static)?
5.外部(extern)?
6.类型定义(typedef)
7.类型别名(aliases)?
8.类型转换?
9.作用于解析?
10.统一初始化?
11.可选函数语法?
12.空指针文本?
13.尖括号?
14.初始化列表?
15.显示转换运算符?
16.特性?
17.用户自定义的文本?
18.可变参数列表?
19预处理宏?