首页 > 解决方案 > find 函数在失败结果中应该返回什么?

问题描述

自从我第一次意识到 List 类以来,这个问题一直困扰着我,我需要一种方法来查找数据等于输入值的节点。如果 ==,那么,显然,立即返回。然而在其他方面?那它应该怎么做?

我想过抛出一个异常,但是当程序从函数调用中识别出失败时,它将如何表现?

Node* find_node(const T &data) {
    if (is_empty())
        std::exit(1);

    Node *temp = _head;

    while (temp != nullptr) {
        if (temp->_data == data)
            break;
        temp = temp->_next;
    }     

    return temp;
}

好吧,如果搜索成功,我有点希望它返回一个指向节点的指针,所以如果需要,我可以在函数调用中访问它的值。

标签: c++functionreturn

解决方案


nullptr是搜索失败时的正确返回值。这是使用指针而不是引用的优点,因为如果您知道自己总是会有一个值,那么您可以返回一个引用。

调用代码应始终检查nullptr何时接收到来自函数调用的指针,并处理搜索失败的事实。

C++ 核心指南在F.60 中指出:

当“无参数”是有效选项时,首选 T* 而不是 T&

指针 (T*) 可以是 nullptr,而引用 (T&) 不能,没有有效的“空引用”。有时使用 nullptr 作为指示的“无对象”的替代方法很有用,但如果不是,则引用在符号上更简单,并且可能会产生更好的代码。


推荐阅读