есть ли причина, по которой большинство / все примеры try-catch используют только операторы void-sub-функции для оператора throw

повсюду я вижу пример кода, подобного этому (не проверенного на компиляцию) в операторе try-исключением и throw, представленном в большинстве реализаций c ++:

void subfunction(int a)
{
throw;
}
void function(int a)
{
try
{
subfunction(a)
}
catch(...)
{
}
}

Теперь мне интересно, есть ли веская причина, почему эквивалент function() или же subfunction() (почти) всегда в этих образцах реализуется как пустота в этих образцах. есть ли конкретная причина или влияние в отношении трех упомянутых специальных c++ ключевые слова? что может означать предупреждение типа «функция пропускает оператор возврата», «не все пути управления возвращают значение» и тому подобное? это ключевое слово «throw» где-то внутри, помечено как noreturn или аналогичный (как можно найти в «exit ()» для некоторых компиляторов)?

PS В настоящее время я нахожусь на MSVS 2012 с соответствующим MSVC, но я использую и другие компиляторы, такие как GNUC в его различных текущих версиях.

-1

Решение

throw может использоваться в не void-функции.

throw «имеет noreturn атрибут не должен провоцировать предупреждение о «не все пути управления возвращают значение» для кода, похожего на

double my_div(double a, double b)
{
if (b == 0.) {
throw std::runtime_error("division by zero");
// No warning here
} else {
return a / b;
}
}
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]