Требуется ли пустое выражение return в конце функции, чей тип возврата void необходим? - PullRequest
3 голосов
/ 16 февраля 2012

Большинство вопросов по SO относятся к не пустым типам возврата, но у нас идет пламенная война по этому поводу, и мы хотели выяснить, что думает сообщество.

void DoSomething()
{
   return; // Is this needed?
}

Из этого обсуждения похоже, что проблема неопределенного поведения связана с функциями не возвращаемых типов. Имеют ли типы возврата void такое же неопределенное поведение, или это только в функции возврата без void?

Меня беспокоит то, что это просто станет ужасным стилем кодирования, который ничем не оправдан. Однако, если это также неопределенное поведение для функций возврата void, тогда я вижу необходимость добавить его в стандарт кодирования. Если ответ для C и C ++ отличается, это тоже нормально.

§ 6.6.3 Оператор возврата

2 Оператор возврата без выражения может использоваться только в функции, которые не возвращают значение, то есть функцию с возвращаемый тип void, contrsuctor (12.1) или деструктор (12.4).

§ 6.6.3 / 2

Вытекает из конца функции эквивалентно возврату без значения; это приводит к неопределенному поведению в функция, возвращающая значение.

Ответы [ 3 ]

17 голосов
/ 16 февраля 2012

Нет;в этом нет необходимости.

Вам нужно написать return;, только если вы хотите вернуться рано и пропустить оставшуюся часть функции.

2 голосов
/ 16 февраля 2012

Вы правы, return; никогда не требуется в функции, которая не выходит из себя раньше.

0 голосов
/ 05 августа 2014

Возврат явный.Это говорит о том, что автор четко понимал, что возвращаемого значения не было.

Кстати, допустим только один возврат, но это другое обсуждение (поэтому не отвечайте здесь !!).

Кроме того, с точки зрения обслуживания кода, " return; " предоставляет удобное место для добавления значения, если функция когда-либо изменяется с void.

Оставьте егов!Цель состоит в том, чтобы не видеть, кто может написать функцию с наименьшим количеством строк.

...