C++ 在哪里使用c++;(即std::string)字符串以及在何处使用'\0';终止的c字符串

C++ 在哪里使用c++;(即std::string)字符串以及在何处使用'\0';终止的c字符串,c++,string,C++,String,在何处使用std::string和在何处使用'\0'终止的C字符串。 基本上我想知道它们彼此之间有什么优势。c++std::string: 总的来说,字符串比char*更安全,通常当您使用char*进行操作时,您必须检查以确保操作正确,在string类中,所有这些都是为您完成的。 通常在使用char*时,您必须释放分配的内存,而不必使用string,因为它在销毁时会释放其内部缓冲区。 字符串与C++ StrugSuffs结合得很好,格式IO非常简单。 char 使用char *,可以让你对发生在

在何处使用
std::string
和在何处使用
'\0'
终止的C字符串。

基本上我想知道它们彼此之间有什么优势。

c++std::string:

总的来说,字符串比char*更安全,通常当您使用char*进行操作时,您必须检查以确保操作正确,在string类中,所有这些都是为您完成的。 通常在使用char*时,您必须释放分配的内存,而不必使用string,因为它在销毁时会释放其内部缓冲区。 字符串与C++ StrugSuffs结合得很好,格式IO非常简单。 char


使用char *,可以让你对发生在幕后的场景有更多的控制,这意味着你可以调整性能,如果需要的话,

零结尾的char *与C接口和STD::String一起使用在普通C++代码中。但这并不是唯一的选择——如果您真正了解性能,您可能希望编写自己的字符串类(例如,没有动态内存分配的固定长度)

始终使用
std::string
,如果您需要以null结尾的字符串(例如,在使用C API时),则调用
C_str()在性能关键应用程序中,零终止字符串不是很好。考虑STROLN()或STARCK()的复杂性,实际上,使用自定义字符串类,调整性能要容易得多。code>char*
几乎不可调。主要原因是字符串性能受参考位置的影响,因此小字符串优化是最重要的工具。请注意,
std::string
的许多实现已经具有SSO。即使没有针对您的使用进行专门的调整,它仍然优于完全没有SSO的
char*
。@MSalters什么实现有SSO?我不认为这是一场绝对的胜利,可以赢得大多数人的支持。但无论如何,“tune”是一个时髦词,通常可以假定它会压制它的封闭参数。AFAIK MSVC有,并且建议使用新的GCC字符串类(由于添加SSO显然会破坏ABI,所以还没有使用该类)