我有一个包含联合作为字段的类。联合是指向两个不同类的指针。作为第二个字段,我的类包含一个标志,通知当前存储的是哪种类型。
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++ 是否会在构建异常中抛出一些异常以及何时会抛出一些异常。或者也许我应该以其他方式处理这种情况,最好还是不仔细检查标志。