Literals are, in general, prvalues.
Strings are a special case, defined as an array of char (meaning lvalue).
This question is specifically about not string literals.
Why are non-string literals not const?
foo(42); // passes foo an `int`, not a `const int`.
You can't modify a non-string literal, so doesn't it make sense for it to be const?