【C++】变量(七) 参量
来源:互联网 发布:linux c 服务器开发 编辑:程序博客网 时间:2024/05/21 06:40
参量作为函数中的参数,是函数的重要组成部分。但是,这里先简单介绍一下,参量作为一个独立的变量的应用。
首先,来了解下什么是参量。参量是在变量名前加上“&”符号而定义的一种复合的类型,这个是参照于其他类型的基础上的类型。我们不能参照参量来定义,但是可以参照任何其他的数据类型来定义参量。
参量的初始化一般使用跟他相同类型的变量来进行。如:
int ival=1024;int &refval=ival; //ok:refval refers to ivalint &refval2; //error: a reference must be initializedint &refval3=10; //error: initializer must be an object
在这里,我们甚至可以认为,参量就是与他捆绑的变量的别名,任何对参量进行的操作,其实都是对基础变量的操作。例如:
int ival=1024;int &refval=ivalrefval+=2;int ii=refval;
可以看到,我们把refval加上2然后赋给了ii,事实上,这个就是把ival加上2再赋值给ii。
需要注意的是,一旦参量被初始化了,那么它就会一直跟基础变量保持绑定,不能让它再和别的变量绑定了。
—————————————————————————————————————————————————
定义多个参量
我们同样可以定义多个参量,不过这些参量必须是同一类型的。当然,我们要在参量名前加上“&”符号:
int i=1024, i2=2048;int &r=i, r2=i2; //r is a reference, r2 is a intint i3=1024, &ri=i3; //define one object, and one referenceint &r3=i3, &r4=i2; //define two references
—————————————————————————————————————————————————
常参量与非常参量
首先,我们先介绍下常参量。
顾名思义,常参量就是指代常变量的参量。如下:
const int ival=1024;const int &refval=ival; //ok: both reference and object are constint &ref2=ival; //error: non const reference to a const object
上面的定义中,我们可以读取refval的值,但是不能写入,这是因为,我们不能对ival进行写入的操作,而参量refval是指代ival的。同样,用ival初始化ref2也是不可行的:ref2是一个明码(plain)、非常参量,所以它是可以写入的,而ival是一个常变量。所以,为了避免这样的情况发生,我们在定义常变量时不能使用明码。
常变量在定义时,是可以指代不同的类型或者指代一个右值的。
下面我们举个例子来说明:
int i=42;const int &r=42; //legal for const reference onlyconst int &r2=r+i;
正如上面显示的,因为常变量的指代的就是一个常量,所以,常参量指代一个常量也是合法的。但是,这仅仅适用于常参量,对于非常参量而言,这种定义会引起编译错误。
我们还是用一个例子来说明:
double ival=3.14;const int &ri=ival;
上面的定义,在编译时会被编译器理解为:
int temp=ival; //creat temporary int from the doubleconst int &ri=temp //bind ri to the temporary
在这里,temp不可知是常变量还是非常变量,所以ri也不可知。那么如果ri是非常变量,我们就可以对ri赋值。通过赋值改变ri的值,实际上就是改变temp的值,但是可见ival的值并不会改变。所以,原先期望程序实现的功能并没有实现。
综上所述,一个非常参量只能绑定在与它同类型的变量上,而一个常参量则可以帮顶在相关联类型的变量或者是右值上。
- 【C++】变量(七) 参量
- 函数的参量不能和变量同名
- Nginx 变量漫谈(七)
- Linux修改命令提示符(关于环境参量PS1)
- 可变参量
- 七、变量
- JNI/NDK开发指南(七)——C/C++访问Java实例变量和静态变量
- JNI/NDK开发指南(七)——C/C++访问Java实例变量和静态变量
- JNI/NDK开发指南(七)——C/C++访问Java实例变量和静态变量
- JNI/NDK开发指南(七)——C/C++访问Java实例变量和静态变量
- C语言(七)
- Unix C (七)
- C Primer Plus学习 二十二 指针操作对形式参量使用const
- 23天学完mysql系统变量(七)
- JavaScript基础(七)- JavaScript 变量
- C++随记(七)--引用变量
- WebGL之旅(七)varying变量
- C语言库函数(七)
- Measure Memory Usage of .NET Applications
- oc学习笔记(一)基本语法
- 百度编辑器二次开发常用手记整理小结
- 这季节中,风是轻柔的
- 查询oracle表的信息(表,字段,约束,索引) 按列名+表名查询约束名称
- 【C++】变量(七) 参量
- string 转stream和stream转string
- ace nonblock
- eYdoae谑侍YBHOC
- linux下安装mysql
- java分别用Thread方法和Runable方法实现异步
- 转载+自练(莫喷)如何在cocos2d 2.1.4里面使用动画和Texture Packer
- App.Config详解及读写操作
- Python笔记——从shell中退出python命令