Extreme Thinking
C++中的字符串类型

2014-12-22


C++提供了ASCII码字符的数据类型和字符串处理函数,也定义了一组宽字符版本的数据类型和字符串处理函数:

  • char[], char*, string - ASCII字符类型,一个字符为一个字节
  • wchar_t[], wchar_t*, wstring - 宽字符类型,一个字符一般为2个字节
  • TCHAR[], TCHAR* - 根据是否定义了UNICODE宏,分别对应wchar_t或char

宽字符类型的示例定义:

typedef unsigned short wchar_t;
typedef basic_string<char> string;
typedef basic_string<wchar_t> wstring;
#ifdef UNICODE 
    typedef char TCHAR;
    #define _T(x) x
#else 
    typede wchar_t TCHAR; 
    #define _T(x) L##x
#endif

使用TCHAR和T似乎保持了灵活性,但绝大多数的程序都是要支持国际化的,因此,建议直接使用wchart/wstring等来处理字符串。

C++和Java不同,C++并没有规定程序处理的所有字符串是unicode的,C++只是提供了宽字符版本的数据类型,类库和函数,在wchar_t*里你可能放的是GBK编码的字符,也可能放的是unicode编码的字符,只要字符串处理时保证字符正确就可以了,但一般来说,建议使用unicode。

C++实现I18N也有一些best practice和类库,譬如类库ICU。

更多阅读: