C++ 引用详解
引用是C++引入的新类型,是对一块内存空间起的一个别名,主要分为 左值引用 、 常量左值引用 和 右值引用 三种。C++语言标准规定,一个引用不是左值引用就是右值引用。其中, 函数引用 是一种特殊的左值常量引用; 万能引用(universal reference) 是一种特殊的引用类型,既可以表示左值引用,也可以表示右值引用,具体的引用类型最终会由编译器决定,判断依据是 引用折叠(reference collasping) 。 一、左值引用 一句话总结:左值引用是一级指针的语法糖 。只有左值才能绑定到左值引用上。 int &a = 0; // a是int*的语法糖。 int *b = nullptr; int *&b_ref = b; // b_ref是int**的语法糖。 大量的资料表示,编译器中的引用是以指针实现的。然而,左值引用必须要初始化后才能使用,否则会引发编译错误(这与指针不同,野指针或者空指针即便不初始化也可以通过编译),所以可以这样理解: 如果代码通过了编译,那么引用的对象一定是可用的 。然而,凡事有利必有弊,这样的特性也会导致问题。最典型的问题是: 引用无法表示空值 。例如,有些对象的成员并不是必需的,在复制文件时并不一定需要提供进度通知,应该由用户自行决定,而不是强制要求提供: class file_copier { progress& _progress; /