我了解到,一旦将引用初始化为对象,它就无法引用另一个对象。 我想亲自尝试一下。这就是我试过的:
struct X
{
int s;
};
int main()
{
X x1;
X x2;
X& xRef = x1;
xRef = x2;
X* xPtr = &x1;
xPtr = &x2;
}
此代码编译没有问题。 这是为什么?我错过了什么吗?
答案 0 :(得分:3)
它编译是因为它是有效的C ++,它不会碰巧做你认为它做的事情。
xRef = x2;
这一行与以下内容完全相同:
x1 = x2;
由于xRef
是对x1
的引用,因此您实际上将x2
的值分配给x1
。
例如:
int a = 5;
int b = 6;
int & a_ref = a;
a_ref = b;
b = 7;
std::cout << "a:" << a << " b:" << b << std::endl;
这将显示a
的值为6(由于行a_ref = b;
)而b
为7。
C ++语言不包含任何可以重新绑定引用的机制。绑定后,引用只引用同一个对象,不能更改。