Размер строки всегда кратен 15?
Нет;единственная гарантия емкости std::string
заключается в том, что s.capacity() >= s.size()
.
. Хорошая реализация, вероятно, будет наращивать емкость экспоненциально, так что она удваивается в размере каждый раз, когда требуется перераспределение базового массива.Это требуется для std::vector
, чтобы push_back
мог иметь амортизированную постоянную сложность по времени, но для std::string
.
такого требования нет. Кроме того, реализация std::string
может выполнять небольшие строковые оптимизации, гдеСтроки, меньшие некоторого количества символов, хранятся в самом объекте std::string
, а не в динамически размещаемом массиве.Это полезно, потому что многие строки короткие и динамическое распределение может быть дорогим.Обычно небольшая оптимизация строки выполняется, если количество байтов, необходимое для хранения строки, меньше, чем количество байтов, необходимое для хранения указателей в динамически распределенном буфере.
Независимо от того, выполняет ли ваша конкретная реализация небольшие строковые оптимизации, я не знаю.