C++: OOP: const member functions

const member functions can use const objects

Member functions should be declared with the const keyword after them if they can operate on a const (this) object. If the function is not declared const, in can not be applied to a const object, and the compiler will give an error message. A const function can be applied to a non-const object

A function can only be declared const if it doesn't modify any of its fields.

More efficient code

I remember something about compilers being able to generate more efficient code for const member functions.

Syntax

The const keyword is placed after the function header and before the left brace in both the prototype and the definition.

Example

In this example from a header file for a vector-like class, the capacity and empty functions don't change the object, and therefore are declared const. clear may change the object and therefore can not be declared const.
int  capacity() const;  // max size before reallocation
void clear();           // delete all items
bool empty() const;     // true if contains no elements (size()==0)

const can't be used for constructors and destructors

The purpose of a constructor is to initialize field values, so it must change the object. Similarly for destructors.

Can overload with non-const functions

There can be both const and non-const functions. The compiler will choose the appropriate one to call depending on the object they are being applied to. [Note: this seems like more of a theoretical possibility rather than something that would ever be used. Is there a common use for defining more than the const version?]