![](/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.