C++字符串完全指引之二:字符串封装类
2010-10-15 09:08:04 来源:Web开发网核心提示:所有类的总结两个字符串类之间进行转换的常用方式是:先把源字符串转换成一个C语言风格的字符串指针,然后把这个指针传递给目的类型的构造函数,C++字符串完全指引之二:字符串封装类(10),下面这张表显示了怎样把一个字符串转换成一个C语言风格的字符串指针以及哪些类具有接收C语言风格的字符串指针的构造函数,
所有类的总结
两个字符串类之间进行转换的常用方式是:先把源字符串转换成一个C语言风格的字符串指针,然后把这个指针传递给目的类型的构造函数。下面这张表显示了怎样把一个字符串转换成一个C语言风格的字符串指针以及哪些类具有接收C语言风格的字符串指针的构造函数。
Class | string type | convert to char*? | convert to const char*? | convert to wchar_t*? | convert to const wchar_t*? | convert to BSTR? | construct from char*? | construct from wchar_t*? |
_bstr_t | BSTR | yes cast1 | yes cast | yes cast1 | yes cast | yes2 | yes | yes |
_variant_t | BSTR | no | no | no | cast to _bstr_t3 |
cast to _bstr_t3 |
yes | yes |
string | MBCS | no | yes c_str() method | no | no | no | yes | no |
wstring | Unicode | no | no | no | yes c_str() method | no | no | yes |
CComBSTR | BSTR | no | no | no | yes cast to BSTR | yes cast | yes | yes |
CComVariant | BSTR | no | no | no | yes4 | yes4 | yes | yes |
CString | TCHAR | no6 | in MBCS builds, cast |
no6 | in Unicode builds, cast |
no5 | yes | yes |
COleVariant | BSTR | no | no | no | yes4 | yes4 | in MBCS builds |
in Unicode builds |
1、即使 _bstr_t 提供了向非常量指针的转换操作符,修改底层的缓冲区也会已引起GPF如果你溢出了缓冲区或者造成内存泄漏。 2、_bstr_t 在内部用一个 wchar_t* 来保存 BSTR,所以你可以使用 const wchar_t* 来访问BSTR。这是一个实现细节,你可以小心的使用它,将来这个细节也许会改变。 3、如果数据不能转换成BSTR会抛出一个异常。 4、使用 ChangeType(),然后访问 VARIANT 的 bstrVal 成员。在MFC中,如果数据转换不成功将会抛出异常。 5、这里没有转换 BSTR 函数,然而 AllocSysString() 返回一个新的BSTR。 6、使用 GetBuffer() 方法,你可以暂时地得到一个非常量的TCHAR指针。 |
更多精彩
赞助商链接