c++ - 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;
}
好吧,如果搜索成功,我有点希望它返回一个指向节点的指针,所以如果需要,我可以在函数调用中访问它的值。
解决方案
nullptr
是搜索失败时的正确返回值。这是使用指针而不是引用的优点,因为如果您知道自己总是会有一个值,那么您可以返回一个引用。
调用代码应始终检查nullptr
何时接收到来自函数调用的指针,并处理搜索失败的事实。
C++ 核心指南在F.60 中指出:
当“无参数”是有效选项时,首选 T* 而不是 T&
指针 (T*) 可以是 nullptr,而引用 (T&) 不能,没有有效的“空引用”。有时使用 nullptr 作为指示的“无对象”的替代方法很有用,但如果不是,则引用在符号上更简单,并且可能会产生更好的代码。
推荐阅读
- java - 如何以编程方式将所有可通过电子邮件发送的 testng 报告合并为单个报告
- javascript - 我在浏览器控制台中显示数据时遇到了一些问题
- python - 对于以networkx图为背景的大型数据集,使用matplotlib将多列动画为点非常慢
- jenkins - AKS 中的 Docker-in-Docker
- vba - Excel VBA - 带有 462 错误的 Word.Selection 问题
- jmeter - Jmeter-不识别文件中的字母
- branch.io - 如何将自定义数据传递给 branch.io SDK 横幅 init() 调用
- javascript - vue-router:更新查询时 this.$router.push 不起作用
- python - Matplotlib:从 3D 散点图中检索 rgba
- c# - 为什么我不能“等待”来自 Atlassian SDK 的异步方法?