在C 中使用三元运算符始终返回错误条件
Using ternary operator in c++ returns false condition always
我正在使用带有三元运算符的语句,该语句始终返回另一个值。
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");
通常更好。
使用wcscmp
在BSTR
上有效,因为BSTR
被保证终止。但是将无效的终止字符串分配给BSTR
不是一个好计划。消耗BSTR
的代码可能会期望长度字段出现在第一个字符之前。
使用_bstr_t
是BSTR
周围的C 包装器。
通常也是一个好主意,将BSTR
与BSTR
进行比较而不是使用C API。 BSTR
可以包含嵌入式nul,而c apis停在第一个nul中。
_bstr_t pVal = L"Yes";
bool val = pVal == _bstr_t(L"Yes");
_bstr_t
有一个可以做合理的事情的operator==
。
相关文章:
- 三元运算符和 if constexpr
- 在 c++ 中三元运算符中不允许继续(关键字)吗?
- 三元运算符在返回语句中给出意外的结果
- Boost Spirit x3 条件(三元)运算符解析器
- 递归中三元运算符的奇怪行为
- 如何在三元条件运算符中添加换行符和连接? :在 C++ 中
- 错误:三元运算符无法在对象中正常工作"cout"
- 是否允许三元运算符在C++中计算两个操作数?
- 有条件地选择带有 decltype() 和三元运算符的类型
- 三元运算符在C++中的意外行为
- 有没有办法将 for 循环结果返回到像三元运算符这样的函数中?
- 变量值,在三元运算符之后
- 是否可以在C++中使用三元运算符在 if 语句中选择比较运算符?
- c++中的增量和三元运算符优先级
- C++中三元运算符的意外行为
- 用于返回开关的三元运算符
- 替换模板元编程中的三元运算符
- 三元运算符 '?:' 在 4.9.0 之前的 GCC 版本中推断出不正确的类型?
- 在 std::map 上使用三元运算符和 std::更大的附加参数
- C++中的三元条件运算符问题