получить размер строки, а он по определению массив чаров, нужно умножать размер чара на размер массива?
Если чар занимает 1 байт, то зачем умножать?
Делить размер массива на размер типа
Ну это не даст размер строки
там не только символы. в случае сишной строки там ещё нулевой байт в конце и указатель, в случае std::string указатель и две длины
Скорее три указателя
Даст, если строка представлена в виде массива чаров
но символы все в куче хранятся
разве? по-моему там указатель, длина и капасити
Думаю там вместо длин указатели
https://github.com/llvm/llvm-project/blob/89b59345ee29d2cc1afa1f60445916ae2e74be6d/libcxx/include/string#L733-L738 https://github.com/llvm/llvm-project/blob/89b59345ee29d2cc1afa1f60445916ae2e74be6d/libcxx/include/string#L763-L768
pointer __data_ - указатель на данные size_type __size_ - размер строки (количество символов) size_type __cap_ - максимально возможный размер строки без переаллокаций (если добавить больше символов, все данные придётся перемещать, поменяется указатель __data_, инвалидируются итераторы)
Если string это массив чаров, тогда почему я могу делать так? И почему у этого массива есть методы?) int main() { string a = "abc"; a += "w"; cout << a; return 0; }
string это не массив чаров
потому что std::string и string это разные слова?
по моему это не регламентировано?)
sizeof(char*) == sizeof(size_t)
Так длина всё равно не указатель
Пруф или не было
Ладно, я погорячился
Понятное дело, что это класс, тогда что такое string[i]
string.operator[](i);
Это размер не строки, а буфера под строку...
Обсуждают сегодня