Стандарт не обязателен в этом отношении. Нулевой символ даже не упоминается в документации basic_string
.
Во многих документах функций-членов упоминается, что:
емкость () значение не менее размера ()
Однако ничто не говорит о том, что capacity()
должно быть больше size()
, чтобы иметь возможность содержать нулевой символ.
Вот пример программы, которая показывает, что ни resize()
, ни capacity()
ничего не знают о завершающих нулевых символах.
#include <iostream>
#include <string>
int main()
{
std::string s1(10, 'a');
std::cout << "size: " << s1.size() << std::endl;
std::cout << "capacity: " << s1.capacity() << std::endl;
std::string s2;
s2.resize(5);
s2[0] = 'a';
s2[1] = 'b';
s2[2] = 'c';
s2[3] = 'd';
s2[4] = 'e';
std::cout << "size: " << s2.size() << std::endl;
std::cout << "capacity: " << s2.capacity() << std::endl;
std::string s3("abcd");
std::cout << "size: " << s3.size() << std::endl;
std::cout << "capacity: " << s3.capacity() << std::endl;
}
Вывод с g++ --std=c++14
на моем ноутбуке:
size: 10
capacity: 10
size: 5
capacity: 5
size: 4
capacity: 4