5

第一的:

LPCTSTR asdfsdf = (LPCTSTR)(_bstr_t)v;
printf("%s\n", asdfsdf);

第二:

printf("%s\n", (LPCTSTR)(_bstr_t)v);

它们是相同的,但第一个条件会导致代码不可读

为什么?

4

1 回答 1

9

该类将 BSTR 封装在 C++ 类中_bstr_t在你的第一个例子中:

LPCTSTR asdfsdf = (LPCTSTR)(_bstr_t)v;

你正在创建一个_bstr_t对象,从中提取LPCTSTR出来,但是临时_bstr_t对象被破坏了。任何asdfsdf指向的东西现在都被释放了,不能再使用了。

在你的第二个例子中

printf("%s\n", (LPCTSTR)(_bstr_t)v);

临时_bstr_t对象直到调用之后才被破坏,因此使用该值printf()没有问题。LPCTSTR

于 2012-12-06T07:57:45.407 回答