【发布时间】:2020-05-30 03:47:39
【问题描述】:
#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)。
【问题讨论】:
-
“执行隐式转换”,但
std::optional中的operator bool()是explicit。
标签: c++ language-lawyer c++17 implicit-conversion