int & const t和 int const& t

xiaoxiao2021-02-28  114

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

转载请注明原文地址: https://www.6miu.com/read-42019.html

最新回复(0)