[英]Recursive static member functions Vs ordinary member functions
當函數聲明為靜態成員函數(而不是普通的成員函數)時,遞歸函數更快是否正確? 例如這樣的事情:
class Tree {
Node* p;
public:
static int height(Node* n){
.......
int lh = height(n->left);
int rh = height(n->right);
......
}
};
可能的原因是什么?
從技術角度來看,這是真實的(或至少它* 可能是真實的),因為每一個非靜態成員函數調用包括一個不可見的this
參數。 例如,如果示例中的height
函數是非靜態的,則其有效簽名將為int height(Tree* this, Node* n)
。 所以如果你不需要this
,你會浪費一些非零循環次數。
然而,在實踐中,它不太重要(當然,取決於你正在做什么)。 所以編寫代碼然而它最有意義,並且只有在分析器顯示(a)您遇到問題並且(b)優化產生影響時才會擔心進行微優化。
*我說可能是真的,因為我懷疑大多數編譯器無論如何都會優化掉未使用的參數,但我不是100%肯定的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.