Подтвердить что ты не робот

С++ что такое тип данных строкового литерала?

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

4b9b3361

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