引用变量

重新温习了一次。把笔记贴出来。

引用变量

摘自《C++ Primer Plus 5th》中文版,p225起

By CHYGO,
Oct 29th, 2010

 

1.引用变量的主要用途:

       用作函数的形参,通过将引用变量用作参数,函数将使用原始数据而不是其拷贝。

2.引用变量用法

创建变量的引用:int& a = b;(是将a的类型声明为int&,即int变量的引用

注意:在声明变量的引用时必须初始化(如之前例句)

 
 
 
  
int a;
int & b;
a
= b; // should not do this

 

3.只能通过初始化声明来设置引用,不能通过赋值来设置

(1)int& a = b;等同于int* const a = &b;

(2)只能通过初始化来设置引用,不能通过赋值来设置

 
 
  
int b = 100 ;
int & a = b;
int c = 50 ;
a
= c; // this can change the b’s value to 50

 

 

4.将引用用作函数参数

(1)引用传递:将引用用作函数参数,使得函数中的变量名称为调用程序中的变量的别名。

 

(2)按值传递与按引用传递:

 
 
 
  
/* 按值传递:2个变量,2个名称 */
void sneezy( int x)
int main
{
int times = 20 ; // 创建times变量,赋值20给它
sneezy(times);

}

void sneezy( int x)
{
// 创建x变量,将传递来的值20赋给它
}

 

 

 
 
 
  
/* 按引用传递:1个变量,2个名称 */
void sneezy( int x)
int main
{
int times = 20 ; // 创建times变量,赋值20给它
sneezy(times);

}

void sneezy( int & x)
{
// 使x成为times的别名
}

 

 

(3)常量引用

       如果程序员的意图是让函数使用传递给它的信息,而不对这些信息进行修改,同时又想使用引用,则应使用常量引用。

定义方式为:

 
 
 
  
double refcube( const double & ra);

 

 

(4)临时变量、引用参数和const

       仅当参数为const引用时,如果实参与引用参数不匹配,C++将产生临时变量。

两种情况:

a.实参的类型正确,但不是左值。

左值参数:可被引用的数据对象,如:变量、数组元素、结构成员、引用和被解除引用的指针。非左值包括:字面常量和包含多项式的表达式

b.实参的类型不正确,但可以转换为正确的类型。

如:
 
 
代码
 
   
double refcube( const double & ra)
{
Return ra
* ra * ra;
}

long edge = 5L ;
double side = 3.0 ;

double c1 = refcube(edge); // ra is a temporary variable
double c2 = refcube( 7.0 ); // ra is a temporary variable
double c3 = refcube(side + 10.0 ) // ra is a temporary variable

 

注意:如果接受引用参数的函数的意图是修改作为参数传递的变量,则创建临时变量将阻止这种意图的实现。

 

(5)应尽量使用const

a.使用const可以避免无意中修改数据的编程错误;

b.使用cosnt使函数能够处理const和非const实参,否则只能接受非const数据;

c.使用const引用使函数能够正确生成并使用临时变量。

5.将引用用于结构

       引用非常适合用于结构和类。引入引用的目的主要就是用于这些类型。

有如下代码:

 
 
 
  
struct sysop
{

int used;
}

const sysop & use(sysop & sysopref)

 

通常,返回机制将返回值复制到临时存储区域中,随后调用程序将访问该区域。而返回引用则意味着调用程序将直接访问返回值。

 

const的意思是:不能使用返回的引用来直接修改它指向的结构。

 
 
 
  
use(looper).used = 10 ; // can not do this

 

 

6.引用,指针和按值传递该什么时候使用?

(1)使用引用参数的主要情况:

a.程序员能够修改调用函数中的数据对象;

b.通过传递引用而不是整个数据对象,可以提高程序的运行速度。

(2)对于使用传递的值而不做修改的函数:

a.数据对象很小,如内置数据类型或小型结构,则按值传递;

b.数据对象是数据,使用const 指针;

c.数据对象是较大的结构,使用const指针或const引用;

d.数据对象是类对象,使用const引用。

(3)对于修改调用函数中数据的函数:

a.数据对象是内置数据类型,使用指针;

b.数据对象是数组,使用指针;

c.数据对象是结构,使用指针或引用

d.数据对象是类对象,使用引用。

速记:内置类型常规处理,数组用(const)指针,类对象用(const)引用,结构两者都可以。

转载于:https://www.cnblogs.com/CHYGO/articles/1867543.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值