C++从函数返回null结构

C++ return null struct from function

本文关键字:null 结构 返回 函数 C++      更新时间:2023-10-16

我有一个类似的结构

struct AUTO{
   int weight;
   string name;
}

我有一个函数,它通过传递name 来返回一个结构

AUTO autoByName(String name, AUTO a[], int ll)
{
   for(int i = 0; i < ll; i++)
   {
      if (name == a[i].name)
      {
         return a[i];
      }
   }
   // AND HERE ?????
}

但我不知道函数末尾会返回什么。结构是否有null

您有很多选择:

  1. AUTO一种表示"无值"的方法。例如,通过使重量为-1。或者在上面加上一面旗帜。这太难看了;我不推荐它,尽管它在实践中有点常见
  2. 返回一个(智能)指针而不是值。这样,在出现错误/没有值的情况下,您可以返回nullptr。这也很丑陋,因为它迫使你处理指针,原因不是很充分
  3. 返回一个单独的值以表示成功。例如,向函数添加bool &wasFound参数
  4. 返回boost::optionalstd::pair<AUTO, bool>以完成几乎相同的事情,但都包含在返回值中。这可能是最干净的。例如,std::map::find就是这样工作的
  5. 引发异常。如果调用方不尝试查找不存在的项目,则这可能是可以接受的。换句话说,如果"未找到"只是一个返回值,那么就不要抛出异常。如果"未找到"确实是一个程序错误条件,那么抛出异常实际上可能是有意义的。如果你不确定,不要抛出异常

我推荐#4,或者在极少数情况下推荐#5。