C字符串,什么时候用?

C字符串,什么时候用?,第1张

概述现在已经有一段时间了,我一直用C语言进行编码,我认为大多数实际用C语言编写代码的人都会同意最棘手的决定之一就是选择几乎令人眼花缭乱的字符串类型.我更喜欢ATL Cstring的易用性和功能,但是想要对可用选项进行比较研究. 我已经检查了SO并且没有找到任何帮助选择正确字符串的内容.有些网站会说明从一个字符串到另一个字符串的转换,但这不是我们想要的. 希望根据专业,性能,可移植性(Windows,M 现在已经有一段时间了,我一直用C语言进行编码,我认为大多数实际用C语言编写代码的人都会同意最棘手的决定之一就是选择几乎令人眼花缭乱的字符串类型.我更喜欢ATL Cstring的易用性和功能,但是想要对可用选项进行比较研究.
我已经检查了SO并且没有找到任何帮助选择正确字符串的内容.有些网站会说明从一个字符串到另一个字符串的转换,但这不是我们想要的.

希望根据专业,性能,可移植性(Windows,Mac,Linux / Unix等),易用性/功能,多语言支持(Unicode / MBCS),缺点(如果有的话)以及任何其他特殊功能进行比较案例.

我列出了我到目前为止遇到的字符串.我相信会有更多,所以我们可以稍后编辑它以适应其他选项.请注意,我主要在windows上工作,所以列表反映了相同:

> char *
> std :: string
> STL的basic_string
> ATL的CString
> MFC的CString
> BSTR
> _bstr_t
> CComBstr

解决方法 这并不意味着对你的热情有所帮助,但实际上在一个项目中混合很多字符串类型是低效的,所以项目越大越不可避免地应该在std :: string上解决(这是对于类型为char的STL的basic_string实例化的typedef,而不是一个不同的实体),因为它是唯一的标准值 – 语义选项. char *主要用于固定大小的字符串(例如字符串文字,固定大小的缓冲区)或与C接口.

为什么我说效率低?您最终会为各种字符串参数(即使是多个参数的排列)进行不必要的模板实例化.您发现自己正在调用想要将结果加载到字符串&中的函数,然后必须在其上调用.c_str()并构造其他类型,执行冗余内存分配.甚至const std :: string&如果使用ASCIIZ char *调用(例如,对某些其他字符串类型的缓冲区),则需要一个临时字符串.当你想编写一个函数来处理特定调用者想要使用的字符串类型时,你会被推向模板,因此内联代码,更长的编译时间和重新编译依赖性(有一些方法可以缓解这种情况,但它们会变得复杂并且为了方便或自动化,它们倾向于需要改变各种字符串类型 – 例如,转换 *** 作符或成员函数返回一些公共接口/代理对象).

项目可能需要使用非标准字符串类型与他们想要使用的库进行交互,但是如果可能的话,您希望将其最小化并限制普遍性.

总结

以上是内存溢出为你收集整理的C字符串,什么时候用?全部内容,希望文章能够帮你解决C字符串,什么时候用?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1236433.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存