c++引用变量

1.引用基本的概念

int& a = b;

指创建了一个 指向int的引用a,a是复合类型 int& ;(类似指针也是符合类型 int*)

a指向b,即a是b的别名;

必须在声明时就将引用初始化,不能先声明再初始化;(c++ pp page 211)

2.常量引用 const int &

在引用做函数的形参时,如果不像函数对实参进行修改,就用常量引用做形参(c++ pp page 215)

double refdube(const double &ra);

3.当且仅当函数的形参类型为const 引用时,如果实参与形参不匹配,c++将生成临时变量。

否则,若形参类型不为const 引用且实参与形参不匹配,则警告或报错。(c++ pp page 215)

应尽可能的在函数形参类型上使用const引用,因为

const引用的形参类型可以接收const和非const实参;而普通引用类型不能接收const实参;

---------------------------------3/17------------------------------

如果数据类型本身并不是指针,则可以将const数据或非const数据的地址赋给指向const的指针,但只能将非const数据的地址赋给非const指针。p183

此外,对于引用做参数也是该情况:const引用做形参可以处理常量和非常量实参,普通引用做形参只能处理非const实参。p216

即const做形参优势可以体现在指针和引用两个方面。

---------------------------------------------------------------------

此外,使用const引用类型还可以创建临时变量;

可以避免无意中修改实参变量的数据;(c++ pp page 216)

4.使用引用做形参、返回值的效率更高,因为不用copy原始数据的副本;

但注意,返回值使用引用类型时,注意不能返回一个指向临时变量的引用,这样会引发错误:(c++ pp page 219)

const int & clone(int & a)
{
    int b;
    b = a;
    return b;
}

该函数返回一个指向临时变量 b 的引用,函数运行完毕后其将不再存在。

5.基类引用可以指向派生类对象。(c++ pp page 223)

6.右值引用(c++ pp page 216)

void stove(double && r){...}
void stove(const double & r){...}
int main() { double x = 1.5; double y = 2.5; stove(x+y);//calls void stove(double && r){...} }

上述代码中,如果没有定义void stove(double && r){...},stove(x+y) 将调用 void stove(const double & r){...}(则将生成临时变量,常量引用形参r指向该临时变量,具体见本文第三点 和c++ pp page 228)。

左值参数是可被引用的数据对象,例如变量、数组元素、结构成员、引用和解除引用的指针都是左值;

现在常规变量和const变量都可视为左值;

非左值包括字面常量(用引号括起的字符串除外,它们由其地址表示)和包含多项的表达式。(c++ pp page 215)

posted @ 2022-03-10 21:55  SanFranciscoo  阅读(305)  评论(0编辑  收藏  举报