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、静态成员变量要在类内声明,类外初始化。

 

原文链接: https://www.cnblogs.com/FdWzy/p/12364934.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

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

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/331973

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月1日 下午6:17
下一篇 2023年3月1日 下午6:18

相关推荐