C++ 引用 “int a;”,编译器会报错,需要初始化 int a;声明不可以。int a;编译会直接报错(GCC 提示a declared as reference but not initialized)。引用必须在声明时绑定到一个对象,而且绑定之后不能再改绑到别的对象。正确的初始化方式intx10;intax;// 最常见的写法intb(x);// 直接初始化intc{x};// 列表初始化(C11)绑定规则intr110;// 错误:非 const 左值引用不能绑定字面量或临时对象constintr210;// 正确:const 引用可以绑定临时对象intr310;// 正确:右值引用(C11)const int r2 10;中,临时对象的生命周期会被延长到与r2相同。引用不能改绑intx1,y2;intax;ay;// 不是让 a 改去引用 y,而是把 y 的值赋给 x// 执行后 x 2这是初学者很容易混淆的地方:对引用的赋值操作,作用的是被引用的对象,而不是引用本身。可以先不写初始值的几种场合以下场合看起来没有初始化,但其实只是绑定发生在别的地方,并不是真的未初始化。1. 函数参数voidf(inta);// 调用时由实参完成绑定2. 类成员引用类型的成员必须在构造函数的初始化列表中绑定(或者提供默认成员初始值),不能在构造函数体内赋值:structS{intref;S(intv):ref(v){}// 正确:在初始化列表中绑定};3.extern声明externinta;// 在其他编译单元中定义并初始化总结写法是否合法说明int a;不引用必须初始化int a x;是绑定到左值int a 10;不非 const 左值引用不能绑定字面量const int a 10;是const 引用可绑定临时对象int a 10;是右值引用(C11)一句话记忆:引用 某个对象的别名,有了对象才能有别名,所以必须在声明时初始化,且终身不变。