类中的向量在引用类中为空

时间:2018-12-07 13:34:30

标签: c++

我可以将我的问题简化为以下问题:

Class1 x;
Class1 y;
x.Label = "Test";
y = x;
x.myVector.push_back("test");

结果: x.myVector.size() == 1,y.myVector.size() == 0,但都带有标签“ Test”!

我是C ++的新手,但不幸的是,我无法通过在互联网上搜索来解决问题...

感谢您的帮助!

3 个答案:

答案 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的情况下,无法确定此处到底发生了什么。如果编译器实现了它,那么它可能只是复制了所有内容,因此现在yx都带有标签"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”!

因为您拥有,所以都应该具有相同的标签

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 )...

  

注意:在代码中, C / C ++ 向前运行,从不向后看,除非程序员使用goto强行将其拖回,除非< em>循环或类似的内容...


编辑:您可能曾想过应该references用过,所以:

Class1 y;
Class1& x = y;
x.Label = "Test";
// y = x; Eh, redundant statement
x.myVector.push_back("test");

您认为应该做什么...