У меня есть класс (здесь 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");
}
}
Затем, когда я компилирую в режиме Release, я получаю это предупреждение:
предупреждение: управление достигает конца непустой функции
Как лучше всего избежать этого предупреждения в этом случае? Я не могу вернуть пустую строку, потому что это приведет к ссылке на временный объект, а затем к другому предупреждению. Я предпочитаю не генерировать исключение в этом контексте, потому что это только для устранения предупреждения. Если выполнение вызывает часть по умолчанию, это ошибка программирования, она будет обнаружена в режиме отладки в предварительном выпуске с утверждением. Обычно выполнение никогда не вызывает его в режиме Release, и в этом случае допустимо неопределенное поведение.
this->type
никогда не имеет значения, отличного от 1 или 2. - person molbdnilo   schedule 05.06.2015exception
илиabort()
или изменить дизайн, чтобы избежать случая переключения. - person Jarod42   schedule 05.06.2015