=== Const Correctness === What is const correctness? It's a programming paradigm that helps writing correct code. In C++, const correctness comprises a set of different techniques, you can read up about them here [1]. In this article however I only want to focus on one form of const correctness, that is object constness. Why should I care about const correctness? Because it increases type safety, makes your code more easy to understand, and it helps making your code correct. Let's have an example, the following function: void printStruct( MyStruct* str ); Is it save to assume that MyStruct is unchanged? Can I give it a structure that is allocated in a read-only memory location? We can assume this (because of the name of the function) but we can't be sure. It get's even worse if you use a reference like this: void printStruct( MyStruct& str ); Now you can't even see in the calling code that something might go wrong since a line like this: printStruct( str ); is not seen as dangerous. In C it is always a call-by-value. In C++ it isn't. The solution is easy. Just declare the function like this: void printStruct( const MyStruct& str ); Now nothing can go wrong. We get the benefit of a call-by-reference without the danger. Now one last problem. What if MyStruct is a class like this: class MyStruct { void print(); } How would the compiler know that calling "print" on the const MyStruct does not change the object? The compiler can't. We have to tell it like this: void print() const; Now everything is all right. Everybody is on the same page and we don't have to look an hour which function might have changed our variables in some unexpected place. A last word about payoff. Regardless if we are just programming for fun or professionally we should think about payoff. Writing "const" all over the place is confusing, costs time and leads to compile time errors. So why the effort? This does not really prevent many bugs. At least in my experience. However it has one big benefit: It really helps searching bugs. Const- correctness is really a nice thing since we are using more time searching bugs than actually programming. [1] http://www.parashift.com/c++-faq-lite/const-correctness.html