Страницы

Поиск по вопросам

среда, 20 февраля 2019 г.

Какой тип данных используется для хранения строки?

Вот пример кода:
auto size = "Hello, world"; std::cout << sizeof(size);
В консоль выводится 4. Не могу понять, какой тип данных использует компилятор для хранения этой строки?


Ответ

Строковые литералы в C++ имеют типы константных символьных массивов. Данный литерал "Hello, world" имеет тип const char[13]
Используемый в качестве выражения инициализации он неявно преобразуется к указателю на свой первый элемент, который имеет тип const char *
Соответственно переменная size имеет тип const char *
Вы можете убедиться в этом, запустив на выполнение следующий фрагмент кода
auto size = "Hello, world"; std::cout << typeid(size).name() << std::endl;
Если бы вы написали так
decltype(auto) size = "Hello, world"; std::cout << sizeof(size) << std::endl;
то переменная size была бы ссылкой на строковый литерал и имела тип const char ( & )[13], а оператор sizeof вернул бы значение 13

Комментариев нет:

Отправить комментарий