现在有没有什么好的理由在C++中使用C-strings?我的教科书在某些方面的例子中使用它们,我觉得使用std :: string会更容易.
我必须使用它们的唯一原因是与使用C样式字符串的第三方库连接时.出于性能原因,可能还会有一些深奥的情况,你会使用C样式字符串,但更多时候,由于内联和专业化等原因,使用C++字符串上的方法可能更快.
c_str()
在使用这些API时,您可以在许多情况下使用该方法,但是您应该知道返回的char*是const,并且您不应该通过该指针修改字符串.在这种情况下,你仍然可以使用vector
更多内存控制说明:
C字符串是POD类型,因此可以在应用程序的只读数据段中分配它们.如果std::string
在命名空间范围内声明和定义常量,编译器将生成在main()
调用std::string
每个常量的构造函数之前运行的其他代码.如果您的应用程序有许多常量字符串(例如,如果您生成了使用常量字符串的C++代码),则在这种情况下可能更喜欢C字符串.
某些实现std::string
支持称为SSO("短字符串优化"或"小字符串优化")的功能,其中std::string
该类包含最多一定长度的字符串的存储.这增加了大小,std::string
但通常会显着降低免费存储分配/解除分配的频率,从而提高性能.如果您的实现std::string
不支持SSO,那么std::string
在堆栈上构造一个空的仍将执行自由存储分配.如果是这种情况,使用临时堆栈分配的C字符串可能对使用字符串的性能关键代码有帮助.当然,当你这样做时,你必须小心不要在脚上射击.
因为他们是如何来自众多API /库的?