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
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, 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).
Example
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
See Also
const_cast, declaration,
mutable, type,
volatile, Chapter 2
|