首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在c++中使用c字符串?

为什么在c++中使用c字符串?
EN

Stack Overflow用户
提问于 2008-09-20 20:45:25
回答 18查看 7.8K关注 0票数 20

现在在C++中使用C-strings有什么好的理由吗?我的教科书在某些情况下在示例中使用了它们,我真的觉得只使用std::string会更容易。

EN

回答 18

Stack Overflow用户

回答已采纳

发布于 2008-09-20 20:52:03

我不得不使用它们的唯一原因是在与使用C样式字符串的第三方库交互时。也可能有一些深奥的情况,出于性能原因,您可能会使用C样式字符串,但通常情况下,由于内联和专门化等原因,对C++字符串使用方法可能会更快。

在使用这些类型的API时,您可以在许多情况下使用c_str()方法,但是您应该知道返回的char *是const,并且不应该通过该指针修改字符串。在这种情况下,您仍然可以使用向量,并且至少可以获得更容易的内存管理的好处。

票数 23
EN

Stack Overflow用户

发布于 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字符串可能会很有帮助。当然,当你这样做的时候,你必须小心不要伤到自己的脚。

票数 15
EN

Stack Overflow用户

发布于 2008-09-20 20:46:05

因为这就是它们来自众多API/库的方式?

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/109317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档