![](/img/trans.png)
[英]What should happen when the return value from a C++ function that returns a reference of an undefined object type is not assigned?
[英]C++, when should return reference?
class Node{
private:
vector<Node*> children;
public:
vector< Node* > getChildren ();
//or
vector< Node* >& getChildren();
}
在Main函数中,我有STL排序:
**stl::sort((n->getChildren()).begin(),(n->getChildren()).end(),comp);**
出现了问题,如果使用vector <Node *> getChildren(),则代码将出现严重的多余问题,仅使用vector <Node *>&getChildren()可以。 我很困惑,为什么在这种情况下仅引用有效?
当不返回引用时, getChildren
将在每次调用该vector
时返回该vector
的新副本。
这意味着在这一行:
stl::sort((n->getChildren()).begin(),(n->getChildren()).end(),comp);
第一次调用getChildren
返回的副本与第二次调用getChildren
副本不同。 这意味着begin()
和end()
在不同的向量上,因此您将永远无法从一个迭代到另一个。
当您返回引用时,两个调用都返回对相同向量的引用,因此您可以从begin()
到end()
进行迭代。
要补充@TheDark所说的内容(对我来说,它并不清楚):该引用返回作为类一部分的实际向量。 因此,如果对向量进行了修改,则将在类和其他函数中对向量进行修改,并且该类将看到更改。
如果返回副本,则仅对副本进行更改,而类和其他函数将看不到更改。
如果要在本地对向量进行排序而不在类中对向量进行排序,则需要执行以下操作(由@TheDark提供的原因,为此您可以返回引用或副本):
vector< Node* > localVector = n->getChildren();
stl::sort(localVector.begin(), localVector.end(), comp);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.