函數指標在 C 中對於實現程式碼彈性和可重複使用至關重要。但是,使用 cout 列印函數指標通常會導致意外結果。在本文中,我們深入研究 cout 與函數指標的行為,並探討背後的原因。
如提供的範例所示,將函數指標轉換為 void * 然後使用 cout 列印它,產生指標位址的十六進位值。此行為是預期的,因為 cout 有一個重載的
在沒有函數指標的特定重載的情況下,cout 會隱式地將指標轉換為另一種型別。令人驚訝的是,在許多情況下,這種轉換會產生布林值。根據 C 標準,「指標類型的右值可以轉換為 bool 類型的右值」。此轉換是透過將指標與空指標進行比較來執行的。如果函數指標非空,則視為 true,如果為 null,則視為 false。
當 cout 遇到 void* 時,它會呼叫重載的
提供的範例也提出了列印成員函數指標的問題。成員函數指標比簡單指標具有更複雜的結構,並且嘗試將它們強制轉換為 void* 以進行列印會導致編譯錯誤。
使用函數指標理解 cout 的行為對於準確、高效的調試至關重要。雖然將函數指標轉換為 void* 可以提供列印其位址的方法,但應該注意的是,這不適用於成員函數指標。然而,cout 執行的布林轉換在某些情況下可能會有所幫助,但重要的是要了解其限制。
以上是為什麼在 C 中列印函數指標時「cout」會產生意外結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!