C 的基本原理,修訂版 5.10,2003 年 4 月:
將指向一種型別的函式的指標轉換為指向不同型別的函式的指標而不進行強制轉換是無效的。
似乎他們想說“沒有明確的演員表”。
問題:為什么不允許隱式轉換?比較:對于整數,允許隱式轉換。
uj5u.com熱心網友回復:
有隱式和顯式轉換。強制轉換始終是顯式轉換并使用強制轉換(type)運算子。
當涉及到指標時,C 具有相當不錯的型別安全性。除了空指標轉換的特殊情況外,唯一允許的隱式指標轉換是在物件指標和指向void. 鑒于沒有洗掉任何型別限定符。void*雖然不是函式指標的泛型型別 - 不存在這樣的型別。根據 C17 6.3.2.3/8,只要使用正確的型別取消參考指標,就可以在不同的函式指標型別之間進行轉換。
在 C17 6.5.16.1 - 簡單分配中可以找到允許和不允許的具體規則。滿足規則的賦值將隱式呼叫適用的轉換規則,這是所謂的“左值轉換”,基本上意味著您可以將型別限定符添加到左運算元,但不能丟棄右運算元存在的限定符。
一般來說,6.3.2.3 說明一般可以進行哪些型別的轉換,而 6.5.16.1 說明在賦值期間允許隱式執行哪些轉換。
允許在各種整數和浮點型別之間進行隱式轉換可以說是 C 語言中的一個設計缺陷——它是微妙且經常是嚴重錯誤的持續來源。為什么 C 決定通過在任何地方強制執行顯式轉換來修復它。所以這里真正的問題可能是:為什么 C 允許某些型別的隱式轉換?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/407546.html
標籤:
