2016-02-22 48 views
0

我做了一個類CardDeck(C++)其中有vector<card*> deck私人會員。矢量容器的運算符[] - 返回引用?

我重載運算符[]這一類這樣的:

Card* CardDeck::operator[](int i) const{ 
return this->deck[i];} 

在這裏你可以看到它返回卡*,而不是卡* &。當我試圖把卡* &它沒有編譯,但是,從我所瞭解的矢量[我]返回第i個元素參考 - 像寫作here

那麼怎麼會這樣編譯而不是用卡* &?

+1

什麼錯誤信息沒有編譯器給你? – aschepler

回答

2

您不能從const成員函數返回非const引用,因爲它允許調用方修改對象。例如,返回Card*的副本,或者如果您想允許調用者修改指針,請不要將您的函數標記爲const

另外請注意,您可以兼得,如果你希望能夠從const上下文從非const下取得的值並進行修改:

Card* CardDeck::operator[](int i) const; 
Card*& CardDeck::operator[](int i); 
+1

...並注意修改向量中的指針與通過指針修改卡不同! – einpoklum

+0

我會在const版本中創建一個'Card const *'。不想讓你的內部函數在const函數中修改。 – Thomas