前言
在平时的c++数据类型的讨论中,我们有时会见到类似下图的言论:
string真的能存无限多的数据吗?今天,我们就来一探究竟吧!
测试
十六位嵌入式开发环境
大家可以在十六位嵌入式开发环境中输入这样一段代码(记得包含头文件,文章最后有更好的测试方法):
string s1 = "aaaaaaaa…aaaaa";
//因篇幅限制,省略了一部分a,实际总共65535个a
编译一下,发现编译器报了错。
为什么会这样呢,原来编译器里做了如下限制:
if (this.nerrs == 0 && var2 != null && var2 instanceof String
&& ((String)var2).length() >= 65535) //注意这里的65535,只要大于等于它,就报错。
{
this.log.error(var1, "limit.string", new Object[0]);
++this.nerrs; }
32位环境
测试时可以仿照上面的方法,最大值是:4,294,967,295
大约占内存4G字节。
少数服务器64位环境
最大值是:18,446,744,073,709,551,615
大约占内存16E字节(1E = 2的30次方个G)。
简便的测试方法
可以通过std::string::max_size()函数获得最大值
示例:
string str;
str.max_size(); //记得包含头文件
小结
除编译器限制以外,string支持的字符串长度是根据系统环境的内存决定的。
也可以这样认为:string支持的字符串长度上限虽然有,但非常大,几乎用不到。