簡體   English   中英

指向類的靜態成員的指針

[英]Pointers to static members of class

從此參考:

(8.3.3 / 3)指向成員的指針不得指向類(9.4)的靜態成員,具有引用類型的成員或“ cv void”。

為什么指針不能指向類的靜態成員?

struct S {
     static int f() { /*...*/ };

};

int main()
{
     int (S::*s)() = &S::f; // why?
}

為什么指針不能指向類的靜態成員?

因為出於成員資格的目的,它不是成員,僅出於范圍的目的。 除了作用域之外,靜態成員就像自由函數一樣,未附加到類的實例上。 您可以使用非成員函數指針:

int (*s)() = &S::f;

每當您執行T::* ,您就在說“這件事需要T的實例才能使用。” 該語句不適用於static函數,這些static函數無需類的任何實例即可調用。

您必須使用常規函數指針,如下所示:

int (*s)()=&S::f;

就像GMan所說的那樣,靜態方法不適用於實例,因此它們不會收到隱藏的this指針。 這實際上使它們與具有相同參數的實例方法具有不同的簽名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM