2011-09-18 34 views
2

如果您有一個清除數組中所有元素的clear()函數,您是否使用void類型或參考值來處理正在使用的類型並返回* this。return * this C++

Ex。

void Vector<T>::clear() { 
} 

Vector& Vector<T>::clear(){ 
    return *this 
} 

我真的不明白何時返回 「這個」 以及何時使用void類型。

回答

9

我想回到*this是有用的鏈式API調用。 obj.doSomething().doSomethingElseAfterwards()。所以在鏈接有用的情況下調用,如add*this的好候選。鏈接不太有用的方法可能會返回void

就我個人而言,我並不喜歡這種鏈式風格,但許多人喜歡這種流暢的API。

3

在這種特殊情況下,也沒有特別好的理由退換貨當前對象,我能想到的,除了使可疑代碼像

myVector.clear().add(somethingNew); 
+4

究竟是什麼是可疑的?有很多地方可能想要做類似的事情。工廠對象,例如;那麼你可以這樣做:'Factory()。Setting1(...).Setting2(...).Consttruct()'並獲取需要創建的對象。所有這些都是暫時的。基於C++的DESL的生活和呼吸這個東西。 –

+0

謝謝,我想我現在明白了。 :) – shizzle

+1

@尼科爾:有些人喜歡這樣的;有些人絕對討厭它。就個人而言,我處於中間的某個地方,但考慮到各種各樣的意見,我儘量不使用這種模式,除非它已經在給定的代碼庫中建立。 –

相關問題