Прав ли IDE относительно бесконечно рекурсивного?
Да, ваша IDE права. Потенциально ваш test
никогда не вернется.
Если IDE верна, в каком случае произойдет бесконечно рекурсивный процесс?
Считать неисправным isEndOfStream
:
bool isEndOfStream() { return false; }
В этом случае рекурсия никогда не останавливается. Хорошо, что ваша IDE предупредила вас об этом. Можно было бы считать это недостатком дизайна, который test
ломается, когда isEndOfStream
имеет ошибку. Что если isEndOfStream
написан кем-то другим? Тогда вы не хотите, чтобы его проблемы проявились на вашей стороне.
И почему это происходит только в режиме try-catch?
Я не знаю. По моему опыту IDE могут быть очень плохими в диагностике проблем в вашем коде. Статический анализ кода на С ++ не тривиален. Даже качественные инструменты, о которых я знаю, не могут избежать промахов и ложных срабатываний. Это странное поведение не предупреждать без try
не является большим сюрпризом.
В конце концов вы должны быть рады получить предупреждение и убедиться, что бесконечной рекурсии не существует. Не полагайтесь на свою IDE для этого. Для вашего кода существует бесконечная рекурсия в точности, если isEndOfStream()
никогда не вернет true
.
Либо вы можете убедиться, что это не так, либо вы предприняли некоторые дополнительные меры, чтобы остановить рекурсию. ... или вы просто принимаете тот факт, что вы не можете гарантировать, что никогда не будет бесконечной рекурсии.