Possible Duplicate:
What is the meaning of a const at end of a member function?
I have seen some classes that have something like this.
void something() const;
What does const
means?
Possible Duplicate:
What is the meaning of a const at end of a member function?
I have seen some classes that have something like this.
void something() const;
What does const
means?
In addition to what SRM said (that the function cannot alter any members of the class (which is not exactly true, e.g. in the case of mutable
members, which still can be altered)), it means that you can call this member function on things that are const
. So if you get a Foo const& foo
as a parameter, you can only call members that are declared const
like in your question.
It means that something
may not modify member variables of the class.
The exception to the rule is if there are member variables declared with the mutable
keyword.
For example, suppose you have a std::map< int, int > var
member variable and a method that does the following:
int Class::method () const {
if (var.find (42) != var.end ()) {
return var[42];
}
return 0;
}
That will not compile since var[42]
modifies var
if 42 is not in the container. Declaring var
as mutable
allows you to pass compilation.
It means the function will not modify any member variables. To be more precise, it means the function cannot alter any non-static or immutable member variables of that class
To be absolutely precise - it makes the implicit this
pointer in the function a pointer to a const
object.
From 9.2.1 "The this pointer""
The type of
this
in a member function of aclass X
isX*
. If the member function is declaredconst
, the type of this isconst X*
, if the member function is declaredvolatile
, the type of this isvolatile X*
, and if the member function is declaredconst volatile
, the type of this isconst volatile X*
.
All the other behaviors (that you can't modify the object members, that you can call the function using a const
object, etc) fall from that.
it declares that this function can not change any data. Makes it a Read Only Function.