string ::容量/储备()计数终止null

Does string::capacity/reserve() count terminating null?

本文关键字:null 终止 容量 储备 string      更新时间:2023-10-16

capacity()reserve()上的CPPREF描述中不明显,是否终止null字符。

标准指出:

在所有情况下,size() <= capacity()

size()不包括终止空的null。

由于size()可能等于capacity(),因此,在这种情况下,这意味着capacity()也不计算终止null。

请注意,在C 11及以后,mystring.c_str()等于mystring.data()等于&mystring[0],并且mystring[mystring.size()]保证为''

检查此 demo

标准对此是不可交接的。basic_string的文档中甚至都没有提到NULL字符。

在许多成员功能的文档中,提到:

容量()一个值至少与大小()

一样大的值

但是,没有什么可以说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