Node * replaceValue(Node * x) const
    { 
        if (x == nullptr)
            return nullptr;
        if (x->left != nullptr)
            replaceValue(x->left);
        else
            return x;
    }警告:控制到达非空函数的末尾
我应该无视这个吗?我确保这个函数总是返回一些东西(用nullptr初始化的所有指针),但是我不希望这个警告不断弹出。如果我在函数的末尾添加一个返回nullptr,那么它就会崩溃。有办法绕过这件事吗?
发布于 2015-10-04 04:26:33
千万不要忽视警告。它告诉你一些重要的事情。
在这种情况下,当递归调用replaceValue时,您将从该调用中丢弃返回值,然后从函数底部掉出而不返回任何内容。
您可能希望使用return replaceValue代替。
发布于 2020-06-24 18:32:15
虽然这是一个很老的问题,但我还是会回答的。
这就像没有为switch语句提供默认大小写一样。当控件到达非空函数的末尾时,它不会返回任何内容,以防所有条件都失败。我相信编译器是这样做的,这样您就可以处理函数的所有角落情况和可能性。例如,如果用户输入一个未在函数中使用的数据类型值,则可以在不引发异常的情况下返回默认值。
如果不想这样做,可以始终使用不返回任何内容的void函数。
您应该考虑添加这样一个返回语句,以便在递归调用之后返回一个值。
if (x->left != nullptr)
     return replaceValue(x->left);但是,如果您确信您的函数处理了所有的角落情况,并且控件永远不会达到默认值,那么您可以像这样在最后添加return x。这里的return x只是为了抑制错误消息,在您的情况下没有其他的。
    Node * replaceValue(Node * x) const
    { 
        if (x == nullptr)
            return nullptr;
        if (x->left != nullptr)
            replaceValue(x->left);
        else
            return x;          
        return x;               // Default value
    }https://stackoverflow.com/questions/32930018
复制相似问题