最近,我正在阅读一些关于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;
所以,我无法理解它是什么意思不能改变参考。
答案 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;
指针p
是指向从a
更改为b
的不同对象的指针。
在参考的情况下:
char &r = a;
r = b;
表达式中的引用始终自动取消引用。所以它改变了它引用的对象的值。
答案 3 :(得分:0)
c = b;
在上面的陈述中,您将b
的值分配给a
的值,因为c
仍然指的是变量a