我可以将我的问题简化为以下问题:
Class1 x;
Class1 y;
x.Label = "Test";
y = x;
x.myVector.push_back("test");
结果:
x.myVector.size()
== 1,y.myVector.size()
== 0,但都带有标签“ Test”!
我是C ++的新手,但不幸的是,我无法通过在互联网上搜索来解决问题...
感谢您的帮助!
答案 0 :(得分:2)
您的示例还远远不够完整,因此我仅假设其最简单的编译方式:
// creates an instance named x on the stack
Class1 x;
// creates an instance named y on the stack
Class1 y;
// sets the label of the x instance to "Test"
x.Label = "Test";
// COPIES all data from x over to y (including the label)
y = x;
// inserts into the vector of x, as the copy has gone through already, this is in x only
x.myVector.push_back("test");
答案 1 :(得分:1)
Class1 x;
Class1 y;
在这里,您要制作两个对象。两者都没有标签,而且向量为空。
x.Label = "Test";
现在x带有标签"Test"
。
y = x;
在没有看到=
如何实现Class1
的情况下,无法确定此处到底发生了什么。如果编译器实现了它,那么它可能只是复制了所有内容,因此现在y
和x
都带有标签"Test"
,并且所有向量都不包含任何东西。
x.myVector.push_back("test");
现在x.myVector
包含"Test"
。但是,这不会影响y
(或y.myVector
)。这就是y.myVector.size()
是0
的原因,您没有在其中放置任何东西,因此它仍然不包含任何东西。
答案 2 :(得分:1)
结果:x.myVector.size()== 1,y.myVector.size()== 0,但都带有标签“ Test”!
因为您拥有,所以都应该具有相同的标签>
将 在复制后 之后出现...因此,它仅适用于 注意:在代码中, C / C ++ 向前运行,从不向后看,除非程序员使用 编辑:您可能曾想过应该references用过,所以: 您认为应该做什么... x.Label = "Test";
y = x; // 'x' and 'y' are now same...
x
的实例复制到y
...但这是x.myVector.push_back("test"); // x is now 'test'
x
而不是y
...,并且由于vector
是空的(因此,像大多数 STL 类一样,size()
在初始化时显然是 0 )...
goto
强行将其拖回,除非< em>循环或类似的内容...
Class1 y;
Class1& x = y;
x.Label = "Test";
// y = x; Eh, redundant statement
x.myVector.push_back("test");