在C ++中使用三元运算符总是返回错误条件

S.F*_*rrd -2 c++

我正在使用带有三元运算符的语句,该语句始终返回其他值。

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。我做错了吗?

Yak*_*ont 5

这里有很多地方是错误的。

==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在上有效BSTRBSTR并确保以null终止。但是,将空终止的字符串分配给a BSTR并不是一个好计划。消耗的代码BSTR可能期望length字段位于第一个字符之前。

使用_bstr_tC ++包装器甚至可能是一个不错的计划BSTR

它通常也比较好主意BSTRBSTR,而不是用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==做合理的事情。