Что такое тип строкового литерала в C ++?

Я запутался в типе данных строкового литерала. Это const char * или const char?

21

Решение

Это const char[N] (который тоже самое как char const[N]), где N длина строки плюс один для окончания NUL (или только длина строки, если вы определяете «длину строки» как уже включающую NUL).

Вот почему вы можете сделать sizeof("hello") - 1 чтобы получить количество символов в строке (включая любые встроенные NULс); если бы это был указатель, он бы не работал, потому что он всегда был бы размером указателя в вашей системе (минус один).

26

Другие решения

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

7

По вопросам рекламы [email protected]