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