我正在使用带有三元运算符的语句,该语句始终返回另一个值。
BSTR pVal = L"Yes";
bool val = pVal == L"Yes" ? true : false;
此语句返回
val = false;
我希望它在这里返回true。我做错了吗?
答案 0 :(得分:5)
这里有很多错误。
==
上的 BSTR
比较指针值。定义了两个等于指针的L"Yes"
。
bool_expr?true:false
是noop。
bool val = wcscmp(pVal, L"Yes") == 0;
可能就是您想要的。
BSTR pVal = L"Yes";
是个坏消息;那不是您应该如何创建BSTR的方法。 BSTR应该是分配在特定内存区域中的Pascal式字符串。
BSTR pVal = SysAllocString(L"Yes");
通常更好。
使用wcscmp
在BSTR
上有效,因为保证BSTR
为空终止。但是,将空终止的字符串分配给BSTR
并不是一个好计划。消耗BSTR
的代码可能期望length字段位于第一个字符之前。
使用_bstr_t
甚至是一个不错的计划,它是BSTR
周围的C ++包装器。
比较BSTR
和BSTR
而不使用C API通常也是个好主意; BSTR
可以包含嵌入式NUL,C API在第一个NUL处停止。
_bstr_t pVal = L"Yes";
bool val = pVal == _bstr_t(L"Yes");
_bstr_t
的{{1}}做的很合理。