在C++中使用字符串最喜欢哪种方式?一个C风格的char
s?还是wchar_t
?CString
,std::basic_string
,std::string
,BSTR
或CComBSTR
?
当然,每个都有自己的应用领域,但无论如何,这是你最喜欢的,为什么?
std :: string或std :: wstring,具体取决于您的需求.为什么?
他们是标准的
它们是便携式的
他们可以处理I18N
他们有性能保证(按照标准)
防止缓冲区溢出和类似攻击
可以根据需要轻松转换为其他类型
非常模板化,为您提供多种选择,同时减少代码膨胀并提高性能.真.无法处理模板的编译器现在已经很久了.
C风格的字符阵列只是在寻找麻烦.你仍然需要偶尔处理它们(这就是std :: string.c_str()的用途)但老实说 - C中最大的危险之一就是程序员用char*做着坏事并且清理干净缓冲区溢出.只是不要这样做.
wchar__t的数组是一样的,只是更大.
CString,BSTR和CComBSTR不是标准的,也不是可移植的.除非绝对强迫,否则避免它 最理想的是,只需在需要时将std :: string/std :: wstring转换为它们,这不应该非常昂贵.
请注意,std :: string只是std :: basic_string的子节点,但除非你有充分的理由不使用std :: string,否则最好还是使用std :: string.真的很好.让编译器在这种情况下处理优化.
std :: string !!
他们称之为"标准"是有原因的.
basic_string是一个实现细节,应该被忽略.
BSTR和CComBSTR仅适用于与COM的interOp,仅适用于互操作时刻.
std :: string,除非我需要调用专门接受您列出的其他API的API.
这是一篇比较C++中最常见的字符串以及如何在它们之间进行转换的文章.解开Visual C++中的字符串