【发布时间】:2020-01-20 16:00:17
【问题描述】:
以下code:
#include <iostream>
#include <atlstr.h>
int main()
{
CComBSTR bstr(L"test");
std::wcout << bstr << std::endl;
std::wcout << static_cast<BSTR>(bstr) << std::endl;
}
打印
033FA16C
测试
我尝试使用调试器调查每种情况下发生了哪些转换,但两次都进入了operator BSTR。那么为什么第一行打印地址而第二行打印文本呢?
【问题讨论】:
-
std::wcout 不知道有关 CComBSTR 的 bean,而智能类型不知道有关 iostream 的 bean。 BSTR 变得更加智能,因为它是 wchar_t* 的别名的别名。不够聪明,因为 BSTR 可以存储嵌入的 \0。这并不常见到需要担心。
-
Beans 并不真正相关; OP 合理地期望隐式转换开始。