当有人说在C ++中无法更改引用时,这意味着什么

时间:2013-12-09 02:25:42

标签: c++

最近,我正在阅读一些关于C ++的书籍,如“C ++ primer”和“Effective C ++”。几乎每本书都说不能改变引用。我对这个说法感到困惑。 因为,我可以写下这样的代码。

int a = 1, b = 2;
int& c = a;
// then I can change the reference c without compile errors.
c = b;

所以,我无法理解它是什么意思不能改变参考。

4 个答案:

答案 0 :(得分:6)

当人们说无法更改引用时,它们意味着您无法更改引用引用的对象...例如,使用指针,您可以执行此操作:

int a = 1, b = 2;
int *c = &a; // c points to a
c = &b;      // c now points to b instead
*c = 3;      // b now equals 3

没有相应的参考代码。初始化参考后:

int a = 1, b = 2;
int &c = a;

您无法更改引用,因此语句c = 3;现在更改b而不是a

答案 1 :(得分:2)

一旦将引用分配给目标,任何对该引用的进一步使用都是指目标,而不是引用本身。

例如,int& c = a;会创建名为c的引用,其目标为a。但是,如果您尝试更改它,就像在c = b;中一样,您正在更改a的值,而不是更改c的目标。

答案 2 :(得分:2)

  

指针和引用是引用对象的两种机制   在没有复制的程序中不同的地方。

通过与指针比较可以理解参考的一致性。

char a{'a'};
char b{'b'};
char *p = &a;
p = &b;

enter image description here 指针p是指向从a更改为b的不同对象的指针。 在参考的情况下:

char &r = a;
r = b;

enter image description here 表达式中的引用始终自动取消引用。所以它改变了它引用的对象的值。

答案 3 :(得分:0)

c = b;  

在上面的陈述中,您将b的值分配给a的值,因为c仍然指的是变量a