当我尝试此代码时
我得到的输出是
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;
}
最佳答案
当你这样做时:
A& a_ref = b2;
引用 a_ref
仅指B
的成员继承自 A
.安 A&
毕竟不能知道派生类的成员。所以当你这样做时:
a_ref = b1;
唯一复制到 a_ref
的成员是它知道的成员,只有foo
.所以只有b2.foo
变化。在这种情况下:
b2 = b1;
您正在复制 B
的所有成员对象,所以所有成员都被改变了。
关于c++ - 为什么将一个结构体的引用设置为等于另一个结构体只会改变一个数据成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62732801/