std :: string如何跟踪NUL char

时间:2016-05-05 17:31:37

标签: c++11 language-lawyer stdstring

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

示例:

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

1 个答案:

答案 0 :(得分:4)

标准要求您从data()获取的字符串已终止,并且需要the references generated from operator[] are contiguous and NUL terminated。所有规范都说明了这一点。

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

这是封装类型可以做的事情。他们可以建立和维护不变量。