由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 请教一个基础C++问题
相关主题
相关话题的讨论汇总
话题: const话题: int话题: r2话题: reference话题: 变量
进入Programming版参与讨论
1 (共1页)
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为什么没有编
: 译报错呢?

1 (共1页)
进入Programming版参与讨论
相关主题
相关话题的讨论汇总
话题: const话题: int话题: r2话题: reference话题: 变量