Я запутался в типе данных строкового литерала. Это 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""
) является (и всегда было) реализацией.