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.object A const function can be applied to a non-const
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?]
Wednesday, August 19, 2009
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment