现在在C++中使用C-strings有什么好的理由吗?我的教科书在某些情况下在示例中使用了它们,我真的觉得只使用std::string会更容易。
发布于 2008-09-20 20:52:03
我不得不使用它们的唯一原因是在与使用C样式字符串的第三方库交互时。也可能有一些深奥的情况,出于性能原因,您可能会使用C样式字符串,但通常情况下,由于内联和专门化等原因,对C++字符串使用方法可能会更快。
在使用这些类型的API时,您可以在许多情况下使用c_str()方法,但是您应该知道返回的char *是const,并且不应该通过该指针修改字符串。在这种情况下,您仍然可以使用向量,并且至少可以获得更容易的内存管理的好处。
发布于 2008-09-21 15:24:20
更多的内存控制注意事项:
C字符串是POD类型,因此可以在应用程序的只读数据段中分配它们。如果在命名空间范围内声明和定义std::string常量,编译器将生成在调用每个常量的std::string构造函数的main()之前运行的附加代码。如果您的应用程序有许多常量字符串(例如,如果您已经生成了使用常量字符串的C++代码),则在这种情况下,C字符串可能更可取。
std::string的一些实现支持一种称为SSO (“短字符串优化”或“小字符串优化”)的特性,其中std::string类包含对特定长度字符串的存储。这增加了std::string的大小,但通常会显著降低空闲存储分配/释放的频率,从而提高性能。如果您的std::string实现不支持单点登录,那么在堆栈上构造一个空的std::string仍然会执行空闲存储分配。如果是这种情况,对于使用字符串的性能关键型代码,使用临时堆栈分配的C字符串可能会很有帮助。当然,当你这样做的时候,你必须小心不要伤到自己的脚。
发布于 2008-09-20 20:46:05
因为这就是它们来自众多API/库的方式?
https://stackoverflow.com/questions/109317
复制相似问题