Операторы прыжка безоговорочно передают управление.
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
break Заявление должно происходить только в или в заявлении и причинах прекращения наименьшего ограждающих или заявления; управление переходит к оператору, следующему за завершенным оператором, если таковой имеется.iteration-statement switch iteration-statementswitch
Этот continue оператор должен встречаться только в и заставляет управление переходить к части продолжения цикла наименьшего охватывающего элемента , то есть к концу цикла. Точнее, в каждом из утвержденийiteration-statementiteration-statement
while (foo) {
{
// ...
}
contin: ;
}
do {
{
// ...
}
contin: ;
} while (foo);
for (;;) {
{
// ...
}
contin: ;
}
a, continue не содержащийся во вложенном операторе итерации, эквивалентен goto contin.
Оператор 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 note Example:
std::pair<std::string,int> f(const char* p, int x) { return {p,x}; }
— end example ] Выход за конец конструктора, деструктора или функции с cv void возвращаемым типом эквивалентен a return без операнда. В противном случае переход за пределы функции, отличной от main результата, приведет к неопределенному поведению.
Копирование-инициализация результата вызова упорядочивается до уничтожения временных файлов в конце полного выражения, установленного операндом оператора return, который, в свою очередь, упорядочивается до уничтожения локальных переменных ([stmt.jump]) блок, содержащий оператор возврата.