问题:
-
C/C++ code
-
AnsiString A; A.SetLength( 6 ); memcpy(A.c_str(), " ZX/0/0UT " , 6 ); WideString B = A; WideString C = B.c_bstr(); WideString D; D = B.c_bstr();
解答:(1)对于 WideString B = A;
触发的是:
__fastcall WideString(const AnsiString& src);
构造函数
(2)对于 WideString C = B.c_bstr();
触发的是:
__fastcall WideString(const char* src);
该函数的实现,与构造
__fastcall WideString(const wchar_t* src, int len);
区分开; 即 WideString(const char* src); 构造的判定条件为 /0
(3)对于 WideString D;
D = B.c_bstr();
触发的是:
WideString& __fastcall operator =(BSTR rhs);
操作符重载
该重载实现与
WideString& __fastcall operator =(const char* rhs);
区分开了
验证例子:
D = B.c_bstr();
D = A.c_str();
则长度分别是6 和 2.