2010-04-07 35 views
6

我從零開始學習C++,因此我沒有對C的專家理解。在C++中,您不能將無效指針指向任何內容,並且我理解其背後的原因。不過,我知道在C中,你可以。這有什麼可能的原因?這看起來好像是一個類型安全的巨大漏洞,對我來說這似乎是一件壞事。鑄造空指針的原因是什麼?

回答

13

您可以將void*投射到另一個這兩個語言的指針上。也許你的含義是含蓄的。

在C中非常方便,無需對其進行明確說明。在C++中,我們有模板,所以要編寫通用代碼,不需要void*強制轉換等等。在C中沒有選擇。通用容器必須將void*保存爲對象,並且重複說mydata* d = node;然後它是mydata* d = (mydata*)node;要容易得多。

所以,這幾乎就像你說的。在C類中,安全性一般沒有像在C++中那樣受到重視,特別是當它涉及到void*時,因爲它被假設爲一個簡單的通用指針。在C++中沒有必要這麼做,所以在處理它時最好明確。

+0

很好的回答,謝謝! – Maulrus 2010-04-07 06:25:52

0

原因之一:如果您使用sort對結構數組進行排序,並且您有兩個結構的比較函數,則需要將空指針轉換爲指向結構成員的結構的指針。

1

什麼是[用C鑄造void *指針]可能的原因是什麼?這是不是類型安全的巨大漏洞?

這是支持多態的唯一可能的方式,也就是通用編程。沒有其他的方法可以製作,例如一個通用的散列表。 C中的多態性是非常不安全的,但它是唯一的多態現象。

很高興C++具有參數多態性(模板的許多功能之一)。