C++的const引用

刚开始学习C++, 看到了C++的引用,有些地方不太理解,经过了些许思考,现做如下总结:


const引用只是给普通变量起一个别名而已:

1. 将非const变量赋值给非const引用:    

void test2()
{
	int i   = 1;
	int &j = i;

	printf("%d\n", j);

	i = 10;

	printf("%d\n", j);
}
执行结果: 1

                  10

在这里i,j只不过是对同一段内存空间的不同标记而已。

2. 将非const变量赋值给const引用:  

void test2()
{
	int i  = 1;
	const int &j = i;

	printf("%d\n", j);
	i = 10;
	printf("%d\n", j);
}

执行结果: 1

                  10

在这里i,j同样是对同一段内存空间的不同标记,但是因为j是const引用,所以不能改变j的指向。但由于j始终和i指向同一段内存,当i改变时j也会随之改变。


3. 将const变量赋值给非const引用:

void test3()
{
	const int i  = 1;

	int &j = i;
}

很遗憾,不能这样做,不能将一个const变量赋值给非const引用。


4. 将const变量赋值给const引用:

void test4()
{
	const int i  = 1;
	const int &j = i;
}

在这种情况下由于i,j都是const的所以不能被修改。


5. 将常量赋值给非const引用:

void test5()
{
	int &i  = 1;
}

 很遗憾,不能这样做,不能将一个常量赋值给非const引用!

6. 将常量赋值给const引用:

void test6()
{
	const int &i  = 1;
}

可以将一个常量赋值给const引用!

7. 将不同类型的值赋值给const引用:

void test5()
{
	double i = 3.14;

	const int &j = i;

	printf("%p\n", j);
	i = 20.2;
	printf("%p\n", j);
}

执行结果: 3

                  3

为什么不是20呢?这是由于将一个double类型的值转换为int类型时编译器相当于做了一次中转:

double i      = 3.14;

int   tmp = double ; // tmp = 3

const int &j = tmp;

此时j,tmp指向同一段内存空间,由于我们无法修改tmp,所以j将不会被修改。

 










  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值