C 隱式轉換
在 C 上下文中,隱式轉換的概念一直是討論的主題。最近關於「C 中還可以使用哪些其他有用的轉換?」的回答提出了關於正確理解 C 中轉換的問題。
考慮以下程式碼片段:
在此片段中,第一個函數呼叫 func("one") 的結果是一個錯誤。這是因為沒有從 const char * 到 A 的直接轉換。雖然存在從字串到 A 的轉換,但使用它會涉及多次隱式轉換,根據 C 標準,這是不允許的。
C 標準(SC22-N-4411.pdf) 在12.3.4 節「轉換」中指出:
這表示在執行轉換時只能套用一個隱式用戶定義的轉換。在第一個函數呼叫中,從 const char * 到 string 的轉換以及從 string 到 A 的轉換都是使用者定義的轉換。由於需要多次轉換,編譯器會引發錯誤。
以上是為什麼 `func(\'one\')` 會導致 C 隱式轉換出錯?的詳細內容。更多資訊請關注PHP中文網其他相關文章!