if (!ifs)
cerr << "我靠,实施人员又没有把文件放到C盘根目录……" << endl;
return;
因为我们已经习惯了空的流也是一个合法的流的认识,亦即:将没有打开文件的状态,也视为流对象的正常状态之一。
所以,这事如果就只讨论技术方法。那无非就两种(别的答案都提到了):
抛异常,死给调用者看(倒逼他苦吧吧地处理异常)。
两段式构造,即,允许对象有一个为空的状态,相应的,这个空状态下,该对象其实什么事也干不了,为此,调用者需要在构造对象后,马上检查并处理。就像上面的 流对象。
有不少答案可能是在讨论“C++构造失败,要不要抛异常?”这件事,而不是在讨论“一个C++写的股票的小例子中,如果股票对象构造失败,要不要抛出异常?”这个问题。
不考虑场景,则在设计上,实际1和2都是正确的方法,所以别的答案里见仁见智,有人选择一反对二,有人选二反对一。
但其实这本质是一个带有业务的设计上问题,是一个需要考虑场景才好得出答案的问题:即:在这个“带有参数输入错误检查需要的股票构造,适用“构造失败抛出异常”及“两段式”中哪一种方法?依据是什么?具体如何做?