无需强制转换的显式运算符 bool
在设计一个显式转换为 bool 的类时,人们可能想知道在没有显式强制转换的情况下它可以在哪里用作布尔值.
上下文转换为 bool
C 标准定义了值可以“根据上下文转换为 bool”的特定场景。这些情况分为四大类:
1。语句:
- if (t) /* 语句 */;
- for (; t;) /* 语句 */;
- while ( t) /* 语句 */;
- do { /* 块 */ } while (t);
2.表达式:
- !t
- t && t2
- t || t2
- t ? “真”:“假”
3.编译时测试:
- static_assert(t);
- noexcept(t)
- explicit(t)
- if constexpr (t)
4。算法和概念:
- NullablePointer T
- std::remove_if(...)
- std::sort(...)
常量和非常量运算符的注意事项
值得注意的是,常量和非常量转换运算符的组合可能会导致混乱。请参阅以下相关问题了解更多信息:
- [上下文转换中为什么没有发生显式 bool() 转换?](https://stackoverflow.com/questions/5580156/why- doest-explicit-bool-conversion-happen-in-contextual-conversion)
- [为什么显式运算符 bool 没有按预期生效?](https://stackoverflow.com/questions/26578447/why -显式运算符布尔未按预期生效)
以上是在 C 中,何时显式'operator bool”无需强制转换即可工作?的详细内容。更多信息请关注PHP中文网其他相关文章!