我目前正在研究一些看起來很奇怪的第三方C++代碼(我從C++ 11開始)。其中一個給我留下了很多東西疑惑,是static_cast
從NULL
在許多情況下某些指針類型:在C++中將SomeType *轉換爲NULL有什麼用?
SomeClass* someClassPtr = static_cast<SomeClass*>(NULL);
我知道你可以施放例如指針從基類指針轉換爲派生類指針,但這裏絕對沒有繼承。據我所看到的,這已經足夠了:
SomeClass* someClassPtr = NULL;
但在這個代碼,其中NULL
沒有得到澆鑄爲特定的指針類型的唯一案例,在載體和其他容器指針:
SomeOtherClass.vecOfSomeClassPtr[i] = NULL;
所以我的問題是:
- 這是簡單的舊式(甚至C-樣式)代碼之前有
nullptr
? - 是否/正在鑄造
NULL
其他事情需要比使用繼承時的down/upcasting? - 或者我完全錯過了什麼?
而如果我沒有得到它錯了到目前爲止:
我先被替換的static_cast<type*>(NULL)
所有實例NULL
後來nullptr
,看是否會破壞任何東西:不。 編譯器不會抗議,程序似乎仍然按預期工作。 但我知道指針可能會非常棘手的小混蛋,於是:
- 有關使用
nullptr
什麼陷阱沒有我可能會錯過?
PS:是的,我確實使用了搜索,是的,我在C代碼上找到了類似的問題。 但這是C++代碼,我很想知道,而不是僅僅假設某件事。
在一個問題中你有很多問題。 – user2079303
我會牢記未來。 – Floriel