J*******g 发帖数: 381 | 1 int i = 42;
std::cin >> i;
const int &r1 = 42;
const int &r2 = r1+i;
以上语句是可以编译通过的,运行也没问题。 我的问题是,C++规定,const的
reference只能指向const变量,const变
量是compile的时候就初始化的。 但是在
const int &r2 = r1+i;
里面,i是runtime由user输入的,那么定义成const int &r2的reference为什么没有编
译报错呢? |
h*******e 发帖数: 225 | 2 const int&的意思是这个reference本身是const的,定义了以后不能再指向别的变量,
不是说它指向一个常量int.
【在 J*******g 的大作中提到】 : int i = 42; : std::cin >> i; : const int &r1 = 42; : const int &r2 = r1+i; : 以上语句是可以编译通过的,运行也没问题。 我的问题是,C++规定,const的 : reference只能指向const变量,const变 : 量是compile的时候就初始化的。 但是在 : const int &r2 = r1+i; : 里面,i是runtime由user输入的,那么定义成const int &r2的reference为什么没有编 : 译报错呢?
|
Z****e 发帖数: 2999 | 3 reference的指向关系从来就是const的,i.e.初始化的时候一旦指定,以后就不能改了
const int& var的意思是var这个symbol本身是read-only,不能作为lvalue出现,所以
你也可以用var指向一个非常数的变量,但不能通过var修改这个变量的值,但是这个变
量值本身的变化也能通过var访问到。
int i = 2;
const int& i_ref = i;
i = 3; //i_ref is 3 here
i_ref = 9; //illegal
int& i_ref2 = i;
int j = 10;
i_ref2 = j; //this is equivalent to i_ref2 = 10
【在 h*******e 的大作中提到】 : const int&的意思是这个reference本身是const的,定义了以后不能再指向别的变量, : 不是说它指向一个常量int.
|
J*******g 发帖数: 381 | 4 这个是不对的。 任何一个reference定义之后都不能指向别的变量。 const
referece的意思是指向的变量也必须是const
的。
【在 h*******e 的大作中提到】 : const int&的意思是这个reference本身是const的,定义了以后不能再指向别的变量, : 不是说它指向一个常量int.
|
S*********g 发帖数: 5298 | 5 你说的后面那一半是错的
const reference的意思是你不能通过这个reference来改变变量的值
【在 J*******g 的大作中提到】 : 这个是不对的。 任何一个reference定义之后都不能指向别的变量。 const : referece的意思是指向的变量也必须是const : 的。
|
J*******g 发帖数: 381 | 6 那么请教在我原来的例子里面,为什么r2的值可以由runtime来决定呢?
【在 S*********g 的大作中提到】 : 你说的后面那一半是错的 : const reference的意思是你不能通过这个reference来改变变量的值
|
J*******g 发帖数: 381 | 7 明白了,谢谢指教。
【在 Z****e 的大作中提到】 : reference的指向关系从来就是const的,i.e.初始化的时候一旦指定,以后就不能改了 : const int& var的意思是var这个symbol本身是read-only,不能作为lvalue出现,所以 : 你也可以用var指向一个非常数的变量,但不能通过var修改这个变量的值,但是这个变 : 量值本身的变化也能通过var访问到。 : int i = 2; : const int& i_ref = i; : i = 3; //i_ref is 3 here : i_ref = 9; //illegal : int& i_ref2 = i; : int j = 10;
|
m*****r 发帖数: 130 | 8 这里r2是一个reference to a const int, r1+i结果是一个const int,一个临时变量,
可以被
r2引用, 作为rvalue.
【在 J*******g 的大作中提到】 : int i = 42; : std::cin >> i; : const int &r1 = 42; : const int &r2 = r1+i; : 以上语句是可以编译通过的,运行也没问题。 我的问题是,C++规定,const的 : reference只能指向const变量,const变 : 量是compile的时候就初始化的。 但是在 : const int &r2 = r1+i; : 里面,i是runtime由user输入的,那么定义成const int &r2的reference为什么没有编 : 译报错呢?
|