簡體   English   中英

遞歸靜態成員函數Vs普通成員函數

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

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