当我尝试运行这段代码时, 我得到的输出是
1 1 | 1 2
不过,如果我去掉引用,也就是
// replace
A& a_ref = b2;
a_ref = b1;
// with
b2 = b1;
输出结果将会改变为:
1 1 | 1 1
我找不到任何解释为什么会发生这种情况的网站。有人能够解释一下吗?
#include <iostream>
struct A {
int foo;
};
struct B : public A {
int bar;
B(int x,int y) : bar(y) { this->foo=x; }
};
int main(void) {
B b1(1,1), b2(2,2);
A& a_ref = b2;
a_ref = b1;
std::cout << b1.foo << ' ' << b1.bar << " | " << b2.foo << ' ' <<
b2.bar << '\n';
return 0;
}
b2
对象的子对象指定为A
。由于左侧的类型是A
,因此b1
隐式转换为A
。换句话说,该赋值相当于a_ref = (A&)b1;
。这与原语意义相符,仅作了适当的表述调整。 - Igor Tandetnik