【发布时间】:2014-03-02 22:56:34
【问题描述】:
在哪里使用 std::string 以及在哪里使用 '\0' 终止的 C 字符串。
基本上我想知道他们之间有什么优势。
【问题讨论】:
-
始终使用
std::string,如果您需要一个以空字符结尾的字符串(例如使用C API 时),请调用c_str()方法。
在哪里使用 std::string 以及在哪里使用 '\0' 终止的 C 字符串。
基本上我想知道他们之间有什么优势。
【问题讨论】:
std::string,如果您需要一个以空字符结尾的字符串(例如使用C API 时),请调用c_str() 方法。
c++ std::string:
总体而言,字符串比 char* 更安全。通常,当您使用 char* 进行操作时,您必须检查以确保事情正确,在字符串类中,所有这些都是为您完成的。 通常在使用 char* 时,您必须释放分配的内存,而不必对字符串执行此操作,因为它会在销毁时释放其内部缓冲区。 字符串与 c++ stringstream 配合得很好,格式化 IO 非常简单。
字符
使用 char* 可以让您更好地控制“幕后”发生的事情,这意味着您可以根据需要调整性能。
【讨论】:
char* 很难调整。主要原因是字符串性能受引用位置的影响,因此小字符串优化是最重要的工具。请注意,std::string 的许多实现已经具有 SSO。即使没有专门针对您的使用进行调整,它仍然胜过完全没有 SSO 的 char*。
零终止的 char* 与 C 接口和 std::string 一起使用 - 在常见的 c++ 代码中。但并不是唯一的选择——如果你真的很了解性能,你可能想要编写自己的字符串类(例如,没有动态内存分配的固定长度)
【讨论】: