首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >非空函数警告的递归函数抛出结束

非空函数警告的递归函数抛出结束
EN

Stack Overflow用户
提问于 2015-10-04 04:25:10
回答 2查看 1K关注 0票数 0
代码语言:javascript
运行
复制
    Node * replaceValue(Node * x) const
    { 
        if (x == nullptr)
            return nullptr;
        if (x->left != nullptr)
            replaceValue(x->left);
        else
            return x;
    }

警告:控制到达非空函数的末尾

我应该无视这个吗?我确保这个函数总是返回一些东西(用nullptr初始化的所有指针),但是我不希望这个警告不断弹出。如果我在函数的末尾添加一个返回nullptr,那么它就会崩溃。有办法绕过这件事吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-04 04:26:33

千万不要忽视警告。它告诉你一些重要的事情。

在这种情况下,当递归调用replaceValue时,您将从该调用中丢弃返回值,然后从函数底部掉出而不返回任何内容。

您可能希望使用return replaceValue代替。

票数 5
EN

Stack Overflow用户

发布于 2020-06-24 18:32:15

虽然这是一个很老的问题,但我还是会回答的。

这就像没有为switch语句提供默认大小写一样。当控件到达非空函数的末尾时,它不会返回任何内容,以防所有条件都失败。我相信编译器是这样做的,这样您就可以处理函数的所有角落情况和可能性。例如,如果用户输入一个未在函数中使用的数据类型值,则可以在不引发异常的情况下返回默认值。

如果不想这样做,可以始终使用不返回任何内容的void函数。

您应该考虑添加这样一个返回语句,以便在递归调用之后返回一个值。

代码语言:javascript
运行
复制
if (x->left != nullptr)
     return replaceValue(x->left);

但是,如果您确信您的函数处理了所有的角落情况,并且控件永远不会达到默认值,那么您可以像这样在最后添加return x。这里的return x只是为了抑制错误消息,在您的情况下没有其他的。

代码语言:javascript
运行
复制
    Node * replaceValue(Node * x) const
    { 
        if (x == nullptr)
            return nullptr;
        if (x->left != nullptr)
            replaceValue(x->left);
        else
            return x;          

        return x;               // Default value

    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32930018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档