Originally Posted by
brewbuck
Despite the fact that string literals are "constant" in that they usually are placed in read-only memory, their type is still just "char *" not "const char *." A string literal is not "implicitly const," it just happens to be unmodifiable on most platforms.
When C was first being designed, full memory protection wasn't common and so there was no way to force string literals to be unwritable. So it made no sense to make the type of a string literal be "const char *" because it defied reality. C++ inherited from C and so it inherited this quirk.