Out of curiosity, I\'m wondering what the real underlying type of a C++ string literal is.
Depending on what I observe, I get different results.
A typeid tes
The type of a string literal is char const[N]
where N
is the number of characters including the terminating null character. Although this type does not convert to char*
, the C++ standard includes a clause allowing assignments of string literal to char*
. This clause was added to support compatibility especially for C code which didn't have const
back then.
The relevant clause for the type in the standard is 2.14.5 [lex.string] paragraph 8:
Ordinary string literals and UTF-8 string literals are also referred to as narrow string literals. A narrow string literal has type “array of n const char”, where n is the size of the string as defined below, and has static storage duration (3.7).