C++ 从函数返回空结构

Fry*_*Fry 6 c++ struct

我有一个这样的结构

struct AUTO{
   int weight;
   string name;
}
Run Code Online (Sandbox Code Playgroud)

我有一个函数通过传递返回一个结构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 ?????
}
Run Code Online (Sandbox Code Playgroud)

但我不知道函数末尾返回什么。有nullfor 结构吗?

ten*_*our 6

你有很多选择:

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

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