我有一个类(这里是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模式下调用它,在这种情况下可以接受未定义的行为。
答案 0 :(得分:4)
" ...在这种情况下,随机行为是可以接受的。"
这可能是可以接受的,但你为什么要这样做?只需在assert
之后添加assert
,您就不会花时间在这里,或者写一个宏来添加exit
和break
。
另外,您不需要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;
}