gpt4 book ai didi

C++ 并返回 null - 在 Java 中有效的方法在 C++ 中无效

转载 作者:太空宇宙 更新时间:2023-11-04 14:40:21 25 4
gpt4 key购买 nike

因此,我经历了从 Java/C# 到 C++ 的相当困惑的转换。尽管我觉得我理解了大部分基础知识,但我的理解中还是存在一些巨大的漏洞。

例如,考虑以下函数:

Fruit&
FruitBasket::getFruitByName(std::string fruitName)
{
std::map<std::string,Fruit>::iterator it = _fruitInTheBascit.find(fruitName);
if(it != _fruitInTheBascit.end())
{
return (*it).second;
}
else
{
//I would so love to just return null here
}

}

在哪里_fruitsInTheBascitstd::map<std::string,Fruit> .如果我查询 getFruitByName("kumquat")你知道它不会在那里 - 谁吃金橘?但我不希望我的程序崩溃。这些情况应该怎么办?

附言告诉我我还没有发现的任何其他愚蠢行为。

最佳答案

C++中没有空引用这样的东西,所以如果函数返回一个引用,就不能返回空值。您有多种选择:

  1. 改变返回类型,使函数返回一个指针;如果未找到该元素,则返回 null。

  2. 保留引用返回类型,但有某种“哨兵”水果对象,如果找不到该对象,则返回对它的引用。

  3. 如果在 map 中找不到水果,则保留引用返回类型并抛出异常(例如,FruitNotFoundException)。

我倾向于使用 (1) 如果可能会失败,(3) 如果不太可能失败,其中“可能”是一个完全主观的衡量标准。我认为 (2) 有点 hack,但我看到它在某些情况下使用得很好。

举一个“不太可能”失败的例子:在我当前的项目中,我有一个管理对象的类,它有一个返回对象是否存在的函数 is_object_present 和一个函数 get_object 返回对象。我总是希望调用者在调用 get_object 之前通过调用 is_object_present 来验证对象的存在,因此在这种情况下失败的可能性很小。

关于C++ 并返回 null - 在 Java 中有效的方法在 C++ 中无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3285970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com