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 终止符。
这就是封装类型的作用。他们可以建立和维护不变量。
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 终止符。
这就是封装类型的作用。他们可以建立和维护不变量。