int & const t和 int const& t

http://bbs.csdn.net/topics/40366063


#include<iostream.h>
#include<stdio.h>

int main()
{
 int i = 0;
int const& j = i;
int & const t = i;
const int& m = i;
i = 3;
t = 5;
printf("j = %d m = %d  t = %d i = %d &j = %d &m = %d &t = %d",j,m,t,i,&j,&m,&t);
getchar();
}
结果:

j = 5 m = 5  t = 5 i = 5 &j = 1245048 &m = 1245048 &t = 1245048
谁能解释一下  
int & const t = i语句究竟是怎么回事?




to :antijpn(antijpn) 
我也同意你的说法,但事实是t的值改变了呀!
我在BC5下编辑了
#include<iostream.h>
#include<stdio.h>

int main()
{
 int i = 0;
int const& j = i;
int & const t = i;
const int& m = i;
i = 3;

printf("j = %d m = %d  t = %d i = %d &j = %d &m = %d &t = %d",j,m,t,i,&j,&m,&t);
getchar();
}
结果是t的值改变了。
晕,不知为何?既然t是一个const的引用,那为何它还是能被改变呢? 



上面 int & const t = i; 中,t不是const reference,j和m才是。

从C++语法看,是不允许 int & const t = i; 这种声明的。(可看TC++PL附录A)
我想,如果有编译器允许这样声明的话,那么它应该与 int& t = i; 完全等价,
即一个普通的non-const reference。

把以上的 int i = 0; 替换为 const int i = 0; 就能验证这种等价性。


int & const t = i
在有的编译器是通不了啊

测试结果:int & const t = i这种写法确实是错的,有的编译器可能真的是将int & const t = i这种违规的写法当成了int  const t = i


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值