C++学习第八章 2022.9.22( 8.2)

  • 8.2 引用变量

  C++新增的一种复合类型——引用变量。例如:若将twaim作为clement变量的引用,则可以交替使用twaim和clement(可以看作一个人名字和绰号都可以表示是这个人)。通过将变量用作参数,函数将使用原始数据,并非其副本。所以除了函数指针外,使用引用可以用来处理大型结构数据,是一种比较方便的途径。

8.2.1 创建引用变量

C++中使用&符号表示变量的地址。不仅如此,C++中给符号&增加另一种用法,将其用来声明引用。例如:将nums作为numbers变量的别名:

int numbers;
int & nums=numbers;  
/*上面的&符号不是地址运算符,这个需要注意。
  就类似char*指向的是指向char的指针,int&
  是指向int的指针。(它们是指向同一个值和内存单元)
*/

引用刚刚接触时,看上去可能有些像指针,实际上还是不同的。除了表示上面的不同以外,还有一些差别。例如,必须在声明引用时初始化,而不是像指针那样,先声明,再赋值。

int A;
int & a;
a=A; //错误,不能这样做

PS.必须在声明引用变量时进行初始化。

引用使用起来更像是const指针,必须创建时进行初始化,与一个变量相关联后,必须绑定。

  • 8.2.2 将引用用作函数参数

引用多作为函数参数,使得函数中的变量名成为调用程序中的变量的别名。这种传递参数的方法称为按引用传递。具体如何,如下所示:

/**********按值传递************/
void urban(int x);
int main(){
    int times=10;
    Zhuzhou(times);
    //创建变量“times”,
    //将值10赋给它
    .....
}
void Zhuzhou(int x){  
//创建x变量,将传递来的10的值赋给它
    .....
}
/*****************************/

/*********按引用传递***********/
void valige(int &x);
int main(){
    int times=10;
    ZZ(times);
    //创建变量“times”,
    //将值10赋给它
    .....
}
void ZZ(int &x){
//使x成为times的别名
    .....
}

交换两个变量的值,对使用引用和使用指针做一下比较。交换函数必须能够修改调用程序中的变量的值。这样做意味按值传递变量将不管用,应为函数将交换原始变量副本的内容,而不是变量本身的内容。但是在传递引用时,函数将使用原始数据。另一种办法是使用传递指针来访问原始数据。

  • 临时变量、引用参数和const

如果实参和引用参数不匹配,C++将会生成临时变量。

如果引用参数是const,则编译器将会在两种情况下生成临时变量:

  1. 实参类型正确,但不是左值。
  2. 实参类型不正确,但可以转换为正确的类型。

PS:关于左值。左值参数是可以被引用的数据对象。例如,变量、数组元素、结构成员等。非左值包括字面常量(用引号括起来的字符串除开,他们有由地址来表示的)和包含多项表达式。

对于形参为cosnt引用的C++函数而言,如果实参与类型不匹配,则其操作行为近似于按值传递,为确保原始数据不会被修改,将使用临时变量来存储值。

PS:如果函数调用的不是左值或者与相应的const引用参数的类型不匹配,则C++将创建类型正确的匿名变量,将函数调用的参数的值传递给该匿名变量,且会让参数来引用该变量。

  • *尽可能使用const*
  1. 使用const可以避免无意中修改数据的编程错误;
  2. 使用const可以使函数能够处理const和非const实参,否则将只能接受非const数据;
  3. 使用const引用使函数能够正确生成并使用临时变量。

>C++11 右值引用 

这种引用可以指向右值,使用&&声明的:

double && ref=std::sqrt(25.00);  //不允许double &
double n=15.0;
double && kaf=3.0*n+15.0;  //不允许double &
std::cout<<ref<<'\n';   // 5.0
std::cout<<kaf<<'\n';   //  60.0

右值引用主要为了让库设计人员提供操作更加有效率。

<引用参数、变量,临时变量,const引用>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值