Я запутался в типе данных строкового литерала. Это const char * или const char?. Взгляды оценены. Благодаря
С++ что такое тип данных строкового литерала?
Ответ 1
Это const char[N] (это то же самое, что и char const[N]), где N - это длина строки плюс одна для завершающего NUL (или просто длина строки, если вы определяете "длина строки", которая уже включает NUL).
Вот почему вы можете сделать sizeof("hello") - 1, чтобы получить количество символов в строке (включая любые встроенные NUL s); если бы это был указатель, это не сработало бы, потому что это всегда был бы указатель на вашей системе (минус один).
Ответ 2
"Hello world" const char[12] (одиннадцать символов плюс терминатор '\0').
L"Hello world" const wchar_t[12].
А так как С++ 14, "Hello world"s есть std::string.
Также обратите внимание на u8"", u"" и u"" строковые литералы, добавленные С++ 11, которые определяют кодировку UTF-8, UTF-16 и UTF-32 соответственно. Кодирование неквалифицированных строковых литералов (т.е. "" и L"") является (и всегда было) реализацией.