The first one means "a constant string". The second one means "the function may used with constant this arguments (and therefore can't modify its members)".
I'm trying to experiment with returning a const value, and trying to throw a run-time error, but I can't seem to do so. I've tried returning "test", and then doing object.toString[1] = '1', but it ran just fine.
Yes, it should be const as long as operator<< does not modify Object (which it shouldn't; I say that on the general principle that output of some data shouldn't modify the data).