本讨论探讨了 C 标准模板库中 c_str() 和 data() 函数之间的细微差别( STL) 和其他实现。
空终止问题
通常说 c_str() 总是返回一个以空结尾的字符串,表明它以空字符 (' '),而 data() 则不然。然而,这种区别通常是特定于实现的。
实现细节
在实际实现中,data() 可能会在内部调用 c_str() 来获取以 null 结尾的表示形式。或者,两个函数可以执行相同的操作,返回指向基础字符串数据的指针,而无需显式空终止。
使用的含义
这种差异突出了以下内容的重要性:了解您正在使用的具体实现。通常,如果您需要空终止字符串以实现与 C 风格 API 或二进制协议的互操作性,请使用 c_str()。否则,如果不需要 null 终止,则 data() 可能会提供改进的性能。
类型多功能性
另一个考虑因素是 C 中的字符串并不完全由字符组成。它们可以包含任何类型的元素。在这种情况下,data() 更合适,因为它的名称更好地反映了它返回的数据的通用性质。
C 11 Update
值得注意的是在 C 11 及更高版本中,data() 和 c_str() 都被要求行为相同。这意味着 data() 现在需要返回一个以 null 结尾的字符串,从而消除了前面提到的区别。
以上是在 C STL 中何时使用 c_str() 与 data()?的详细内容。更多信息请关注PHP中文网其他相关文章!