我偶爾會看到類似這樣的代碼位:沒有類實例的類成員的地址?
class A {
int b;
}
void foo() {
int* blah = &A::b;
// Other stuff.
}
卻怎麼也抓一類的成員變量的地址,而這個類的一個實例是有用的?它有什麼作用?
我偶爾會看到類似這樣的代碼位:沒有類實例的類成員的地址?
class A {
int b;
}
void foo() {
int* blah = &A::b;
// Other stuff.
}
卻怎麼也抓一類的成員變量的地址,而這個類的一個實例是有用的?它有什麼作用?
您的代碼格式不正確,無法編譯。 blah
的類型不是int*
,它是int (A::*)
。也就是說,它不是「指向int
的指針」,它是「類型爲int
的類型爲A
的數據成員的指針」。
請注意,爲了獲取指向成員的指針,該成員必須是可訪問的。要在foo()
中計算&A::b
,b
需要是公共數據成員,或者foo()
需要成爲A
的好友。
指向成員的指針不指向對象。相反,可以將指向成員的指針綁定到對象以獲取其數據成員的值。您可以通過將指向成員的blah
綁定到A
的實例來獲取A
對象的b
數據成員的值。例如,
A x;
int b_value = x.*blah; // b_value has the value of x.b
這......很有意義。謝謝! – OniLink
類A
具有INT b
。這意味着b
是類A
的數據,如果您有A
的實例,則可以獲得指向b
的指針。
我想你要問這種情況:
class A{
int foo(int i) {
}
}
編譯之後,foo方法有地址,你可以得到指針&A::foo
。
你確定'b'不是'A'的靜態成員嗎? – reuben
我很確定。我已經看到了一些代碼,它似乎依賴於它不是一個靜態成員。 – OniLink
在這種情況下,你確定'blah'的類型是'int *'嗎? –