C++常量引用初始化的内部实现机制

来源:互联网 发布:火车采集器软件 编辑:程序博客网 时间:2024/06/05 08:05

"在C++中,引用的类型必须与其所引用类型的类型一致,但是有一种例外情况就是在初始化常量引用时允许使用任意表达式作为初始值,只要该表达式能够转换成引用的类型即可"——摘自C++ primer

下面我们就分情况讨论一下常量引用的初始化情形:

1、初始值为字面常量

(a)字面常量的类型与常量引用的类型一致

const int &i = 1;

其内部实现机制为:

const int temp = 1;

const int &i = temp;

i绑定的对象并不是字面常量1,而是一个临时量temp

(b)字面常量的类型与常量引用的类型不一致

const int &i = 1.5;(使用double类型的字面常量初始化int类型的引用常量)

其内部实现机制为:

const int temp = 1.5;(此处会丢失精度,temp值为1)

const int &i = temp;

i绑定的对象并不是字面常量1.5,同样是一个丢失精度的临时量temp


2、初始值为变量

(a)变量的类型与常量引用的类型不一致

double val = 1.5;

const int &i = val;

其内部实现机制为:

double val = 1.5;

const int temp = val;(temp被赋值为1,丢失精度)

const int &i = temp;

i绑定的对象并不是变量val,而是一个临时量temp,因此对变量val的操作不会影响引用i;

如果继续执行val = 3.5,则i依然为1,不会变成3。

(b)变量的类型与常量引用的类型一致

int val = 1;

const int &i = val;

此时val为int型,和i的类型一致,所以编译器并不会将i绑定到一个临时量上,而是直接将i绑定到val上,因此当val的值被修改时,i的值也会被修改




原创粉丝点击