C++类this指针为空时的几个误区

代码:

 1 class test{
 2     public:
 3     static void f1(){cout<<y<<endl;}
 4     void f2(){cout<<y<<endl;}
 5     void f3(){cout<<x<<endl;}
 6     void f4(int p){cout<<p<<endl;}
 7     int x;
 8     static int y;
 9 };
10 int test::y=1;
11 int main()
12 {
13     test* p=nullptr;
14     p->f1();
15     p->f2();
16     p->f3();
17     p->f4(5);
18     getchar();
19     return 0;
20 }

2.结果:

f1,f2,f4都会调用成功,f3调用失败。

解释:

p为null,所以这个类的this指针为null。调用非静态成员函数时,编译器会默认把this指针作为第一个参数!

f1本身为静态成员函数,调用静态成员变量y,不需要this指针,成功。

f2是普通成员函数,也可以调用静态成员变量y,不需要this指针,成功。

f3调用了普通成员变量,这时需要this指针了,但this为null,所以相当于调用cout<<null->x<<endl;这显然错误!

f4也不需要this指针,成功。


另外两个相关知识点:

1、静态成员函数只能调用静态成员变量,普通成员函数可以调用静态成员变量。

2、静态成员变量要在类内声明,类外初始化。

猜你喜欢

转载自www.cnblogs.com/FdWzy/p/12364934.html