Sam*_*til 6 c++ string visual-studio visual-c++
现在已经有一段时间了,我一直用C++进行编码,而且我认为大多数实际用C++编写代码的人会同意最棘手的决定之一就是选择几乎令人眼花缭乱的字符串类型.我主要更喜欢ATL Cstring的易用性和功能,但是想要对可用选项进行比较研究.我已经检查了SO并且没有找到任何帮助选择正确字符串的内容.有些网站会说明从一个字符串到另一个字符串的转换,但这不是我们想要的.
希望根据专业,性能,可移植性(Windows,Mac,Linux/Unix等),易用性/功能,多语言支持(Unicode/MBCS),缺点(如果有的话)以及任何其他特殊功能进行比较案例.
我列出了我到目前为止遇到的字符串.我相信会有更多,所以我们可以稍后编辑它以适应其他选项.请注意,我主要在Windows上工作,所以列表反映了相同:
char*std::stringbasic_stringCStringCStringBSTR_bstr_tCComBstr这并不意味着对你的热情有所帮助,但实际上在一个项目中混合很多字符串类型是低效的,所以项目越大越不可避免地应该在std :: string上解决(这是对于类型为char的STL的basic_string实例化的typedef,而不是一个不同的实体),因为它是唯一的标准值 - 语义选项.char*主要用于固定大小的字符串(例如字符串文字,固定大小的缓冲区)或与C接口.
为什么我说效率低?您最终会为各种字符串参数(即使是多个参数的排列)进行不必要的模板实例化.您发现自己正在调用想要将结果加载到字符串中的函数,然后必须在其上调用.c_str()并构造其他类型,执行冗余内存分配.即使const std :: string&如果使用ASCIIZ char*调用也需要一个临时字符串(例如,对于某些其他字符串类型的缓冲区).当你想编写一个函数来处理特定调用者想要使用的字符串类型时,你会被推向模板,因此内联代码,更长的编译时间和重新编译依赖性(有一些方法可以缓解这种情况,但它们会变得复杂为方便或自动化,他们往往需要改变各种字符串类型 - 例如
项目可能需要使用非标准字符串类型与他们想要使用的库进行交互,但是如果可能的话,您希望将其最小化并限制普遍性.
| 归档时间: |
|
| 查看次数: |
414 次 |
| 最近记录: |