代码:
CString a = "a";
CStringArray arr;
arr.Add(a);
cout << a << endl;
cout << arr[0] << endl;
输出:
000001E46FEDD8F8
000001E46FEDD8F8
输出CString类的值,但是输出的是基16地址
如何输出CString数据而不是输出16进制地址?
到 const char* 的强转换尚未解决。
operator<<
有很多不同的重载。如果给定上下文中有多个适合,编译器有选择最适合的规则。在本例中,它选择为您提供对象的地址而不是字符串的内容。
CString
最方便的属性之一是它将隐式转换为指向 const 字符数组的指针。你说“强转化”不行,但你做对了吗?
cout << static_cast<const char *>(a) << endl;
注意
CString
不是一个单独的类;它是一个扩展为 CStringA
或 CStringW
的宏,具体取决于您的编译器设置,无论您是否配置为使用窄字符串或宽 (Unicode) 字符串。如果您直接明确使用 A
或 W
变体而不是让编译器为您选择它,您可以避免一些意外。
至于在当今时代您是否应该使用
CString
,那就更复杂了。它是为在 Microsoft 的 MFC 和 ATL 框架中使用而发明的,如果您仍在使用其中之一,您可能将无法摆脱它。就在三年前,我也遇到过这样的情况。我相信它甚至比std::string
和std::wstring
还要古老。