【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的值并不会改变。所以,原先期望程序实现的功能并没有实现。

综上所述,一个非常参量只能绑定在与它同类型的变量上,而一个常参量则可以帮顶在相关联类型的变量或者是右值上

0 0
原创粉丝点击