没有返回值的g ++ throw错误

时间:2018-03-06 12:51:09

标签: c++ function return g++ throw

如果我有一个带有一些返回值的函数。而且我想根据参数抛出一个异常,是否可以不写返回值?

例如:

State &States::getState(StateType stateType)
{
    for(auto &pair : states)
        if(pair.first == stateType)
            return *pair.second;

    THROW("Cannot find the requested State."); //MACRO TO THROW AND PRINT
}

我总是收到警告:“控制可能会达到无效功能的结束”。 如何仅在更改我的c ++代码时删除该警告?

1 个答案:

答案 0 :(得分:-1)

  

是否可以不写回传值?

出于可读性目的,最好在函数原型声明时指定返回。史蒂夫麦康奈尔写道"当从底部读取它时,你很难理解一个例程,你不知道它返回到某个地方的可能性。" (代码完成,393)

  

如何仅在更改我的c ++代码时删除该警告?

如何提供参考参数" return"作为一种解决方法?但是,您需要检查State类是否必须重载operator =。

void States::getState(const StateType stateType, State& toGet)
{
    for(auto &pair : states)
        if(pair.first == stateType)
            toGet = pair.second;

    THROW("Cannot find the requested State."); //MACRO TO THROW AND PRINT
}