0
這是一個純粹好奇的問題,我不認爲答案可能會導致很大的改進。鑄造一個對象兩次vs一次表演
讓我們假設有這種樹的繼承:
A
/\
/ \
AB AC
/\ /\
ABB ABC ACB ACC
我要編寫一個執行型動物的行爲基礎上的對象類型的函數。 我100%確定這個對象只能是一個AC對象或它的一個子對象。
現在它的代碼是更快:
int t = getObjectType();
A* obj = getObject();
switch (t) {
case 0:
ACB* casted_obj = static_cast<ACB*>(obj);
case 1:
ACC* casted_obj = static_cast<ACC*>(obj);
}
或
int t = getObjectType();
A* sup = getObject();
AC* obj = static_cast<AC*>(sup);
switch (t) {
case 0:
ACB* casted_obj = static_cast<ACB*>(obj);
case 1:
ACC* casted_obj = static_cast<ACC*>(obj);
}
或許C++標準不說如何繼承樹必須管理什麼,所以答案取決於實現。
這兩個代碼都是*錯誤*:你忘了'break'。 – kennytm 2012-07-26 13:41:22
此外,[你不能在開關中聲明變量](http://stackoverflow.com/q/92396/912144),但我們得到的主旨。 – Shahbaz 2012-07-26 13:44:29