I follow the Google style guide standard as it makes the most sense to me. It states:
Within function parameter lists all
references must be const:
void Foo(const string &in, string *out);
In fact it is a very strong convention
in Google code that input arguments
are values or const references while
output arguments are pointers. Input
parameters may be const pointers, but
we never allow non-const reference
parameters.
One case when you might want an input
parameter to be a const pointer is if
you want to emphasize that the
argument is not copied, so it must
exist for the lifetime of the object;
it is usually best to document this in
comments as well. STL adapters such as
bind2nd and mem_fun do not permit
reference parameters, so you must
declare functions with pointer
parameters in these cases, too.