当函数声明为静态成员函数(而不是普通的成员函数)时,递归函数是否更快。例如:
class Tree {
Node* p;
public:
static int height(Node* n){
.......
int lh = height(n->left);
int rh = height(n->right);
......
}
};
可能的原因是什么?
答案 0 :(得分:3)
从技术意义上讲,这是正确的(或至少可能为真*),因为每个非静态成员函数调用都包含一个不可见的this
参数。例如,如果示例中的height
函数是非静态函数,则其有效签名将为int height(Tree* this, Node* n)
。因此,如果您不需要this
,则会浪费一些非零数量的循环。
然而,在实践中,它不太重要(当然,取决于你正在做什么)。所以编写代码然而它最有意义,并且只有在分析器显示(a)您遇到问题并且(b)优化产生影响时才会进行微优化。
*我说可能是真的,因为我怀疑大多数编译器无论如何都会优化掉未使用的参数,但我并非100%肯定。