string :: capacity / reserve()计数是否终止为null?

问题描述 投票:4回答:2

从cppref对capacity()reserve()的描述来看,是否计算终止空字符并不明显。

c++ stdstring c++-standard-library
2个回答
6
投票

标准states that

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

并且size()不包括终止空值。

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

请注意,在C ++ 11及更高版本中,mystring.c_str()相当于mystring.data()相当于&mystring[0]mystring[mystring.size()]保证是'\0'

检查这个Demo


1
投票

关于这个标准是非承诺的。在documentation of basic_string中甚至没有提到空字符。

在许多成员函数的文档中,提到:

capacity()一个至少与size()一样大的值

然而,没有任何东西可以说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
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.