const нужен, чтобы можно было передать временный объект (r-value).
Код:
struct Foo {};
Foo f1 = Foo(); // ok
Foo& f2 = Foo(); // error: invalid initialization of non-const reference of type ‘Foo&’ from an rvalue of type ‘Foo’
const Foo& f3 = Foo(); // ok
Foo&& f4 = Foo(); // ok C++11
const Foo&& f5 = Foo(); // ok C++11