Taka Muraoka wrote: const prevents the method from changing the value of any data members Not quite. const is a contract, a promise, to not change the logical state of an object, when applied to a member function. Imagine a class that has a backing store (e.g. a database) for the data it can present to the user. Any GetFoo() should probably be a const member function. Later on you realize "Hey, this stuff is waaay to slow. I need a cache!". You implement such a cache. But, that would change the objects state, right? No. This is where the mutable keyword come in play. A const member function may modify mutable qualified data - even that the "contract" you have with the clients of that code promises that it may not change the objects logical/observable state. This is just scraping the top of the iceberg. Const correctness is an artform in itself, and depending on scope it can mean a whole lot of things. For further information, I think Marshall Cline's C++ FAQ Lite could be a good starting point.