Spec-Zone.ru › C++

Знаки препинания

Это знаки препинания в C++. Значение каждого символа подробно описано на страницах по ссылкам.

Операторы препроцессора

Операторы препроцессора распознаются препроцессорами.

#

Альтернативное написание — %:.

  • Вводит директиву препроцессора.
  • Оператор препроцессора для преобразования в строку.

##

Альтернативное написание — %:%:.

  • Оператор препроцессора для склеивания токенов.

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

{ и }

Альтернативные написания — <% и %> соответственно.

  • В определении класса ограничивают описание членов.
  • В определении перечисления ограничивают список перечислителей.
  • Ограничивают составной оператор. Составной оператор может быть частью
    • определения функции
    • блока try
  • лямбда-выражения
(начиная с C++11)
  • Часть синтаксиса агрегатной инициализации(до C++11)списковой инициализации(начиная с C++11) инициализатора.
  • В определении пространства имён ограничивают тело пространства имён.
  • В спецификации языковой связи ограничивают объявления.
  • В выражении requires ограничивают требования.
  • В составном требовании ограничивают выражение.
  • В объявлении экспорта ограничивают объявления.
(начиная с C++20)

[ и ]

Альтернативные написания — <: и :> соответственно.

  • Оператор индексирования; часть operator[] при перегрузке операторов.
  • Часть декларатора массива в объявлении или идентификаторе типа (например, в выражении new).
  • Часть оператора new[] при перегрузке операторов (функция выделения памяти).
  • Часть оператора delete[] в выражении delete и при перегрузке операторов (функция освобождения памяти).
  • В лямбда-выражении ограничивают захваты.
  • В спецификаторе атрибута ограничивают атрибуты.
(начиная с C++11)
  • В объявлении структурированной привязки ограничивают список идентификаторов.
(начиная с C++17)
  • В индексировании пакета ограничивают преобразованное константное выражение, представляющее индекс.
(начиная с C++26)

( и )

  • В выражении обозначают группировку.
  • Оператор вызова функции; часть operator() при перегрузке операторов.
  • В приведении типа в стиле вызова функции ограничивают выражение/инициализаторы.
  • В static_cast, const_cast, reinterpret_cast или dynamic_cast ограничивают выражение.
  • Ограничивают операнд следующих операторов:
    • typeid
    • sizeof
  • sizeof...
  • alignof
  • noexcept
(начиная с C++11)
  • В выражении размещения new ограничивают аргументы размещения.
  • В выражении new при необходимости ограничивают идентификатор типа.
  • В выражении new ограничивают инициализаторы.
  • В приведении типа в стиле C ограничивают идентификатор типа.
  • В объявлении или идентификаторе типа обозначают группировку.
  • Ограничивают список параметров в
    • деклараторе функции (в объявлении или идентификаторе типа)
  • лямбда-выражении
(начиная с C++11)
  • пользовательской инструкции вывода
(начиная с C++17)
  • выражении requires
(начиная с C++20)
  • Часть синтаксиса прямой инициализации инициализатора.
  • В объявлении asm ограничивают строковый литерал.
  • В списке инициализаторов членов ограничивают инициализаторы базового класса или члена.
  • Ограничивают управляющую часть оператора выбора или итерации, включая:
    • if (кроме consteval if)(начиная с C++23)
    • switch
    • while
    • do-while
    • for
  • диапазонном for
(начиная с C++11)
  • В обработчике ограничивают объявление параметра.
  • В определении функционально-подобного макроса ограничивают параметры макроса.
  • В вызове функционально-подобного макроса ограничивают аргументы макроса или предотвращают интерпретацию запятых как разделителей аргументов.
  • Часть оператора препроцессора defined, __has_include(начиная с C++17), __has_cpp_attribute(начиная с C++20).
  • В объявлении static_assert ограничивают операнды.
  • Ограничивают операнд следующих спецификаторов:
    • decltype
    • noexcept
    • alignas
  • explicit
