std::string 如何跟踪 NUL 字符

How does std::string keep track of NUL char

C++11 保证 std::string 在内部存储 nul 终止符。如果没有明确的 terminate 方法,如何实现?

示例:

std::string foo("Baz");
printf("foo contains %s\n",&foo[0]); //Completely safe

标准要求您从 data() 获得的字符串以 NUL 结尾,并且要求 the references generated from operator[] are contiguous and NUL terminated。这就是规范的全部内容。

实施工作就是这样做的。通常,这只是通过在字符串末尾存储一个 NUL 终止符来实现,从而使实际缓冲区大小比显示的大一倍。如果您添加字符,它仍会在新添加的字符序列的末尾存储一个 NUL 终止符。如果删除字符,它会适当地移动 NUL 终止符。

这就是封装类型的作用。他们可以建立和维护不变量。