C++的指針成員特性非常有趣且功能強大,但是我想知道它是或僅應該僅限於類的實例化對象,還是可以指向靜態成員?用例對靜態或非靜態使用該特性並不明顯,儘管它看起來很有趣。指針到成員是否對靜態成員有意義?
-2
A
回答
1
靜態指針實際上是「正常」指針,例如,
class MyClass
{
public:
static int x;
static int f(int a)
{
return a+1;
}
};
// ...
int* pint = &MyClass::x; // pointer to static property
int (*pfunc)(int) = &MyClass::f; // pointer to static method
指向非靜態成員的指針是「特殊的」,因爲它們需要一個類實例來取消引用值。它們可以是,認爲是「在類實例內成員的偏移量」(這很粗糙,但不能應用於方法指針!)。
相比之下,靜態成員實際上非常像命名空間的全局變量,可能具有受限制的可見性。它們具有靜態內存地址,這些地址與類實例無關 - 所有實例共享一個靜態成員。
1
以下是合法的C++ 11代碼。
struct X
{
static void f() {}
static int i;
X() = delete;
};
typedef void(*funcPtr)();
int main()
{
funcPtr g = &X::f;
int * j = &X::i;
}
接受靜態成員數據和函數的地址沒有任何錯誤。正如你所看到的,這個類永遠不會被實例化。
相關問題
- 1. 指針到成員和靜態變量
- 2. 設置靜態成員指針變量
- 3. 靜態成員是否輸入對象?
- 4. 訪問靜態成員靜態成員
- 5. 靜態成員函數指針保存非靜態成員函數
- 6. 指向靜態類成員
- 7. 將此指針推回到私有靜態成員向量
- 8. 靜態成員
- 9. 如何從靜態成員函數調用指向成員函數的指針?
- 10. 靜態成員對象
- 11. 靜態結構 - 定義,對象,成員
- 12. C++ CUDA指針到成員
- 13. 存儲成員指針vs成員值
- 14. 靜態成員是否被繼承?
- 15. 靜態成員是否可以超載?
- 16. 成員指向成員對象和聲明順序的指針
- 17. C#:靜態成員VS實例成員
- 18. 靜態成員數組成員函數
- 19. Form實例成員和靜態成員
- 20. 傳遞函數指針到非靜態成員函數
- 21. 靜態類成員
- 22. F#靜態成員
- 23. C++靜態成員
- 24. 靜態javascript成員
- 25. 指向成員的指針
- 26. 對靜態成員有一個未定義的引用是什麼意思?
- 27. 函數指針指向靜態類成員?
- 28. 指向非靜態成員函數的指針的值
- 29. 將指針轉換爲成員函數指向靜態函數
- 30. 結構中指向靜態成員的指針
由於靜態成員不是依賴於對象的,它們就像常規變量一樣。 –
您無法從靜態成員創建指向成員的指針。 – Simple