Here are some great articles and a book I found explaining the advantages of using const: 
Can I propose the following maxim to you? 
If an object/variable can be qualified has being constant, it should be. At worst, it will not cost anything. At best, you will be documenting the role of the object/variable in your code and it will allow the compiler the opportunity to optimize your code even more.
Some compilers neglect to exploit the potential of optimization with the use of 'const' and that has lead many experts to neglect the use of constant parameters by value when it could be used. This practice takes more strictness, but it will not be harmful. At worst, you do not lose anything , but you do not gain anything too and at best, you win from using this approach.
For those who do not seem to understand the utility of a const in a by value parameter of a function/method... here is a short example that explains why:
.cpp
void WriteSequence(int const *, const int);
int main()
{
    int Array[] = { 2, 3, 4, 10, 12 };
    WriteSequence(Array, 5);
}
#include <iostream>
using std::cout;
using std::endl;
void WriteSequence(int const *Array, const int MAX)
{
    for (int const * i = Array; i != Array + MAX; ++i)
      cout << *i << endl;
}
What would had happen if I would had removed the const in front of int MAX and I had written MAX + 1 inside like this?
void WriteSequence(int Array[], int MAX)
{
    MAX += MAX;
    for (int * i = Array; i != Array + MAX; ++i)
      cout << *i << endl;
}
Well your program would crash! Now, why would someone write "MAX += MAX;" ? Perhaps human error, maybe the programmer was not feeling well that day or perhaps the programmer simply did not know how to write C/C++ code. If you would have had const, the code would have not even compiled!
Safe code is good code and it does not cost anything to add "const" when you have it!
Here is an answer from a different post for a very similar question:
"const is pointless when the argument
  is passed by value since you will not
  be modifying the caller's object."
Wrong.
It's about self-documenting your code
  and your assumptions.
If your code has many people working
  on it and your functions are
  non-trivial then you should mark
  "const" any and everything that you
  can. When writing industrial-strength
  code, you should always assume that
  your coworkers are psychopaths trying
  to get you any way they can
  (especially since it's often yourself
  in the future).
Besides, as somebody mentioned
  earlier, it might help the compiler
  optimize things a bit (though it's a
  long shot).
Here is the link: answer.