string::capacity/reserve() 算作终止 null 吗?
Does string::capacity/reserve() count terminating null?
从cppref关于capacity()
and reserve()
的描述来看,是否计算终止空字符并不明显。
标准states that:
In all cases, size() <= capacity()
.
并且size()
不包括终止空值。
因为 size()
可能等于 capacity()
,在这种情况下,这意味着 capacity()
也不计算终止空值。
注意在C++11及以后的版本中,mystring.c_str()
等价于mystring.data()
等价于&mystring[0]
,mystring[mystring.size()]
保证为'[=19 =]'
.
检查此 Demo。
标准对此不置可否。 documentation of basic_string
.
中甚至没有提到空字符
在许多成员函数的文档中,提到:
capacity() a value at least as large as 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
从cppref关于capacity()
and reserve()
的描述来看,是否计算终止空字符并不明显。
标准states that:
In all cases,
size() <= capacity()
.
并且size()
不包括终止空值。
因为 size()
可能等于 capacity()
,在这种情况下,这意味着 capacity()
也不计算终止空值。
注意在C++11及以后的版本中,mystring.c_str()
等价于mystring.data()
等价于&mystring[0]
,mystring[mystring.size()]
保证为'[=19 =]'
.
检查此 Demo。
标准对此不置可否。 documentation of basic_string
.
在许多成员函数的文档中,提到:
capacity() a value at least as large as 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