2017-09-15 131 views
3

靜態成員函數和全局函數有什麼不同?靜態成員函數和全局函數有什麼不同?

void globalFunc() 
{ 
} 

class Test 
{ 
    public: 
    //In grammar side, object's not own this function 
    static void staticFunc(); 
}; 

靜態成員函數是全球性的功能,但是,它可以與意義 分類和限制訪問範圍。

但我不明白爲什麼靜態成員函數的調用約定 是[this call]。

我知道正常的成員函數必須是[this call],因爲它必須需要調用者對象的地址,但爲什麼靜態成員函數有這個調用約定呢?我認爲它不需要調用者的地址,因爲它不是對象的 函數。 靜態成員函數和全局函數是否有區別? (語法的一面,而且偏低不)在一個類中

+1

對不起,'[這個電話]'? – Charles

+0

可以調用一個靜態成員函數,就像它是一個非靜態成員函數(它不會在函數中使用this)。靜態成員函數不能是'extern「C''。從形式上講,這意味着你不能將它作爲C回調使用,但如果編譯器具有這種不切實際的默認值,很少。 –

+0

調用約定是實現定義的。你指的是什麼實現? –

回答

5

靜態類中的函數

  • 訪問私有和受保護靜態數據成員。
  • 訪問私有和受保護的靜態函數。
  • 如果靜態函數具有類的實例,則訪問類中的私有和受保護的每實例數據成員
  • 訪問私有和受保護的實例函數如果靜態函數具有類的實例。
  • 在基類中具有相同名稱的陰影函數。
  • 訪問受保護的基類中的數據和函數。

全球非朋友功能可以不做任何這些功能。

+2

您應該添加只有STATIC成員和函數可以訪問。 – FilipRistic

+0

@ArnavBorborah前兩點實際上是正確的。 – juanchopanza

+0

@FilipRistic:其他也是,但你必須提供類的實例。 – Jarod42

相關問題