揭秘字符串中的 c_str() 与 data()
文档早已暗示了 c_str() 和 data 之间的关键区别字符串实现中的 () 方法:c_str() 保证以 null 结尾的字符串,而 data() 则不然。然而,在实践中,这种区别常常显得模糊。
技术细节
在许多实现中,data() 只是调用 c_str(),确保返回的字符串是空终止。这种实现细节使得人们很容易将 data() 与 c_str() 互换使用。然而,记住 c_str() 的核心目的是至关重要的:提供一个以 null 结尾的字符串。
选择正确的工具
在以 null 结尾的情况下如果需要 string(例如将其传递给本机 C 函数或将其与常规的以 null 结尾的字符数组进行比较),c_str() 是显而易见的选择。相反,如果您不需要空终止字符串(例如,在使用可以处理非空终止字符串的非 C 代码时),则 data() 可以比 c_str() 提供性能优势。
超越字符数据
还值得注意的是,C 中的字符串可能包含非字符数据。在这种情况下,data() 在语义上变得更合适,因为它反映了数据的真实性质。另一方面,c_str() 在这种情况下没有意义。
C 11 及以后
从 C 11 开始,data() 的行为并且 c_str() 已经标准化。现在,这两个函数都需要返回以 null 结尾的字符串,从本质上消除了它们之间的任何技术差异。因此,data() 和 c_str() 之间的选择更多地是语义和性能问题,而不是技术限制。
以上是我什么时候应该在字符串中使用 data() 和 c_str() ?的详细内容。更多信息请关注PHP中文网其他相关文章!