c++之指针,引用,const

来源:互联网 发布:炫舞炸家族邀请软件 编辑:程序博客网 时间:2024/06/07 00:46

一,引用的概念
引用不是定义一个新的变量,而是给一个已经定义的变量重新起⼀个别名
格式:
类型&新的变量名=已经定义过的变量名
引用的特点:
1.一个变量可取多个别名;
2.引用必须初始化;
3.引用只能在初始化的时候引用⼀次,不能改变为再引用其他的变量。
来看先const 和 引用:
我们可以把引用绑定到const对象上,其绑定的方式和 绑定到其他对象是一样的,称为常量引用,与普通的引用不同的是,对常量的引用不能被用于修改它所绑定的对象

const int ci = 100const int &r1 = ci;  //正确的,引用及对象都是常量  r1 = 11 //这是错误的,因为r1是对常量的引用  int &r2 = ci //错误的。不能让一个非常量引用指向一个常量对象;

引用的类型必须要跟所指向的类型保持一致,但是有两个例外第一种例外是在初始化常量引用时允许使用任意表达式作为初始值,只要该表达式的结果能转化为引用的类型就行了,尤其,允许为一个常量引用绑定非常量的对象,字面值甚至一个一般表达式。

int i= 42const int &r1 = i;  const int &r2 = 42const int &r3 = r1 * 2

这些都是合法的。
那么问题来了,如果在类型不一致的时候会发生时候事情呢?
首先:

double dval = 3.14const int & r1 = dval;

此处r1 是int型引用,但是dval为double 类型,那么为了确保r1 绑定一个对象,编译器会把上述的代码变成:

const int temp = dval;  const int &r1 = temp;

在 这种情况下r1 绑定了一个临时量.
那么如果r1 不是一个常量,会发生什么呢?
如果r1 不是一个常量,就允许对 r1 赋值,这样改变r1 所引用对象的值,但是此时绑定的是一个临时量,而非dval,既然我们将r1 引用dval,那么久肯定相同过r1 改变dval 的值,否则为什么要给r1 赋值呢?所以C++规定这行为是非法的。

原创粉丝点击