Expliziter Operator bool ohne Umwandlung
Wenn man eine Klasse entwirft, die eine explizite Konvertierung in bool hat, könnte man sich fragen, wo sie als boolescher Operator ohne explizite Umwandlung verwendet werden kann .
Kontextuelle Konvertierung in bool
Der C-Standard definiert bestimmte Szenarien, in denen ein Wert „kontextuell in bool konvertiert“ werden kann. Diese Situationen fallen in vier Hauptkategorien:
1. Anweisungen:
- if (t) /* Statement */;
- for (; t;) /* Statement */;
- while ( t) /* Anweisung */;
- do { /* block */ } while (t);
2. Ausdrücke:
- !t
- t && t2
- t || t2
- t ? „wahr“ : „falsch“
3. Tests zur Kompilierungszeit:
- static_assert(t);
- noexclusive(t)
- explicit(t)
- if constexpr (t)
4. Algorithmen und Konzepte:
- NullablePointer T
- std::remove_if(...)
- std::sort(...)
Vorbehalte bei Const- und Nicht-Const-Operatoren
Es ist erwähnenswert, dass eine Kombination aus Const- und Nicht-Const-Konvertierungsoperatoren zu Verwirrung führen kann. Weitere Informationen finden Sie in den folgenden Fragen:
- [Warum findet bei der kontextuellen Konvertierung keine explizite bool()-Konvertierung statt?](https://stackoverflow.com/questions/5580156/why- dont-explicit-bool-conversion-happen-in-contextual-conversion)
- [Warum ist der explizite Operator bool nicht wie erwartet wirksam?](https://stackoverflow.com/questions/26578447/why -does-the-explicit-operator-bool-not-in-effect-as-expected)
Das obige ist der detaillierte Inhalt vonWann funktioniert ein expliziter „Operator bool' ohne Casting in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
Stellungnahme:Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn