揭開神秘的成員函數指標呼叫
在物件導向程式設計的世界中,成員函數指標在操作類別中起著至關重要的作用成員。然而,透過指標呼叫成員函數可能是一項令人困惑的任務。考慮以下程式碼片段:
class cat { public: void walk() { printf("cat is walking \n"); } }; int main(){ cat bigCat; void (cat::*pcat)(); pcat = &cat::walk; bigCat.*pcat(); }
嘗試編譯此程式碼會導致錯誤。有趣的問題仍然是:為什麼看似無害的 bigCat.*pcat() 語句無法編譯?
破解問題
答案在於運算子的優先順序。在此程式碼片段中, () 表達式的優先權高於 .* 指向成員的指標綁定運算子。因此,編譯器將表達式解釋為 (bigCat.*)pcat(),這不是預期的行為。
解決難題
要解決此問題,我們需要明確指定操作的優先順序。透過在表達式 bigCat.*pcat() 周圍添加括號,我們確保首先發生指向成員的指標綁定。
(bigCat.*pcat)();
結論
隨著正確放置括號後,程式碼現在可以正確編譯和執行。這提醒我們,理解運算子優先順序對於確保正確解釋程式碼至關重要。
以上是為什麼呼叫成員函數指標時`bigCat.*pcat()`編譯失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!