这是一段非常简单的c++代码。字符串的地址由28字节的常量间隔分隔。这28个字节包含了什么?我试图找到一个类比与一个包含整数的数组的4字节的差距。据我所知,4字节确保了可以达到的整数值的上限。在28字节的情况下会发生什么。它真的包含28*8位字符数据吗?我不相信。我试着输入大量的数据,它仍然没有任何问题。
string str[3] = { "a", "b", "c" };
for (int i = 0; i < 3; ++i) {
cout << &str[i] << endl;
}
这28个字节包含了什么
包含类型为string
的对象。除非我们知道你是如何定义这个类型的,否则我们无法知道更多。
如果string
是std::string
的别名,则它是标准库定义的类。确切的内容和确切的大小取决于标准库实现和目标体系结构,并在它们之间变化。
如果我们考虑一些实现在实践中可能做的事情:
它真的包含28*8位字符数据吗-我不相信。
信不信由你,(现代)字符串实现确实包含~sizeof(string)
(没有潜在开销)字节的字符数据,当这些字符适合该空间时。
使用高级技巧改变内部布局以支持更长的字符串。对于这些,他们使用指针。通常,会有一个指向开始的指针、指向字符串结束的指针(存储偏移量是另一种选择)和指向动态存储结束的指针(或偏移量)。
如果您阅读您使用的标准库头文件,您将在那里找到该类的确切定义。