[英]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.