我有一個類包含聯合作爲一個字段。該聯盟是指向兩個不同類別的指針。作爲第二個字段,我的類包含一個標誌,通知哪種類型當前存儲。C++異常和錯誤的聯合閱讀
class Item {
std::string *title;
bool who_am_I;
union { Submenu *smenu; Function *call; } content;
public:
bool am_I_a_submenu();
bool am_I_a_function();
Submenu *give_me_submenu();
Function *give_me_function();
/*(...)*/
};
現在,我的「give_me」方法的每一個在使用前我敦促用戶檢查通過適當的方法訪問標誌的類型,即「am_I」方法。不過,如果用戶偶然忘記它,我希望我的圖書館能夠拋出適當的異常。我可以這樣做,而不檢查「give_me」方法內的標誌嗎?我問,因爲這意味着在正常使用情況下,標誌被不必要地檢查兩次。
我想知道,如果一旦類型的衝突會導致程序運行出現故障,C++會在什麼時候拋出一些異常。或者,也許我應該處理這種情況,否則,最好沒有雙重檢查國旗。
不要擔心'檢查兩次':沒關係(只要檢查函數是內聯的),因爲'who_am_I'和union會在同一個緩存行中。 – Sjoerd
您是否嘗試使用多態而不是使用聯合來創建Item的兩個子類? 通過這種方式,你可以避免使用bool,通過使用多態來檢查你的物品的類型。 – tsukasan
它是否被內聯並不重要。支票的成本可以忽略不計。 –