9 Statements [stmt.stmt]

9.6 Jump statements [stmt.jump]

Операторы прыжка безоговорочно передают управление.

jump-statement:
	break ;
	continue ;
	return expr-or-braced-init-listopt ;
	goto identifier ;

При выходе из области видимости ( automatic storage duration независимо от ее выполнения) объекты , которые были созданы в этой области, уничтожаются в порядке, обратном их построению. [ Note: Для временных см [class.temporary].. ] Передача из цикла, из блока или обратно через инициализированную переменную с автоматической продолжительностью хранения включает в себя уничтожение объектов с автоматической продолжительностью хранения, которые находятся в области видимости в точке передачи, но не в точке передачи. (См. Переводы в блоки). [ Однако программа может быть завершена (например, путем вызова или ( )) без разрушения объектов класса с автоматической продолжительностью хранения. ] end note [stmt.dcl] Note: std​::​exit() std​::​abort() [support.start.term]end note

9.6.1 The break statement [stmt.break]

break Заявление должно происходить только в или в заявлении и причинах прекращения наименьшего ограждающих или заявления; управление переходит к оператору, следующему за завершенным оператором, если таковой имеется.iteration-statement switch iteration-statementswitch

9.6.2 The continue statement [stmt.cont]

Этот continue оператор должен встречаться только в и заставляет управление переходить к части продолжения цикла наименьшего охватывающего элемента , то есть к концу цикла. Точнее, в каждом из утвержденийiteration-statementiteration-statement

while (foo) {
  {
    // ...
  }
contin: ;
}
do {
  {
    // ...
  }
contin: ;
} while (foo);
for (;;) {
  {
    // ...
  }
contin: ;
}

a, continue не содержащийся во вложенном операторе итерации, эквивалентен goto contin.

9.6.3 The return statement [stmt.return]

Функция возвращается к вызывающему с помощью return оператора.

Оператор expr-or-braced-init-list возврата называется его операндом. Оператор возврата без операнда должен использоваться только в функции, тип возврата которой - cv voida constructorили a destructor. Оператор возврата с операндом типа должен использоваться только в функции, тип возврата которой равен . Оператор возврата с любым другим операндом должен использоваться только в функции, тип возврата которой не является ; оператор return инициализирует результат glvalue или объект результата prvalue вызова функции (явного или неявного) из операнда. [ Оператор возврата может включать вызов конструктора для выполнения копирования или перемещения операнда, если он не является значением prvalue или если его тип отличается от типа возврата функции. Операция копирования, связанная с оператором return, может быть исключена или преобразована в операцию перемещения, если возвращается автоматическая переменная продолжительности хранения ( ). ] [ void cv void cv void copy-initialization Note: [class.copy]end noteExample:

std::pair<std::string,int> f(const char* p, int x) {
  return {p,x};
}

end example] Выход за конец конструктора, деструктора или функции с cv void возвращаемым типом эквивалентен a return без операнда. В противном случае переход за пределы функции, отличной от main результата, приведет к неопределенному поведению.

Копирование-инициализация результата вызова упорядочивается до уничтожения временных файлов в конце полного выражения, установленного операндом оператора return, который, в свою очередь, упорядочивается до уничтожения локальных переменных ([stmt.jump]) блок, содержащий оператор возврата.

9.6.4 The goto statement [stmt.goto]

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