Punctuation - cppreference.com (original) (raw)
These are the punctuation symbols in C++. The meaning of each symbol is detailed in the linked pages.
Contents
- 1 Preprocessing operators
- 2 Single-character operators and punctuators
- 3 Multi-character operators and punctuators
- 3.1 ...
- 3.2 ::
- 3.3 .*
- 3.4 ->
- 3.5 ->*
- 3.6 +=
- 3.7 -=
- 3.8 *=
- 3.9 /=
- 3.10 %=
- 3.11 ^= (including xor_eq)
- 3.12 &= (including and_eq)
- 3.13 |= (including or_eq)
- 3.14 ==
- 3.15 != (including not_eq)
- 3.16 <=
- 3.17 >=
- 3.18 <=>
- 3.19 && (including and)
- 3.20 || (including or)
- 3.21 <<
- 3.22 >>
- 3.23 <<=
- 3.24 >>=
- 3.25 ++
- 3.26 --
- 4 References
- 5 See also
[edit] Preprocessing operators
Preprocessing operators are recognized by preprocessors.
[edit] # (including %:)
- Introduce a preprocessing directive.
- The preprocessing operator for stringification.
[edit] ##(including %:%:)
[edit] Single-character operators and punctuators
[edit] { and } (including <% and %>)
In a class definition, delimit the member specification.
In an enumeration definition, delimit the enumerator list.
Delimit a compound statement. The compound statement may be part of
Part of the aggregate initialization(until C++11)list-initialization(since C++11) syntax of an initializer.
In a namespace definition, delimit the namespace body.
In a language linkage specification, delimit the declarations.
| In a requires expression, delimit the requirements. In a compound requirement, delimit the expression. In an export declaration, delimit the declarations. | (since C++20) |
|---|
[edit] [ and ] (including <: and :>)
- Subscript operator; part of operator[] in operator overloading.
- Part of array declarator in a declaration or a type-id (e.g. in a new expression).
- Part of new[] operator in operator overloading (allocation function).
- Part of delete[] operator in delete expression and operator overloading (deallocation function).
[edit] ( and )
In an expression, indicate grouping.
Function call operator; part of operator() in operator overloading.
In a function-style type cast, delimit the expression/initializers.
In a static_cast, const_cast, reinterpret_cast, or dynamic_cast, delimit the expression.
Delimit the operand of the following operators:
In a placement new expression, delimit the placement arguments.
In a new expression, optionally delimit the type-id.
In a new expression, delimit the initializers.
In a C-style cast, delimit the type-id.
In a declaration or a type-id, indicate grouping.
Delimit the parameter list in
a function declarator (in a declaration or a type-id)
Part of the direct-initialization syntax of an initializer.
In an asm declaration, delimit the string literal.
In a member initializer list, delimit the initializers to a base or member.
Delimit the controlling clause of a selection statement or iteration statement, including:
if (except consteval if)(since C++23)
In a handler, delimit the parameter declaration.
In a function-like macro definition, delimit the macro parameters.
In a function-like macro invocation, delimit the macro arguments or prevent commas from being interpreted as argument separators.
Part of a
defined,__has_include(since C++17),__has_cpp_attribute(since C++20) preprocessing operator.
[edit] ;
Indicate the end of
| a module declaration, import declaration, global module fragment introducer, or private module fragment introducer a requirement | (since C++20) |
|---|
- Separate the condition and statement of a for statement.
[edit] :
- Part of conditional operator.
- Part of label declaration.
- In the base-clause of a class definition, introduce the base class.
- Part of access specifier in member specification.
- In a bit-field member declaration, introduce the width.
- In a constructor definition, introduce the member initializer list.
| In a range-based for statement, separate the item-declaration and the range-initializer. In the enum-base of an enumeration declaration, introduce the underlying type. | (since C++11) |
|---|---|
| In an attribute specifier, separate the attribute-namespace and the attribute-list. | (since C++17) |
| In a module declaration or import declaration of module partition, introduce the module partition name. Part of a private module fragment introducer (module :private;). | (since C++20) |
[edit] ?
- Part of conditional operator.
[edit] .
[edit] ~ (including compl)
- Unary complement operator (a.k.a. bitwise not operator); part of operator~ in operator overloading.
- Part of an identifier expression to name a destructor or pseudo-destructor.
[edit] ! (including not)
- Logical not operator; part of operator! in operator overloading.
[edit] +
- Unary plus operator; part of operator+ in operator overloading.
- Binary plus operator; part of operator+ in operator overloading.
[edit] -
- Unary minus operator; part of operator- in operator overloading.
- Binary minus operator; part of operator- in operator overloading.
[edit] *
- Indirection operator; part of operator* in operator overloading.
- Multiplication operator; part of operator* in operator overloading.
- Pointer operator or part of pointer-to-member operator in a declarator or in a type-id.
| Part of *this in a lambda capture list, to capture the current object by copy. | (since C++17) |
|---|
[edit] /
- Division operator; part of operator/ in operator overloading.
[edit] %
- Modulo operator; part of operator% in operator overloading.
[edit] ^ (including xor)
- Bitwise xor operator; part of operator^ in operator overloading.
[edit] & (including bitand)
- Address-of operator; part of operator& in operator overloading.
- Bitwise and operator; part of operator& in operator overloading.
- Lvalue-reference operator in a declarator or in a type-id.
[edit] | (including bitor)
- Bitwise or operator; part of operator| in operator overloading.
[edit] =
- Simple assignment operator; part of operator= in operator overloading, which might be a special member function (copy assignment operatoror move assignment operator(since C++11)).
- Part of the copy-initialization and aggregate initialization(until C++11)copy-list-initialization(since C++11) syntax of an initializer.
- In a function declaration, introduce a default argument.
- In a template parameter list, introduce a default template argument.
- In a namespace alias definition, separate the alias and the aliased namespace.
- In an enum definition, introduce the value of enumerator.
- Part of pure-specifier in a pure virtual function declaration.
| Capture default in lambda capture, to indicate by-copy capture. Part of defaulted definition (=default;) or deleted definition (=delete;) in function definition. In a type alias declaration, separate the alias and the aliased type. | (since C++11) |
|---|---|
| In a concept definition, separate the concept name and the constraint expression. | (since C++20) |
[edit] <
Less-than operator; part of operator< in operator overloading.
In a static_cast, const_cast, reinterpret_cast, or dynamic_cast, introduce the type-id.
Introduce a template argument list.
Introduce a template parameter list in
Part of template<> in template specialization declaration.
Introduce a header name in
[edit] >
Greater-than operator; part of operator> in operator overloading.
static_cast, const_cast, reinterpret_cast, or dynamic_cast, indicate the end of type-id.
Indicate the end of a template argument list.
Indicate the end of a template parameter list in
Part of template<> in template specialization declaration.
Indicate the end of a header name in
[edit] ,
Comma operator; part of operator, in operator overloading.
List separator in
the declarator list in a declaration
initializer list in initialization
the placement argument list in a placement new
the argument list in a function call expression
the enumerator list in an enum declaration
the base class list in a class declaration
the member initializer list in a constructor definition
the macro parameter list in a function-like macro definition
the macro argument list in a function-like macro invocation, unless found between the parentheses of an argument
| In a static_assert declaration, separate the arguments. | (since C++11) |
|---|
[edit] Multi-character operators and punctuators
[edit] ...
- In the parameter list of a function declaratoror lambda expression(since C++11)or user-defined deduction guide(since C++17), signify a variadic function.
- In a handler, signify catch-all handler.
[edit] ::
Scope resolution operator in
a new or delete expression, to indicate that only global allocation or deallocation functions are looked up
[edit] .*
[edit] ->
- Member access operator; part of operator-> in operator overloading.
[edit] ->*
- Pointer-to-member access operator; part of operator->* in operator overloading.
[edit] +=
- Compound assignment operator; part of operator+= in operator overloading.
[edit] -=
- Compound assignment operator; part of operator-= in operator overloading.
[edit] *=
- Compound assignment operator; part of operator*= in operator overloading.
[edit] /=
- Compound assignment operator; part of operator/= in operator overloading.
[edit] %=
- Compound assignment operator; part of operator%= in operator overloading.
[edit] ^= (including xor_eq)
- Compound assignment operator; part of operator^= in operator overloading.
[edit] &= (including and_eq)
- Compound assignment operator; part of operator&= in operator overloading.
[edit] |= (including or_eq)
- Compound assignment operator; part of operator|= in operator overloading.
[edit] ==
- Equality operator; part of operator== in operator overloading.
[edit] != (including not_eq)
- Inequality operator; part of operator!= in operator overloading.
[edit] <=
- Less-than-or-equal-to operator; part of operator<= in operator overloading.
[edit] >=
- Greater-than-or-equal-to operator; part of operator>= in operator overloading.
[edit] && (including and)
- Logical and operator; part of operator&& in operator overloading.
[edit] || (including or)
- Logical or operator; part of operator|| in operator overloading.
[edit] <<
- Bitwise shift operator; part of operator<< in operator overloading (bitwise operator or stream insertion operator).
[edit] >>
- Bitwise shift operator; part of operator>> in operator overloading (bitwise operator or stream extraction operator).
[edit] <<=
- Compound assignment operator; part of operator<<= in operator overloading.
[edit] >>=
- Compound assignment operator; part of operator>>= in operator overloading.
[edit] ++
- Increment operator; part of operator++ in operator overloading.
[edit] --
- Decrement operator; part of operator-- in operator overloading.
[edit] References
C++23 standard (ISO/IEC 14882:2024):
5.12 Operators and punctuators [lex.operators]
C++20 standard (ISO/IEC 14882:2020):
5.12 Operators and punctuators [lex.operators]
C++17 standard (ISO/IEC 14882:2017):
5.12 Operators and punctuators [lex.operators]
C++14 standard (ISO/IEC 14882:2014):
2.13 Operators and punctuators [lex.operators]
C++11 standard (ISO/IEC 14882:2011):
2.13 Operators and punctuators [lex.operators]
C++03 standard (ISO/IEC 14882:2003):
2.12 Operators and punctuators [lex.operators]
C++98 standard (ISO/IEC 14882:1998):
2.12 Operators and punctuators [lex.operators]