C++ Programming/Operators Table
Table of operators
Operators in the same group have the same precedence and the order of evaluation is decided by the associativity (left-to-right or right-to-left). Operators in a preceding group have higher precedence than those in a subsequent group.
Note: Binding of operators actually cannot be completely described by "precedence" rules, and as such this table is an approximation. Correct understanding of the rules requires an understanding of the grammar of expressions.
Operators | Description | Example Usage | Associativity |
---|---|---|---|
Scope Resolution Operator | — | ||
:: | unary scope resolution operator for globals | ::NUM_ELEMENTS | |
:: | binary scope resolution operator for class and namespace members | std::cout | |
Function Call, Member Access, Post-Increment/Decrement Operators, RTTI and C++ Casts | Left to right | ||
() | function call operator | swap (x, y) | |
[] | array index operator | arr [i] | |
. | member access operator for an object of class/union type or a reference to it | obj.member | |
-> | member access operator for a pointer to an object of class/union type | ptr->member | |
++ -- | post-increment/decrement operators | num++ | |
typeid() | run time type identification operator for an object or type | typeid (std::cout) typeid (std::iostream) | |
static_cast <>()dynamic_cast <>()const_cast <>()reinterpret_cast <>() |
C++ style cast operators for compile-time type conversion See Type Casting for more info |
static_cast <float> (i)dynamic_cast <std::istream> (stream)const_cast <char*> ("Hello, World!")reinterpret_cast <const long*> ("C++") | |
type() | functional cast operator ( static_cast is preferredfor conversion to a primitive type) |
float (i) | |
also used as a constructor call for creating a temporary object, esp. of a class type | std::string ("Hello, world!", 0, 5) | ||
Unary Operators | Right to left | ||
!, not | logical not operator | !eof_reached | |
~, compl | bitwise not operator | ~mask | |
+ - | unary plus/minus operators | -num | |
++ -- | pre-increment/decrement operators | ++num | |
&, bitand | address-of operator | &data | |
* | indirection operator | *ptr | |
new new[] new() new()[] |
new operators for single objects or arrays |
new std::string (5, '*') new int [100] new (raw_mem) int new (arg1, arg2) int [100] | |
delete delete[] | delete operator for pointers to single objects or arrays | delete ptr delete[] arr | |
sizeof sizeof () | sizeof operator for expressions or types | sizeof 123 sizeof (int) | |
(type) | C-style cast operator (deprecated) | (float)i | |
Member Pointer Operators | Right to left | ||
.* | member pointer access operator for an object of class/union type or a reference to it | obj.*memptr | |
->* | member pointer access operator for a pointer to an object of class/union type | ptr->*memptr | |
Multiplicative Operators | Left to right | ||
* / % | multiplication, division and modulus operators | celsius_diff * 9 / 5 | |
Additive Operators | Left to right | ||
+ - | addition and subtraction operators | end - start + 1 | |
Bitwise Shift Operators | Left to right | ||
<< >> | left and right shift operators | bits << shift_len bits >> shift_len | |
Relational Inequality Operators | Left to right | ||
< > <= >= | less-than, greater-than, less-than or equal-to, greater-than or equal-to | i < num_elements | |
Relational Equality Operators | Left to right | ||
== !=, not_eq | equal-to, not-equal-to | choice != 'n' | |
Bitwise And Operator | Left to right | ||
&, bitand | bits & clear_mask_complement | ||
Bitwise Xor Operator | Left to right | ||
^, xor | bits ^ invert_mask | ||
Bitwise Or Operator | Left to right | ||
|, bitor | bits | set_mask | ||
Logical And Operator | Left to right | ||
&&, and | arr != 0 && arr->len != 0 | ||
Logical Or Operator | Left to right | ||
||, or | arr == 0 || arr->len == 0 | ||
Conditional Operator | Right to left | ||
?: | size >= 0 ? size : 0 | ||
Assignment Operators | Right to left | ||
= | assignment operator | i = 0 | |
+= -= *= /= %= &=, and_eq |=, or_eq ^=, xor_eq <<= >>= |
shorthand assignment operators (foo op= bar represents foo = foo op bar) | num /= 10 | |
Exceptions | — | ||
throw | throw "Array index out of bounds" | ||
Comma Operator | Left to right | ||
, | i = 0, j = i + 1, k = 0 |