(начиная с C++20)
  • В атрибуте ограничивают аргументы атрибута.
(начиная с C++11)
  • Часть спецификатора decltype(auto).
(начиная с C++14)
  • Ограничивают свёрточное выражение.
(начиная с C++17)
  • Часть подстановки __VA_OPT__ в определении вариативного макроса.
(начиная с C++20)

;

  • Обозначает конец
    • оператора
    • объявления или объявления члена
  • объявления модуля, объявления импорта, вводной конструкции глобального фрагмента модуля или вводной конструкции закрытого фрагмента модуля
  • требования
(начиная с C++20)
  • Разделяет условие и оператор оператора for.

:

  • Часть условного оператора.
  • Часть объявления метки.
  • В базовой части определения класса вводит базовый класс.
  • Часть спецификатора доступа в описании членов.
  • В объявлении битового поля вводит ширину.
  • В определении конструктора вводит список инициализаторов членов.
  • В операторе диапазонного for разделяет объявление элемента и инициализатор диапазона.
  • В базовой части перечисления объявления перечисления вводит базовый тип.
(начиная с C++11)
  • В спецификаторе атрибута разделяет пространство имён атрибута и список атрибутов.
(начиная с C++17)
  • В объявлении модуля или объявлении импорта раздела модуля вводит имя раздела модуля.
  • Часть вводной конструкции закрытого фрагмента модуля (module :private;).
(начиная с C++20)

?

  • Часть условного оператора.

.

  • Оператор доступа к члену.
  • В агрегатной инициализации вводит обозначитель.
  • Часть имени модуля или имени раздела модуля.
(начиная с C++20)

~

Альтернативное написание — compl.

  • Унарный оператор побитового дополнения (также называемый оператором побитового НЕ); часть operator~ при перегрузке операторов.
  • Часть выражения-идентификатора, задающего деструктор или псевдодеструктор.

!

Альтернативное написание — not.

  • Оператор логического НЕ; часть operator! при перегрузке операторов.
  • Часть оператора consteval if.
(начиная с C++23)

+

  • Унарный оператор плюса; часть operator+ при перегрузке операторов.
  • Бинарный оператор сложения; часть operator+ при перегрузке операторов.

-

  • Унарный оператор минуса; часть operator- при перегрузке операторов.
  • Бинарный оператор вычитания; часть operator- при перегрузке операторов.

*

  • Оператор разыменования; часть operator* при перегрузке операторов.
  • Оператор умножения; часть operator* при перегрузке операторов.
  • Оператор указателя или часть оператора «указатель на член» в деклараторе или идентификаторе типа.
  • Часть *this в списке захватов лямбда-выражения, используемая для захвата текущего объекта по значению.
(начиная с C++17)

/

  • Оператор деления; часть operator/ при перегрузке операторов.

%

  • Оператор остатка от деления; часть operator% при перегрузке операторов.

^

Альтернативное написание — xor.

  • Оператор побитового исключающего ИЛИ; часть operator^ при перегрузке операторов.

&

Альтернативное написание — bitand.

  • Оператор взятия адреса; часть operator& при перегрузке операторов.
  • Оператор побитового И; часть operator& при перегрузке операторов.
  • Оператор ссылки на lvalue в деклараторе или идентификаторе типа.
  • В захвате лямбда-выражения обозначает захват по ссылке.
  • Квалификатор ссылки в объявлении функции-члена.
(начиная с C++11)

|

Альтернативное написание — bitor.

  • Оператор побитового ИЛИ; часть operator| при перегрузке операторов.

