你如何处理C++中的字符串?

Ra.*_*Ra. 17 c++ string

在C++中使用字符串最喜欢哪种方式?一个C风格的chars?还是wchar_tCString,std::basic_string,std::string,BSTRCComBSTR

当然,每个都有自己的应用领域,但无论如何,这是你最喜欢的,为什么?

Zat*_*rus 32

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.真的很好.让编译器在这种情况下处理优化.


Jam*_*ran 8

std :: string !!

他们称之为"标准"是有原因的.

basic_string是一个实现细节,应该被忽略.

BSTR和CComBSTR仅适用于与COM的interOp,仅适用于互操作时刻.


Lou*_*nco 6

std :: string,除非我需要调用专门接受您列出的其他API的API.


Joh*_*ook 5

这是一篇比较C++中最常见的字符串以及如何在它们之间进行转换的文章.解开Visual C++中的字符串