在C++中使用字符串的最佳实践

Str*_*der 2 c++ string

我目前正在制作一个小型C++工具,我对如何处理C++中的字符串感到震惊.这是我第一次需要处理C++,我对使用Java,C#等强类型的托管语言有很多经验,但我对C++字符串感到很生气.

在C++中是否有使用字符串的最佳实践?

很多WIN API函数处理不同类型的"字符串"

tchar,char*,LPWSTR,LPCSTR ......等将每种类型转换为其他类型需要花费大量时间来实现.

在将一种类型转换为另一种类型时,请建议您处理字符串的方式.也许有一些库可供使用?

Kon*_*rad 7

简短的回答?使用std::stringstd::wstring在任何地方,我的建议.

std::string strBuffer = "test";
strBuffer += " ... test";
std::string::size_type nStringSize = strBuffer.size();
const char* pszString = strBuffer.c_str();    // pszString contains 
                                              // pointer to memory held 
                                              // by STL string and can be 
                                              // passed into API calls
Run Code Online (Sandbox Code Playgroud)

您可以轻松地获得一个"C风格"字符串(即一个指向空终止字符数组char*通过.c_str()它可以传递到最WinAPI的功能是.

大多数其他类型的你提到(的tchar,LPWSTR,LPCSTR等)的类型定义与C风格的数组(或指针到C风格的数组或char类型),用于支持Unicode的在多字节字符集.

  • @Konrad:因为它是可怕的(并且无用的)匈牙利系统符号,而Charles Simonyi总是打算用现在称为应用匈牙利语的符号.*复制*类型系统信息是无用且有害的:它没有带来任何额外的价值,但仍然使变量的名称变得复杂*和*会导致重构将改变类型或名称而不改变另一个的风险,留下代码处于笨拙的状态(这是重复btw的典型问题). (2认同)