我正在使用带有三元运算符的语句,该语句始终返回其他值。
BSTR pVal = L"Yes";
bool val = pVal == L"Yes" ? true : false;
Run Code Online (Sandbox Code Playgroud)
该语句返回
val = false;
Run Code Online (Sandbox Code Playgroud)
我希望它在这里返回true。我做错了吗?
这里有很多地方是错误的。
==on BSTR比较指针值。L"Yes"指针相等是两个实现的定义。
bool_expr?true:false 没事。
bool val = wcscmp(pVal, L"Yes") == 0;
Run Code Online (Sandbox Code Playgroud)
可能就是您想要的。
BSTR pVal = L"Yes";
Run Code Online (Sandbox Code Playgroud)
是个坏消息;那不是您应该如何创建BSTR的方法。BSTR应该是分配在特定内存区域中的Pascal式字符串。
BSTR pVal = SysAllocString(L"Yes");
Run Code Online (Sandbox Code Playgroud)
通常更好。
使用wcscmp在上有效BSTR,BSTR并确保以null终止。但是,将空终止的字符串分配给a BSTR并不是一个好计划。消耗的代码BSTR可能期望length字段位于第一个字符之前。
使用_bstr_tC ++包装器甚至可能是一个不错的计划BSTR。
它通常也比较好主意BSTR来BSTR,而不是用C的API; 一个BSTR可以包含嵌入式NUL,C API在第一个NUL处停止。
_bstr_t pVal = L"Yes";
bool val = pVal == _bstr_t(L"Yes");
Run Code Online (Sandbox Code Playgroud)
_bstr_t有一个operator==做合理的事情。