#include <optional>
bool f() {
std::optional<int> opt;
return opt;
}
无法编译: 'return': cannot convert from 'std::optional<int>' to 'bool'
咨询参考本来可以找到解释的,但我读了应该可以。
每当在上下文中使用某种类型T1的表达式但不接受该类型但接受某种其他类型的T2时,都会执行隐式转换。特别是:
- 当调用以T2作为参数声明的函数时,将表达式用作参数时;
- 当表达式用作期望T2的运算符的操作数时;
- 初始化类型为T2的新对象时,包括返回T2的函数中的return语句;
- 当在switch语句中使用该表达式时(T2是整数类型);
- 在if语句或循环中使用该表达式时(T2为bool)。
operator bool()
的std::optional
是explicit
。