C++的static 爲什麼不能和虛函數一起使用?

首先我們先做個例子試試看可以嗎?

class A{
public :  A(){};
          ~A() = default;
          static virtual void test() {
          }
};

int main()
{
    A a;
    return 0;
}

編譯結果報錯:
在這裏插入圖片描述

經過查詢資料得知

  • 首先的話,靜態函數是不和任何類對象或類實例相關聯,所以就算給函數加上viruatl是沒有任何意義的
  • 靜態與非靜態成員函數之間有一個主要的區別,就是靜態成員函數可以不通過this指針來進行調用
  • 虛函數依靠vptr和vtable來處理.vptr是一個指針,在類的構造函數中創建生成,並且只能用this去當問它,因爲vptr是類的成員之一,並且vptr指向保存虛函數地址的vtable
  • 對於靜態成員函數,沒有this指針,沒有辦法訪問vptr.爲什麼static函數不能爲virtual
  • 虛函數的調用關係 this -> vptr - >vtable -> virtual function
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章