C 11 中的 c_str() 和空终止字符串
在 C 11 中, basic_string::c_str() 的定义引发了问题:它仍然会产生以 null 结尾的字符串吗?
问题
在 C 11 中,basic_string::c_str 被定义为与 basic_string::data 对齐,依次与 (begin() n) 和 (&*begin() n) 对齐。字符串末尾没有空字符的明确要求。
答案
尽管缺乏明确的定义,但 C 11 中的字符串需要在内部使用空终止缓冲区。这在operator[]的定义中很明显:
“返回:*(begin() pos) 如果 pos
由于 c_str 是根据运算符[]定义的,并且 c_str 和 data 都必须是 O(1),因此实现被迫使用以 null 结尾的缓冲区。
其他注意事项
operator[] 的返回值要求意味着您可以使用 &operator[](0) 来检索 c_str()。这意味着终止空字符必须驻留在同一缓冲区中。因此,即使延迟初始化终止符,也无法在中间状态下观察到它。
结论
与初始假设相反,C 11 中的 c_str() 是仍然保证生成以 null 结尾的字符串,确保与遗留代码的兼容性并实现高效的字符访问。
以上是C 11 中的'c_str()”仍然保证返回以 null 结尾的字符串吗?的详细内容。更多信息请关注PHP中文网其他相关文章!