1

如何避免并非所有控制路径都在此处返回 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>());
            }
        }

更新: 我在想我可以在这里抛出一个异常,但我不能对它进行单元测试,因为不可能将无效的类型传递给函数。

4

3 回答 3

3

我倾向于assert()在底部添加一个:

Container containerFactory(Type type)
{
    // ...
    assert( !"Unreachable code hit!" );
    return Container();
}
于 2012-10-08T11:54:00.783 回答
2

显然,传递一个无效值是一个编程错误。在“我的世界”/rulebook/whatever 中,编程错误会导致断言失败,而不是异常。

编辑:出于这个原因,我实际上至少有两个主要的断言语句:一个在发布版本中被删除,另一个没有。大多数最终会留在代码中,以防触发错误,但有时断言可能过于昂贵,不值得在发布版本中使用。

如果您的编译器无法将断言识别为“不会返回的东西”,您可以返回任何您想要关闭它的东西。除非您想向调用接口添加错误检查,否则无论如何都没有“良好的回报”,因为您不知道调用者希望从他的“759843682”未初始化请求中获得什么类型的容器:-)

于 2012-10-08T11:52:52.190 回答
1

要么throw,默认返回其中一种Enum类型,要么返回一个null_ptr.

于 2012-10-08T11:52:50.737 回答