原创博客:转载请标明出处:http://www.cnblogs.com/zxouxuewei/

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.实参的类型不正确,但可以转换为正确的类型。

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

(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.数据对象是类对象,使用引用。

c++变量的引用---5的更多相关文章

  1. Makefile笔记之一 ------ 变量的引用及赋值

    1.变量的引用方式: "$(变量名)"或者"¥{变量名}" 例如: ${Objs}就是取变量Objs的值 注意: 当变量名为单字符是可以采用:"$a& ...

  2. GNU make使用变量⑤变量的引用、定义等

    在 Makefile 中,变量是一个名字(像是 C 语言中的宏),代表一个文本字符串(变量的值).在 Makefile 的目标.依赖.命令中引用变量的地方,变量会被它的值所取代(与 C 语言中宏引用的 ...

  3. Python中的变量、引用、拷贝和作用域

    在Python中,变量是没有类型的,这和以往看到的大部分编辑语言都不一样.在使用变量的时候,不需要提前声明,只需要给这个变量赋值即可.但是,当用变量的时候,必须要给这个变量赋值:如果只写一个变量,而没 ...

  4. 深入理解PHP原理之变量分离/引用

    19 Sep 08 深入理解PHP原理之变量分离/引用(Variables Separation) 作者: Laruence(   ) 本文地址: http://www.laruence.com/20 ...

  5. CI源码引用使用--php引用demo,静态变量和引用关系

    CI源码引用使用在Common.php中,加载配置和类的方法 function &test() {     static $a = '';     if (!$a) {         $a ...

  6. php变量的引用及函数的引用

    Php变量的引用及函数的引用放回 变量的引用    $a="ABC";    $b =&$a;    echo $a;//这里输出:ABC    echo $b;//这里输 ...

  7. c++,基类声明的指针变量和引用类型变量可以指向派 生类的对象

    基类声明的指针变量和引用类型变量可以指向派生类的对象,而反过来派生类的指针却不能指向基类变量. 这与基类和派生类之间,被允许的赋值方向是相反的. 但是从逻辑上很容易推敲其合理性.

  8. final修饰的变量是引用不能变还是对象的内容不能变?

    int a=1;此时a是变量: StringBuffer a=new StringBuffer();此时a就是引用变量,可以说是a引用String对象,通过a来操作String 对象 final St ...

  9. C++ 变量的引用 &

    创建变量的引用:int &a = b; 引用变量a是变量b的别名:是传址操作,把变量b的数据地址赋值给变量a,a和b指向同一个数据 主要用途:用作函数的形参,通过将引用变量用作参数,函数将使用 ...

随机推荐

  1. 创建一个ROS msg

    1. msg •msg:msg文件是简单的文本文件,用于描述ROS中消息(消息的各个参数项).用于为不同的编程语言生成有关消息的源代码. •srv:描述服务的文件,由两部分组成:请求和反馈: msg文 ...

  2. vue js 用nodejs的依赖包 --2016-08-23

     今天被nodejs包依赖坑了一下,上次上传的项目突然运行不起来了,原来是package.json中定义了使用最新版本的依赖,而最新版本有可能调整了结构或者改了api,比如vux把flexbox-it ...

  3. AFNetworking、MKNetworkKit和ASIHTTPRequest对比

    之前一直在使用ASIHTTPRequest作为网络库,但是由于其停止更新,iOS7上可能出现更多的问题,于是决定更换网络库. 目前比较流行的网络库主要有AFNetworking和MKNetworkKi ...

  4. python解无忧公主的数学时间097.py

    python解无忧公主的数学时间097.py """ python解无忧公主的数学时间097.py codegay 2016年3月30日 00:17:26 http:// ...

  5. poj1014 dp 多重背包

    //Accepted 624 KB 16 ms //dp 背包 多重背包 #include <cstdio> #include <cstring> #include <i ...

  6. PAT 05-树7 File Transfer

    这次的题让我对选择不同数据结构所产生的结果惊呆了,一开始用的是结构来存储集合,课件上有现成的,而且我也是实在不太会,150ms的时间限制过不去,不得已,看到这题刚好可以用数组,结果7ms最多,有意思! ...

  7. pl/sql Developer 9注册码

    Product Code:46jw8l8ymfmp2twwbuur8j9gv978m2q2duserial Number:307254password:xs374ca

  8. codevs 5429 完全背包

    单调队列优化. 好像有点烦...调了许久. #include<iostream> #include<cstdio> #include<cstring> #inclu ...

  9. susy 学习之进阶

    由于现在对susy的教程有限,只有官网指南性质的文档,然后就是w3cplus对她的翻译,所以我从零安装susy并调试项目到与从github上克隆susy项目同时进行,主要是为了参考susy放在git上 ...

  10. 作业2-浅谈数组求和java实验

              这次作业呢,我是用java来写的,虽然java只是自己假期里看的一点点,但是人总是要接触新事物的,应该不断向前.          说明:这次作业有一个遗憾,就是我花了一个下午真真 ...