=

  • Оператор простого присваивания; часть operator= при перегрузке операторов; он может быть специальной функцией-членом (оператор присваивания копированиемили оператор присваивания перемещением(начиная с C++11)).
  • Часть синтаксиса копирующей инициализации и агрегатной инициализации(до C++11)копирующей списковой инициализации(начиная с C++11) инициализатора.
  • В объявлении функции вводит аргумент по умолчанию.
  • В списке параметров шаблона вводит аргумент шаблона по умолчанию.
  • В определении псевдонима пространства имён разделяет псевдоним и пространство имён, для которого он задан.
  • В определении перечисления вводит значение перечислителя.
  • Часть спецификатора чистоты в объявлении чисто виртуальной функции.
  • Значение захвата по умолчанию в захвате лямбда-выражения, обозначающее захват по значению.
  • Часть определения по умолчанию (=default;) или удалённого определения (=delete;) в определении функции.
  • В объявлении псевдонима типа разделяет псевдоним и тип, для которого он задан.
(начиная с C++11)
  • В определении концепта разделяет имя концепта и выражение-ограничение.
(начиная с C++20)

<

  • Оператор «меньше»; часть operator< при перегрузке операторов.
  • В static_cast, const_cast, reinterpret_cast или dynamic_cast вводит идентификатор типа.
  • Вводит список аргументов шаблона.
  • Вводит список параметров шаблона в
    • объявлении шаблона
    • частичной специализации
  • лямбда-выражении
(начиная с C++20)
  • Часть template<> в объявлении специализации шаблона.
  • Вводит имя заголовка в
    • директиве #include
  • выражении препроцессора __has_include
(начиная с C++17)
  • объявлении import
(начиная с C++20)

>

  • Оператор «больше»; часть operator> при перегрузке операторов.
  • В static_cast, const_cast, reinterpret_cast или dynamic_cast обозначает конец идентификатора типа.
  • Обозначает конец списка аргументов шаблона.
  • Обозначает конец списка параметров шаблона в
    • объявлении шаблона
    • частичной специализации
  • лямбда-выражении
(начиная с C++20)
  • Часть template<> в объявлении специализации шаблона.
  • Обозначает конец имени заголовка в
    • директиве #include
  • выражении препроцессора __has_include
(начиная с C++17)
  • объявлении import
(начиная с C++20)

,

  • Оператор запятая; часть operator, в перегрузке операторов.
  • Разделитель элементов списка в
    • списке деклараторов в объявлении
    • списке инициализаторов в инициализации
    • списке аргументов размещения в размещающем new
    • списке аргументов в выражении вызова функции
    • списке перечислителей в объявлении перечисления
    • списке базовых классов в объявлении класса
    • списке инициализаторов членов в определении конструктора
    • списке параметров функции
    • списке параметров шаблона
    • списке аргументов шаблона
  • списке захвата лямбда-выражения
  • списке атрибутов
(начиная с C++11)
  • списке деклараторов в объявлении using
  • списке идентификаторов в объявлении структурированной привязки
(начиная с C++17)
  • списке аргументов в выражении индексирования с несколькими аргументами
(начиная с C++23)
  • списке параметров макроса в определении функционального макроса
  • списке аргументов макроса в вызове функционального макроса, если только запятая не находится между скобками аргумента
  • В объявлении static_assert разделяет аргументы.
(начиная с C++11)

Многосимвольные операторы и знаки пунктуации

[: и :] (начиная с C++26)

  • Ограничивают спецификатор splice.

^^ (начиная с C++26)

  • Оператор рефлексии.

...

  • В списке параметров декларатора функции или лямбда-выражения(начиная с C++11) или пользовательского руководства по выводу типа(начиная с C++17) обозначает функцию с переменным числом аргументов.
  • В обработчике обозначает обработчик любых исключений.
  • В определении макроса обозначает вариативный макрос.
  • Обозначает объявление и раскрытие пакета.
(начиная с C++11)
  • В выражении и спецификаторе индексации пакета.
(начиная с C++26)

::

  • Оператор разрешения области видимости в
    • квалифицированном имени
    • объявлении указателя на член
    • выражении new или delete, указывая, что поиск выполняется только для глобальных функций выделения или освобождения памяти
  • В атрибуте обозначает область атрибута.
(начиная с C++11)
  • Часть определения вложенного пространства имён.
(начиная с C++17)

.*

  • Оператор доступа через указатель на член.

->

  • Оператор доступа к члену; часть operator-> в перегрузке операторов.
  • В деклараторе функции или лямбда-выражении вводит завершающий тип возвращаемого значения.
(начиная с C++11)
  • В пользовательском руководстве по выводу типа вводит тип результата.
(начиная с C++17)
  • В составном требовании вводит требование к типу возвращаемого значения.
(начиная с C++20)

->*

  • Оператор доступа через указатель на член; часть operator->* в перегрузке операторов.

+=

  • Составной оператор присваивания; часть operator+= в перегрузке операторов.

-=

  • Составной оператор присваивания; часть operator-= в перегрузке операторов.

*=

  • Составной оператор присваивания; часть operator*= в перегрузке операторов.

/=

  • Составной оператор присваивания; часть operator/= в перегрузке операторов.

%=

  • Составной оператор присваивания; часть operator%= в перегрузке операторов.

^=

Альтернативное написание — xor_eq.

  • Составной оператор присваивания; часть operator^= в перегрузке операторов.

&=

Альтернативное написание — and_eq.

  • Составной оператор присваивания; часть operator&= в перегрузке операторов.

|=

Альтернативное написание — or_eq.

  • Составной оператор присваивания; часть operator|= в перегрузке операторов.

==

  • Оператор равенства; часть operator== в перегрузке операторов.

!=

Альтернативное написание — not_eq.

  • Оператор неравенства; часть operator!= в перегрузке операторов.

<=

  • Оператор «меньше или равно»; часть operator<= в перегрузке операторов.

>=

  • Оператор «больше или равно»; часть operator>= в перегрузке операторов.

<=>

  • Оператор трёхстороннего сравнения (spaceship); часть operator<=> в перегрузке операторов.
(начиная с C++20)

&&

Альтернативное написание — and.

  • Логический оператор И; часть operator&& в перегрузке операторов.
  • Оператор rvalue-ссылки в деклараторе или type-id.
  • Квалификатор ссылочного типа в объявлении функции-члена.
(начиная с C++11)

||

Альтернативное написание — or.

  • Логический оператор ИЛИ; часть operator|| в перегрузке операторов.

<<

  • Оператор побитового сдвига; часть operator<< при перегрузке операторов (побитовый оператор или оператор вставки в поток).

>>

  • Оператор побитового сдвига; часть operator>> при перегрузке операторов (побитовый оператор или оператор извлечения из потока).

<<=

  • Составной оператор присваивания; часть operator<<= в перегрузке операторов.

>>=

  • Составной оператор присваивания; часть operator>>= в перегрузке операторов.

++

  • Оператор инкремента; часть operator++ в перегрузке операторов.

--

  • Оператор декремента; часть operator-- в перегрузке операторов.

Ссылки

  • Стандарт C++23 (ISO/IEC 14882:2024):
    • 5.12 Операторы и знаки пунктуации [lex.operators]
  • Стандарт C++20 (ISO/IEC 14882:2020):
    • 5.12 Операторы и знаки пунктуации [lex.operators]
  • Стандарт C++17 (ISO/IEC 14882:2017):
    • 5.12 Операторы и знаки пунктуации [lex.operators]
  • Стандарт C++14 (ISO/IEC 14882:2014):
    • 2.13 Операторы и знаки пунктуации [lex.operators]
  • Стандарт C++11 (ISO/IEC 14882:2011):
    • 2.13 Операторы и знаки пунктуации [lex.operators]
  • Стандарт C++03 (ISO/IEC 14882:2003):
    • 2.12 Операторы и знаки пунктуации [lex.operators]
  • Стандарт C++98 (ISO/IEC 14882:1998):
    • 2.12 Операторы и знаки пунктуации [lex.operators]

См. также

Альтернативные представления альтернативные написания некоторых операторов
Документация по C о знаках пунктуации

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

Spec-Zone.ru

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