引用:
int value = 10;
int & val_1 = value; // OK
int & val_2 = &value; // Error </span>
int value = 10;
int * ptr = &value; // OK ::&:取址</span>
int * &p_val_1 = ptr; // OK ::引用</span>
引用与Const 引用:
int value = 10;
int & val_1 = value;
int & val_2 = 12; // error ::12不是左值
int & val_2_1 = value + 1; // error ::value + 1不是左值</span>
const int & val_3 = value;
const int & val_4 = 14; // OK ::临时变量:int temp = int(14);
const int & val_4_1 = value + 1; // OK ::临时变量:int temp = int(value + 1);
// val_4 = val_4 + 1;<span style="white-space:pre"> </span>// Error ::常引用
int const & val_5 = 14; // OK ::临时变量:int temp = int(14);
int const & val_5_1 = value + 1; // OK ::临时变量:int temp = int(value + 1);
//val_5 = val_5 + 1; // Error ::常引用
总结:1、一般引用的初始化的表达式必须是左值2、 const的引用就没有这么多限制
【 val_4为const引用,这里的14会赋值前的工作如下:
int temp = int(14); //产生临时变量,构建一个temp的变量
const int & val_4 = temp; // 再通过temp初始化const int&
const引用 与 const指之间的扯淡纠纷
int value = 10;
int value_1 = 11;
// int * & val_1 = &value; // Error ::&value不是左值
// const int * & p_val_1 = &value; //Error ::&value不是左值
int * const & p_str1 = &value; // Error
const int * p_val = &value;
const int * & p_val_1 = p_val;
int * const & p_val_2 = &value; // OK
const int value = 10;
const int * const & p_str2 = &value; //OK</span>