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

时间:2019-03-21 17:55:00

标签: c++

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

BSTR pVal = L"Yes";

bool val = pVal == L"Yes" ? true : false;

此语句返回

 val = false;

我希望它在这里返回true。我做错了吗?

1 个答案:

答案 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");

通常更好。

使用wcscmpBSTR上有效,因为保证BSTR为空终止。但是,将空终止的字符串分配给BSTR并不是一个好计划。消耗BSTR的代码可能期望length字段位于第一个字符之前。

使用_bstr_t甚至是一个不错的计划,它是BSTR周围的C ++包装器。

比较BSTRBSTR而不使用C API通常也是个好主意; BSTR可以包含嵌入式NUL,C API在第一个NUL处停止。

_bstr_t pVal = L"Yes";

bool val = pVal == _bstr_t(L"Yes");

_bstr_t的{​​{1}}做的很合理。