静态函数与const函数

时间:2010-03-30 01:43:36

标签: c++ static-methods

我在看一个会员功能

int funct(int x) const; 

我想知道是否

static int funct(int x); 

会更好。

如果成员函数不使用任何成员变量,那么它应该是静态的。有什么东西可以阻止这个吗?

2 个答案:

答案 0 :(得分:22)

假设这是C ++,声明为const的函数表示它不打算更改调用它的实例上的数据成员,即this指针。既然有办法逃避这种做法,那就不是保证,只是宣言。

静态函数不能在特定实例上运行,因此不会使用“this”指针。因此,它是一种非常天真的“常量”。

如果您的方法不需要绑定到特定实例,则将其设置为静态是有意义的。

但是,如果您的方法是多态的 - 也就是说,您根据调用它的对象的实例提供了不同的实现,那么它不能是静态的,因为它依赖于特定的实例。

答案 1 :(得分:7)

如果成员函数不使用任何成员变量,通常值得提出一个问题:
“这首先需要成为成员函数吗?”