The advantage of declaring it const is that you can't "accidentally" modify it in an obscure way which code inspection might miss. For example by passing it by reference into a function which modifies its parameter.
The arguable disadvantage is that you can't (easily) pass it into code which takes non-const reference that it doesn't actually modify. If you really believe in C++, this is actually an advantage in disguise, because it encourages you to make the rest of your code const-correct. But if you have to make quick changes (e.g. when debugging), or if you've already published the API and can't change it, then it looks to you like a darn good disguise.
If functions are short, then you don't really need "const" to tell you whether or not a local variable is going to be explicitly modified by assignment. You can see all the uses of the variable right there, in front of you. But in real life, where functions sometimes get long; and where people use non-const reference parameters and sometimes even macros; and where you want to read and understand code as quickly as possible; then it can help a bit.
I tend to use it when I remember, and not sweat it if I forget. I get most use out of it when I need to remove const from a variable. That tells me that my original conception of that variable was wrong, and I need to carefully check that no expression using it actually relies on it not changing. Given that C++ has the const keyword, if you're going to write code that relies on a variable not changing, you may as well get the compiler on your side.
It's usually not worth worrying about compiler optimisations. A good compiler (gcc) can tell that if you don't modify a variable, and don't take any references to it, then it can apply appropriate optimisations whether you mark it const or not.