在发布模式下避免“控制达到非空函数结束”警告的最佳方法

时间:2015-06-05 07:29:22

标签: c++ return-value compiler-warnings suppress-warnings

我有一个类(这里是MyObject),其函数根据对象的内部类型通过引用返回一个名称。而且,只能为内部类型的某些值调用此函数。

/**
 * \brief Return the name depending of the internal type
 * \pre   The internal type must be 1 or 2
 */
inline
const std::string& MyObject::getName() const
{
  switch(this->type)
  {
    case 1:
      return this->type1->getName();
      break;
    case 2:
      return this->type2->getName();
      break;
    default:
      assert(false && "PRE: Invalid type for this operation");
  }
}

然后,当我在发布模式下编译时,我收到此警告:

  

警告:控制到达非空函数的结尾

在这种情况下避免此警告的最佳方法是什么?我不能返回空字符串,因为它会导致对临时对象的引用,然后是另一个警告。我宁愿不在此上下文中抛出异常,因为它只是为了解决警告。如果执行调用默认部分,那么这是一个编程错误,它将在调试模式下在pre-prod中使用断言进行检测。通常,执行从不在Release模式下调用它,在这种情况下可以接受未定义的行为。

2 个答案:

答案 0 :(得分:4)

  

" ...在这种情况下,随机行为是可以接受的。"

这可能是可以接受的,但你为什么要这样做?只需在assert之后添加assert,您就不会花时间在这里,或者写一个宏来添加exitbreak

另外,您不需要case来自return的{​​{1}}。

答案 1 :(得分:4)

您可以返回静态变量的引用:

/**
 * \brief Return the name depending of the internal type
 * \pre   The internal type must be 1 or 2
 */
inline
const std::string& MyObject::getName() const
{
  switch(this->type)
  {
    case 1:
      return this->type1->getName();
      break;
    case 2:
      return this->type2->getName();
      break;
    default:
      assert(false && "PRE: Invalid type for this operation");
  }

  static std::string hack("");
  return hack;
}