const qualifier — Marks objects and functions as constant
cv-qualifier ::= const | volatile cv-qualifier-seq ::= const | volatile | const volatile | volatile const
The const
keyword can be used
as a qualifier when declaring objects, types, or member functions.
When qualifying an object, using const
means that the object cannot be the
target of an assignment, and you cannot call any of its non-const
member functions. When qualifying
the target of a pointer, it means the destination cannot be modified.
When member functions of a const
object are called, this
is a
const
pointer. When qualifying a
member function, using the const
qualifier means that within the member function, this
is a const
pointer to const
, and the member function can be called
for const
objects. (Member
functions without the const
modifier cannot be called for a const
object.)
When declaring pointers and references, be sure to distinguish
between a const
pointer (for which
the pointer cannot be assigned, but what it points to can be modified)
and a pointer to const
(for which
the pointer can be assigned, but what it points to cannot be
modified).
struct rect { rect(int x, int y) : x_(x), y_(y) {} void x(int x) { x_ = x; } void y(int y) { y_ = y; } int x( )const
{ return x_; } int y( )const
{ return y_; } int area( )const
; private: int x_, y_; }; int rect::area()const
{ return x() * y( ); }const
rect zero(0, 0);const
rect unit(1, 1); rect p(4, 2), q(2, 4);const
rect* ptr1 = &zero; // OK: pointer to const ptr1->x(42); // Error: *ptr is const ptr1 = &p; // Error: p is not const ptr1 = &unit; // OK: unit is const rect*const
ptr2 = &p; // OK: const pointer ptr2 = &q; // Error: cannot set ptr2 ptr2->x(42); // OK: *ptr2 is not const