簡體   English   中英

C ++,何時應返回引用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM