Пунктуаторы
Материал из cppreference.com
{ }
- В определении класса/структуры или обьединения, определяет границы спецификации элементов.
- В определении enum отделяет список перечислителей.
- Разделяет составные операторы. Составной оператор может быть частью
- определения функции
- блока try или предложения catch
- блока try функции
- лямбда-выражения (начиная с C++11)
- В инициализации разграничивают инициализаторы. Этот вид инициализации называется список-инициализации. (начиная с C++11)
- В определении пространства имён разграничивают тело пространства имён.
- В спецификации языкового связывания разграничивают объявления.
- В выражениях requires разграничивают требования. (начиная с C++20)
- В составном требовании, ограничивают выражение. (начиная с C++20)
- В объявлении export разделяют объявления. (начиная с C++20)
[ ]
- Оператор индексации; часть
operator[]в перегрузке оператора. - Часть декларатора массива в декларации или идентификаторе типа (например, в выражении new)
- Часть оператора
new[]в перегрузке оператора (функция распределения). - Часть оператора
delete[]в выражении delete и перегрузке операторов (функция освобождения). - В лямбда-выражение, ограничивает захват. (начиная с C++11)
- В спецификаторе атрибута, разграничивают атрибуты. (начиная с C++11)
- В объявлении структурной привязки, ограничивает список идентификаторов. (начиная с C++17)
#
- Вводит директиву предварительной обработки.
- Оператор предварительной обработки для строкового преобразования.
##
( )
- В выражении обозначают группировку.
- Оператор вызова функции; часть
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(включаяconstexprif) (начиная с C++17),switch,while,do-whileилиfor(включая основанный на диапазонеfor) (начиная с C++11), отделяет управляющее предложение. - В предложении catch отделяет объявление параметра.
- В определении макросов, подобных функциям, отделяет параметры макроса.
- В вызове макросов, подобных функциям, разделяет аргументы макроса или предотвращает интерпретацию запятых как разделителей аргументов.
- Часть оператора предварительной обработки
defined,__has_include(начиная с C++17),__has_cpp_attribute(начиная с C++20). - В объявлении
static_assertотделяет операнды. (начиная с C++11) - В спецификаторе
decltype, спецификатореnoexcept, спецификатореalignas, условном спецификатореexplicit(начиная с C++20), отделяет операнд. (начиная с C++11) - В attribute отделяет аргументы атрибута. (начиная с C++11)
- Часть спецификатора
decltype(auto). (начиная с C++14) - Отделяет выражение свёртки. (начиная с C++17)
- Часть замены __VA_OPT__ в определении вариативного макроса. (начиная с C++20)
;
- Указывает конец
- оператора (включая оператор инициализации оператора for)
- объявления или объявления элемента
- объявления модуля, объявления импорта, введения глобального фрагмента модуля или введения частного фрагмента модуля (начиная с C++20)
- требования (начиная с C++20)
- Отделяет второе и третье предложения оператора for.
:
- Часть условного оператора.
- Часть объявления метки.
- В заголовке определения класса, вводит предложение базового класса.
- Часть спецификатора доступа в спецификации элемента.
- В объявлении элемента битового поля, указывает ширину.
- В определении конструктора вводит список инициализаторов элементов.
- В операторе основанного на диапазоне for, разделяет объявление диапазона и инициализатор диапазона. (начиная с C++11)
- Вводит базу перечисления, указывающую базовый тип перечисления. (начиная с C++11)
- В спецификаторе атрибута, разделяет using префикс атрибута и список атрибутов. (начиная с C++17)
- В объявлении модуля или в объявлении раздела импорта модуля вводит имя раздела модуля. (начиная с C++20)
- Часть введения частного фрагмента модуля (
module :private;). (начиная с C++20)
...
- В списке параметров декларатора функции или лямбда-выражения (начиная с C++11) или определяемого пользователем руководства по выводу (начиная с C++17), обозначают вариативную функцию.
- В предложении catch, указывает универсальный обработчик.
- В определении макроса, обозначают вариативный макрос. (начиная с C++11)
- Указывает объявления и расширения пакета. (начиная с C++11)
?
- Часть условного оператора.
::
- Оператор разрешения области видимости в
- полном имени
- объявлении указателя на элемент
- выражении new или delete, чтобы указать, что ищутся только глобальные функции выделения или освобождения
- В атрибуте, указывает область действия атрибута. (начиная с C++11)
- Часть определения вложенного пространства имён. (начиная с C++17)
.
- Оператор доступа к элементам.
- В агрегатной инициализации, вводит обозначение. (начиная с C++20)
- Часть имени модуля или имени раздела модуля. (начиная с C++20)
.*
->
- Оператор доступа к элементам; часть
operator->в перегрузке оператора. - В деклараторе функции или лямбда-выражении вводит замыкающий возвращаемый тип. (начиная с C++11)
- В определяемом пользователем руководстве по выводу вводит тип результата. (начиная с C++17)
- В составном требовании вводит требование типа возвращаемого значения. (начиная с C++20)
->*
- Оператор доступа к элементу по указателю; часть
operator->*в перегрузке операторов.
~
- Оператор унарного дополнения (также известный как оператор побитового не); часть
operator~в перегрузке оператора. - Часть выражения-идентификатора для имени деструктора или псевдо-деструктора.
!
- Логический оператор не; часть
operator!в перегрузке оператора. - Часть обратного варианта оператора consteval
if. (начиная с C++23)
+
- Унарный оператор плюс; часть
operator+в перегрузке оператора. - Бинарный оператор плюс; часть
operator+в перегрузке оператора.
-
- Унарный оператор минус; часть
operator-в перегрузке оператора. - Бинарный оператор минус; часть
operator-в перегрузке оператора.
*
- Оператор косвенности; часть
operator*в перегрузке оператора. - Оператор умножения; часть
operator*в перегрузке оператора. - Оператор указателя или часть оператора указателя на элемент в деклараторе или в идентификаторе-типа.
- Часть
*thisв списке лямбда-захвата, для захвата текущего объекта путём копирования. (начиная с C++17)
/
- Оператор деления; часть
operator/в перегрузке оператора.
%
- Оператор деления по модулю; часть
operator%в перегрузке оператора.
^
- Побитовый оператор xor; часть
operator^в перегрузке оператора.
&
- Оператор взятия адреса; часть
operator&в перегрузке оператора. - Побитовый оператор и; часть
operator&в перегрузке оператора. - Оператор ссылки на lvalue в деклараторе или в идентификаторе-типа.
- В лямбда-захвате, указывает захват по ссылке. (начиная с C++11)
- Квалификатор ссылки в объявлении функции-элемента. (начиная с C++11)
|
- Побитовый оператор или; часть
operator|в перегрузке оператора.
=
- Простой оператор присваивания; часть
operator=в перегрузке оператора, который может быть специальной функцией-элементом (оператор присваивания копированием или оператор присваивания перемещением (начиная с C++11)). - В инициализации, указывает инициализацию копированием или инициализацию копированием списка (начиная с C++11).
- В объявлении функции, вводит аргумент по умолчанию.
- В списке параметров шаблона, вводит аргумент шаблона по умолчанию.
- В определении псевдонима пространства имён, разделяет псевдоним и псевдоним пространства имён.
- В определении перечисления, вводит значение перечислителя.
- Часть чистого спецификатора в в объявлении чистой виртуальной функции.
- Захват по умолчанию в лямбда-захвате, указывающий захват путём копирования. (начиная с C++11)
- Часть определения по умолчанию (
=default;) или удаляемого определения (=delete;) в определении функции. (начиная с C++11) - В объявлении псевдонима типа, разделяет псевдоним и псевдоним типа. (начиная с C++11)
- В определении концепта, разделяет имя концепта и выражение ограничения. (начиная с C++20)
+=
- Составной оператор присваивания; часть
operator+=в перегрузке оператора.
-=
- Составной оператор присваивания; часть
operator-=в перегрузке оператора.
*=
- Составной оператор присваивания; часть
operator*=в перегрузке оператора.
/=
- Составной оператор присваивания; часть
operator/=в перегрузке оператора.
%=
- Составной оператор присваивания; часть
operator%=в перегрузке оператора.
^=
- Составной оператор присваивания; часть
operator^=в перегрузке оператора.
&=
- Составной оператор присваивания; часть
operator&=в перегрузке оператора.
|=
- Составной оператор присваивания; часть
operator|=в перегрузке оператора.
==
- Оператор равенства; часть
operator==в перегрузке оператора.
!=
- Оператор неравенства; часть
operator!=в перегрузке оператора.
<
- Оператор меньше; часть
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<=в перегрузке оператора.
>=
- Оператор больше или равно; часть
operator>=в перегрузке оператора.
<=> (начиная с C++20)
- Трёхсторонний оператор сравнения (космический корабль); часть
operator<=>в перегрузке оператора.
&&
- Логический оператор и; часть
operator&&в перегрузке оператора. - Оператор правосторонняя ссылка в деклараторе или в идентификаторе типа. (начиная с C++11)
- Квалификатор ссылка в объявлении функции-элемента. (начиная с C++11)
||
- Логический оператор или; часть
operator||в перегрузке оператора.
<<
- Оператор побитового сдвига; часть
operator<<при перегрузке оператора (побитовый оператор или оператор вставки в поток).
>>
- Операторы побитового сдвига; часть
operator>>при перегрузке оператора (побитовый оператор или оператор извлечения из потока). - Может быть повторно обработано как два
>вstatic_cast,const_cast,reinterpret_castилиdynamic_cast, списке аргументов шаблона или списке параметров шаблона. (начиная с C++11)
<<=
- Составной оператор присваивания; часть
operator<<=в перегрузке оператора.
>>=
- Составной оператор присваивания; часть
operator>>=в перегрузке оператора.
++
- Оператор инкремента; часть
operator++в перегрузке оператора.
--
- Оператор декремента; часть
operator--в перегрузке оператора.
,
- Оператор запятая; часть
operator,в перегрузке оператора. - Разделитель списка в
- списке деклараторов в объявлении
- списке инициализаторов в инициализации
- списке аргументов размещения в размещающем new
- списке аргументов в выражении вызова функции
- списке аргументов в выражении индексации с несколькими аргументами (начиная с C++23)
- списке перечислителей в объявлении enum
- списке базовых классов в объявлении class
- списке инициализаторов элементов в определении конструктора
- списке параметров функции
- списке параметров шаблона
- списке аргументов шаблона
- списке параметров макроса в функциональном определении макроса
- списке аргументов макроса в вызове макросов, подобных функциям, если они не находятся между внутренним набором круглых скобок
- списке лямбда-захватов (начиная с C++11)
- списке атрибутов (начиная с C++11)
- списке деклараторов в using-объявлении (начиная с C++17)
- списке идентификаторов в объявлении структурной привязки (начиная с C++17)
- В объявлении
static_assertразделяет аргументы. (начиная с C++11)
Рекомендации
- C++23 стандарт (ISO/IEC 14882:2023):
- 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 по Пунктуация
| |