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