for (VPW::iterator iter = winPtrs.begin(); iter != winPtrs.end(); ++iter)
{
if (SpecialWindow1 *psw1 = dynamic_cast(iter->get())) { ... }
else if (SpecialWindow2 *psw2 = dynamic_cast(iter->get())) { ... }
else if (SpecialWindow3 *psw3 = dynamic_cast(iter->get())) { ... }
...
}
這樣的 C++ 會生成的代碼又大又慢,而且很脆弱,因為每次 Window 類繼續體系發生變化,所有這樣的代碼都要必須被檢查,以確認是否需要更新。(例如,假如增加了一個新的派生類,在上面的極聯中或許就需要加入一個新的條件分支。)看起來類似這樣的代碼應該總是用基於虛函數的調用的某種東西來替換。 好的 C++ 極少使用強制轉型,但在通常情況下完全去除也不實際。例如,從 int 到 double 的強制轉型,就是對強制轉型的合理運用,雖然它並不是絕對必要。(那些代碼應該被重寫,聲明一個新的類型為 double 的變量,並用 x 的值進行初始化。)就像大多數可疑的結構成分,強制轉型應該被盡可能地隔離,典型情況是隱藏在函數內部,用函數的接口保護調用者遠離內部的污穢的工作。