Spec-Zone.ru › C++

Операторы

Операторы — это фрагменты программы C++, выполняемые последовательно. Тело любой функции представляет собой последовательность операторов. Например:

int main()
{
    int n = 1;                        // declaration statement
    n = n + 1;                        // expression statement
    std::cout << "n = " << n << '\n'; // expression statement
    return 0;                         // return statement
}

C++ включает следующие типы операторов:

1) операторы с метками;
2) операторы выражений;
3) составные операторы;
4) операторы выбора;
5) операторы цикла;
6) операторы перехода;
7) операторы объявления;
8) блоки try;
9) атомарные и синхронизированные блоки (TM TS).

Операторы с метками

Оператор с меткой используется для управления потоком выполнения.

метка оператор
метка - метка, применённая к оператору (определяется ниже)
оператор - оператор, к которому применяется метка; может быть оператором с меткой, что позволяет использовать несколько меток


метка определяется как

attr (необязательно) идентификатор : (1)
attr (необязательно) case constexpr : (2)
attr (необязательно) default: (3)
1) целевой для goto;
2) метка case в операторе switch;
3) метка default в операторе switch.

Последовательность атрибутов attr может располагаться только в начале метки (в этом случае она применяется к метке) или перед самим оператором, в этом случае она применяется ко всему оператору.

(с C++11)

Метка с идентификатором, объявленным внутри функции, соответствует всем операторам goto с тем же идентификатором в этой функции, во всех вложенных блоках, до и после собственного объявления.

Две метки в функции не должны иметь одинаковый идентификатор.

Помимо добавления к оператору, метки также могут использоваться в составных операторах.

(с C++23)

Метки не обнаруживаются с помощью неквалифицированного поиска: метка может иметь такое же имя, как и любой другой объект в программе.

void f()
{
    {
        goto label; // label in scope even though declared later
        label:      // label can appear at the end of a block standalone since C++23
    }
    goto label; // label ignores block scope
}
 
void g()
{
    goto label; // error: label not in scope in g()
}

Операторы выражений

Оператор выражения — это выражение, за которым следует точка с запятой.

attr (необязательно) выражение (необязательно) ;
attr - (с C++11) необязательная последовательность любого количества атрибутов
выражение - выражение

Большинство операторов в типичной программе C++ являются операторами выражений, такими как присваивания или вызовы функций.

Оператор выражения без выражения называется пустым оператором. Он часто используется для предоставления пустого тела цикла for или while. Он также может использоваться для размещения метки в конце составного оператора.(до C++23)

Составные операторы

Составной оператор или блок группирует последовательность операторов в один оператор.

attr (необязательно) { оператор... (необязательно) метка... (необязательно)(с C++23) }

Когда ожидается один оператор, но необходимо выполнить несколько операторов последовательно (например, в операторе if или цикле), можно использовать составной оператор:

if (x > 5)          // start of if statement
{                   // start of block
    int n = 1;      // declaration statement
    std::cout << n; // expression statement
}                   // end of block, end of if statement

Каждый составной оператор вводит свой собственный блок область видимости; переменные, объявленные внутри блока, уничтожаются при закрывающей фигурной скобке в обратном порядке:

int main()
{ // start of outer block
    {                                // start of inner block
        std::ofstream f("test.txt"); // declaration statement
        f << "abc\n";                // expression statement
    }                                // end of inner block, f is flushed and closed
    std::ifstream f("test.txt"); // declaration statement
    std::string str;             // declaration statement
    f >> str;                    // expression statement
} // end of outer block, str is destroyed, f is closed

Метка в конце составного оператора обрабатывается так, как если бы за ней следовал пустой оператор.

(с C++23)

Операторы выбора

Оператор выбора выбирает между несколькими потоками управления.

attr (необязательно) if constexpr(необязательно) ( init-statement (необязательно) condition ) оператор (1)
attr (необязательно) if constexpr(необязательно) ( init-statement (необязательно) condition ) оператор else оператор (2)
attr (необязательно) switch ( init-statement (необязательно) condition ) оператор (3)
attr (необязательно) if !(необязательно) consteval составной-оператор (4) (с C++23)
attr (необязательно) if !(необязательно) consteval составной-оператор else оператор (5) (с C++23)
1) оператор if;
2) оператор if с else-частью;
3) оператор switch;
4) оператор consteval if;
5) оператор consteval if с else-частью.

Операторы цикла

Оператор цикла многократно выполняет некоторый код.

attr (необязательно) while ( condition ) оператор (1)
attr (необязательно) do оператор while ( выражение ) ; (2)
attr (необязательно) for ( init-statement condition (необязательно) ; выражение (необязательно) ) оператор (3)
attr (необязательно) for ( init-statement (необязательно)(с C++20) for-range-decl : for-range-init ) оператор (4) (с C++11)
1) цикл while;
2) цикл do-while;
3) цикл for;
4) цикл range for.

Операторы перехода

Оператор перехода безусловно изменяет поток управления.

attr (необязательно) break; (1)
attr (необязательно) continue; (2)
attr (необязательно) return expression (необязательно) ; (3)
attr (необязательно) return braced-init-list ; (4) (с C++11)
attr (необязательно) goto identifier ; (5)
1) оператор break;
2) оператор continue;
3) оператор return с необязательным выражением;
4) оператор return с использованием инициализации списком;
5) оператор goto.

Примечание: для всех операторов перехода выход из цикла, блока или возврат к уже инициализированной переменной со сроком жизни автоматически приводит к уничтожению объектов со сроком жизни автоматически, находящихся в области видимости в момент выхода, но не в области видимости в момент возврата. Если несколько объектов были инициализированы, порядок уничтожения — обратный порядку инициализации.

Операторы объявления

Оператор объявления вводит один или несколько идентификаторов в блок.

block-declaration (1)
1) см. Объявления и Инициализацию для получения подробностей.

Блоки try

Блок try перехватывает исключения, возникающие при выполнении других операторов.

attr (необязательно) try compound-statement handler-sequence (1)
1) см. try/catch для получения подробностей.

Атомарные и синхронизированные блоки

Атомарный и синхронизированный блок предоставляет транзакционную память.

synchronized compound-statement (1) (TM TS)
atomic_noexcept compound-statement (2) (TM TS)
atomic_cancel compound-statement (3) (TM TS)
atomic_commit compound-statement (4) (TM TS)
1) синхронизированный блок, выполняемый в едином общем порядке со всеми синхронизированными блоками; 2) атомарный блок, который прерывается при возникновении исключения; 3) атомарный блок, который откатывается при возникновении исключения; 4) атомарный блок, который подтверждается при возникновении исключения.
(TM TS)

См. также

Документация C для Операторов

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/language/statements

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API