2010-01-23 63 views
1

在有效的C++的書剛纔提到的一句話,爲什麼默認參數是靜態綁定:靜態默認參數的結合

如果默認參數值進行動態綁定,編譯器將不得不拿出一個辦法來確定適當的用於在運行時虛擬函數,這將是比編譯期間確定它們的當前機制慢,更復雜的參數的默認值。

誰能闡述這個多一點?爲什麼它是複雜和低效的?

非常感謝!

回答

2

每當一類有虛函數,編譯器生成的所謂的V-表來計算所需要在運行時,以支持動態綁定和多態行爲的正確地址。許多類優化器正是因爲這個原因去除虛擬函數。更少的開銷和更小的代碼。如果默認參數也被計算入方程,它將使整個虛擬函數機制更加繁瑣和臃腫。

0

因爲函數調用實際調用需要使用與對象實例,並從該deault需要以某種方式來推斷相關的虛函數表中查找。這意味着ctable將需要延長要麼就需要格外管理到默認鏈接到的V表項。