假设我有一个数组
int x[5] = {1,2,3,4,5};
还有一个功能
int at(int p[],const int i){
return p[i];
}
我正在尝试访问
之类的元素cout << at(x,4);//works fine,output is 5
cin >> at(x,3);// error
我知道它仅返回该索引的常量,我们无法更改常量。因此,有某种方法可以修改此函数以获取对数组元素的完全访问权限,从而能够更改指定索引上的值。
答案 0 :(得分:7)
只需将函数更改为返回引用即可。更改此:
int at(int p[],const int i){
对此:
int &at(int p[], const int i) {
我知道它仅返回该索引的常量,而我们不能 更改常量。
那不是问题。问题是,如果函数仅返回int
,则返回的是右值。 cin >>
但是需要一个左值,它是一个对象,存储在内存中的可识别位置。 x[3]
就是这样的lvalue
,并且通过返回对它的引用,我们正在返回这样的左值。仅返回一个int
,我们将只返回x[3]
中值的一个副本,而该副本没有地址,它在语句末尾消失了。