Assignment operators

From Cppreference

Jump to: navigation, search

Assignment operators modify the value of the object.

Operator name Syntax Over​load​able Prototype examples (for class T)
Inside class definition Outside class definition
basic assignment a = b Yes T& T::operator =(const T2 &b); N/A
move assignment (C++11) a = rvalue Yes T& T::operator =(const T2 &&b); N/A
addition assignment a += b Yes T& T::operator +=(const T2 &b); T& operator +=(T &a, const T2 &b);
subtraction assignment a -= b Yes T& T::operator -=(const T2 &b); T& operator -=(T &a, const T2 &b);
multiplication assignment a *= b Yes T& T::operator *=(const T2 &b); T& operator *=(T &a, const T2 &b);
division assignment a /= b Yes T& T::operator /=(const T2 &b); T& operator /=(T &a, const T2 &b);
modulo assignment a %= b Yes T& T::operator %=(const T2 &b); T& operator %=(T &a, const T2 &b);
bitwise AND assignment a &= b Yes T& T::operator &=(const T2 &b); T& operator &=(T &a, const T2 &b);
bitwise OR assignment a |= b Yes T& T::operator |=(const T2 &b); T& operator |=(T &a, const T2 &b);
bitwise XOR assignment a ^= b Yes T& T::operator ^=(const T2 &b); T& operator ^=(T &a, const T2 &b);
bitwise left shift assignment a <<= b Yes T& T::operator <<=(const T2 &b); T& operator <<=(T &a, const T2 &b);
bitwise right shift assignment a >>= b Yes T& T::operator >>=(const T2 &b); T& operator >>=(T &a, const T2 &b);
Notes
  • All operators usually return *this. However, essentially any value and any type can be returned (including void,
    i.e. no return value), yet this is unintuitive and defeats the purpose of the operators.
  • T2 can be any type including T

[edit] Explanation

basic assignment operator replaces the contents of the object a with those of b

move assignment operator replaces the contents of the object a with those of b while minimizing copying overhead (no deep copy is performed). It complements the basic assignment operator. (C++11 feature)

Other assignment operators modify the contents of the object. Usually they are overloaded in classes performing mathematical operations.

[edit] See also

Operator precedence

Common operators
assignment increment
decrement
arithmetic logical comparison member
access
other
a = b

a = rvalue
a += b
a -= b
a *= b
a /= b
a %= b
a &= b
a |= b
a ^= b
a <<= b
a >>= b

++a

--a
a++
a--

+a

-a
a + b
a - b
a * b
a / b
a % b
~a
a & b
a | b
a ^ b
a << b
a >> b

!a

a && b
a || b

a == b

a != b
a < b
a > b
a <= b
a >= b

a[b]

*a
&a
a->b
a.b
a->*b
a.*b

a(...)

a, b
(type) a
? :

Special operators

static_cast converts one type to another compatible type
dynamic_cast converts virtual base class to derived class
const_cast converts type to compatible type with different cv qualifiers
reinterpret_cast converts type to incompatible type
new allocates memory
delete deallocates memory
sizeof queries the size of a type
sizeof... queries the size of a parameter pack (C++11 feature)
typeid queries the type information of a type
noexcept checks if an expression can throw an exception (C++11 feature)
alignof queries alignment requirements of a type (C++11 feature)