C ++从函数返回null结构

时间:2014-04-09 19:31:47

标签: c++ struct

我有这样的结构

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 个答案:

答案 0 :(得分:2)

你有很多选择:

  1. AUTO一种表示&#34;无价值&#34;的方法。例如,通过使重量-1。或者通过添加标志。这非常难看;我不推荐它,即使它在实践中有点普遍。
  2. 返回(智能)指针而不是值。这样,您可以在错误/无值的情况下返回nullptr。这也很难看,因为它迫使你处理指针的原因不是很好。
  3. 返回一个单独的值以表示成功。例如,向函数添加bool &wasFound参数。
  4. 返回boost::optionalstd::pair<AUTO, bool>完成相同的事情,但所有这些都包含在返回值中。这可能是最干净的。这就是std::map::find的工作原理,例如。
  5. 抛出异常。如果来电者不想找到不存在的物品,这是可以接受的。换句话说,如果没有找到&#34;&#34;只是一个返回值,然后不要抛出异常。如果&#34;未找到&#34;是一个真正的程序错误条件,抛出一个异常可能实际上是有道理的。如果您不确定,请不要抛出异常。
  6. 我建议#4,或者在罕见的情况下#5。