#include <optional>
bool f() {
std::optional<int> opt;
return opt;
}
Kompiliert nicht: 'return': cannot convert from 'std::optional<int>' to 'bool'
Beratungsreferenz Ich hätte gedacht, eine Erklärung zu finden, aber ich habe sie gelesen, da es in Ordnung sein sollte.
Implizite Konvertierungen werden immer dann durchgeführt, wenn ein Ausdruck eines Typs T1 in einem Kontext verwendet wird, der diesen Typ nicht akzeptiert, aber einen anderen Typ T2 akzeptiert. bestimmtes:
- wenn der Ausdruck als Argument beim Aufrufen einer Funktion verwendet wird, die mit T2 als Parameter deklariert ist;
- wenn der Ausdruck als Operand mit einem Operator verwendet wird, der T2 erwartet;
- beim Initialisieren eines neuen Objekts vom Typ T2, einschließlich der return-Anweisung in einer Funktion, die T2 zurückgibt;
- wenn der Ausdruck in einer switch-Anweisung verwendet wird (T2 ist ein integraler Typ);
- wenn der Ausdruck in einer if-Anweisung oder einer Schleife verwendet wird (T2 ist bool).
operator bool()
vonstd::optional
istexplicit
.