在C 中使用三元运算符始终返回错误条件

Using ternary operator in c++ returns false condition always

本文关键字:运算符 三元 错误条件 返回      更新时间:2023-10-16

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

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

此语句返回

 val = false;

我希望它在这里返回。我会错吗?

这里很多是错误的。

BSTR上的==比较指针值。两个 L"Yes"是指定的指示。

bool_expr?true:false是一个noop。

bool val = wcscmp(pVal, L"Yes") == 0;

可能是您想要的。

BSTR pVal = L"Yes";

是坏消息;这不是您应该创建BSTR的方式。BSTR应该是在特定记忆区域中分配的帕斯卡式字符串。

BSTR pVal = SysAllocString(L"Yes");

通常更好。

使用wcscmpBSTR上有效,因为BSTR被保证终止。但是将无效的终止字符串分配给BSTR不是一个好计划。消耗BSTR的代码可能会期望长度字段出现在第一个字符之前。

使用_bstr_tBSTR周围的C 包装器。

通常也是一个好主意,将BSTRBSTR进行比较而不是使用C API。 BSTR可以包含嵌入式nul,而c apis停在第一个nul中。

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

_bstr_t有一个可以做合理的事情的operator==