すのはら荘春原庄的雪

为何static成员函数不能为virtual

Toretto·2022-04-10 19:44·104 次阅读

为何static成员函数不能为virtual


1. static成员不属于任何类对象或类实例,所以即使给此函数加上virutal也是没有任何意义的。 
2. 静态与非静态成员函数之间有一个主要的区别。那就是静态成员函数没有this指针。 
虚函数依靠vptr和vtable来处理。vptr是一个指针,在类的构造函数中创建生成,并且只能用this指针来访问它,因为它是类的一个成员,并且vptr指向保存虚函数地址的vtable. 
对于静态成员函数,它没有this指针,所以无法访问vptr. 这就是为何static函数不能为virtual. 
虚函数的调用关系:this -> vptr -> vtable ->virtual function 
通过下面例子可以确定,当类增加了一个虚函数后,类的大小会增大4字节(指针的大小). 

posted @   晓风霜度-  阅读(104)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示