使用静态成员变量的确可以“节省内存”,但静态成员函数并不会——无论是不是静态成员函数,编译器都不会在类的每个实例中为此函数保存一个副本——函数永远是在代码段中,而对象(类的实例)是放在数据段中。
静态函数与非静态函数实质的区别是this指针的问题。
例如定义这样一个类:
class CAAA
{
public:
.....
static void StaticFunc(int);
void NonstaticFunc(int);
} a;
如果我们调用非静态函数: a.NonstaticFunc(1);
这就相当于调用这样一个c函数: NonstaticFunc(&a, 1);
于是在函数中使用this或存取成员变量时,就使用&a指针实现。
但如果我们调用静态函数: a.StaticFunc(1);
实际相当于调用这样一个c函数: StaticFunc(1);
因此静态函数中没有所谓的this指针
为什么C++中,线程控制函数往往是静态成员函数?【转】
最新推荐文章于 2024-04-29 11:56:38 发布