如何避免并非所有控制路径都返回Container:
enum Type {Int, String};
Container containerFactory(Type type)
{
switch(type)
{
case Int:
return Container (std::vector<int>());
case String:
return Container (std::vector<std::string>());
}
}
更新 我在想我可以在这里抛出一个异常,但我不能对它进行单元测试,因为无法将无效的Type传递给函数。
答案 0 :(得分:3)
我倾向于在底部添加assert()
:
Container containerFactory(Type type)
{
// ...
assert( !"Unreachable code hit!" );
return Container();
}
答案 1 :(得分:2)
显然,传递无效值是编程错误。在“我的世界”/ rulebook /中,编程错误会导致断言失败,而不是异常。
编辑:出于这个原因,我实际上至少有两个主要的断言语句:一个在发布版本中被删除,另一个没有。如果错误被触发,大多数人最终会留在代码中,但有时断言可能太昂贵而不值得在发布版本中执行。如果您的编译器没有将断言识别为“无法返回的内容”,则可以返回任何想要将其关闭的内容。除非您想要将错误检查添加到调用接口,否则无论如何都没有“良好的回报”,因为您不知道调用者希望从他的“759843682”未初始化请求中获得什么类型的容器: - )
答案 2 :(得分:1)
throw
,默认返回Enum
个类型之一或返回null_ptr
。