In C++, literals exist only in the compiler. They are used in expressions, assignments and initialisations. The value of a literal may be found in the running program if it has been used to initialise a variable or temporary, but the literal itself is not.
A name that is a reference to a literal has meaning, because a reference is a value, so that wherever the name is used it can be replaced by the literal value itself. In certain special cases it is replaced by a temporary variable initialised to that value, and the required const qualifier protects that variable against being modified.
A name that is a pointer to a literal has no meaning. Pointers refer to storage locations, and a literal doesn't have one.
It would be hypothetically possible for C++ to allow pointers to literals, and to interpret them as pointing to a temporary variable initialised to that value, and presumably to protect that value with a const qualifier. The reasons it wasn't defined that way is either (a) it's not very useful (b) it would be incompatible with C. You'd have to ask Bjarne about that one.
Please note that the above applies to integers and floats. Literal strings have different rules, because in many ways they are already const pointers.