Пространства имён
Варианты
Действия

goto statement

Материал из cppreference.com
< cpp‎ | language

 
 
Язык С++
Общие темы
Управление программой
Операторы условного выполнения
Операторы повторения
Операторы перехода
оператор goto
оператор return
Функции
объявление функции
объявление лямбда-функции
шаблон функции
спецификатор inline
спецификаторы исключений (устарело)
спецификатор noexcept (C++11)
Исключения
Пространства имён
объявление пространства имён
псевдонимы пространства имён
Типы
спецификатор decltype (C++11)
Спецификаторы
cv-спецификаторы
спецификаторы продолжительности хранения
спецификатор constexpr (C++11)
спецификатор auto (C++11)
спецификатор alignas (C++11)
Инициализация
Литералы
Выражения
Утилиты
Типы
typedef-объявление
объявление псевдонима типа (C++11)
атрибуты (C++11)
Приведения типов
неявные преобразования
const_cast-преобразование
static_cast-преобразование
dynamic_cast-преобразование
reinterpret_cast-преобразование
C-подобное и функциональное приведение типов
Выделение памяти
Классы
Особые свойства классовых функций
Специальные функции-члены
Шаблоны
шаблон класса
шаблон функции
специализация шаблона
упакованные параметры (C++11)
Разное
Ассемблерные вставки
 
Передает управление в другое место.
Оригинал:
Transfers control to a new location.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Используется, когда иначе невозможно передать управление в нужном месте с помощью обычных конструкций.
Оригинал:
Used when it is otherwise impossible to transfer control to the desired location using conventional constructs.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

Содержание

[править] Синтаксис

goto label

[править] Объяснение

заявлении перейти передает управление по адресу, указанному на label. заявлении перейти должно быть в те же функции, label она имеет в виду. если переводы перейти заявление контролировать назад, все объекты, которые еще не инициализированы в label разрушаются. Это незаконно, чтобы передать управление вперед, если только это не пропустить инициализацию объекта.
Оригинал:
The goto statement transfers control to the location specified by label. The goto statement must be in the same function as the label it is referring. If goto statement transfers control backwards, all objects that are not yet initialized at the label are destructed. It is illegal to transfer control forwards if doing so would skip initialization of an object.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

[править] Ключевые слова

goto

[править] Пример

#include <iostream>
 
struct Object {
    ~Object() { std::cout << "d"; }
};
 
int main()
{
    int a = 10;
 
    //loop using goto
label:
    Object obj;
    std::cout << a << " ";
    a = a - 2;
 
    if (a != 0) {
        goto label;  //causes obj to be destructed
    }
    std::cout << '\n';
 
    //get out of multi-level loop easily
    for (int x = 0; x < 3; x++) {
        for (int y = 0; y < 3; y++) {
            std::cout << "(" << x << ";" << y << ") " << '\n';
            if (x + y >= 3) {
                goto endloop;
            }
        }
    }
endloop:
    std::cout << '\n';
 
    return 0;  //causes obj to be destructed
}

Вывод:

10 d8 d6 d4 d2
(0;0) (0;1) (0;2) (1;0) (1;1) (1;2)
d