Logical operators
Retourne le résultat d'une opération booléenne.
| Nom de l'opérateur | Syntaxe | Surchargeable | Exemples de prototypes (pour class T ) | |
|---|---|---|---|---|
| Définition interne à la classe | Définition externe à la classe | |||
| Négation |
not a
! a |
Oui | bool T :: operator ! ( ) const ; | bool operator ! ( const T & a ) ; |
| ET |
a and b
a && b |
Oui | bool T :: operator && ( const T2 & b ) const ; | bool operator && ( const T & a, const T2 & b ) ; |
| OU inclusif |
a or b
a || b |
Oui | bool T :: operator || ( const T2 & b ) const ; | bool operator || ( const T & a, const T2 & b ) ; |
|
||||
Table des matières |
Explication
Les expressions d'opérateurs logiques ont la forme
!
rhs
|
(1) | ||||||||
lhs
&&
rhs
|
(2) | ||||||||
lhs
||
rhs
|
(3) | ||||||||
Si l'opérande n'est pas
bool
, il est converti en
bool
en utilisant la
conversion contextuelle en bool
: cela n'est valide que si la déclaration
bool t(arg)
est valide, pour un
t
temporaire inventé.
Le résultat est une bool prvalue.
Pour l'opérateur logique NON intégré, le résultat est true si l'opérande est false . Sinon, le résultat est false .
Pour l'opérateur logique ET intégré, le résultat est true si les deux opérandes sont true . Sinon, le résultat est false . Cet opérateur utilise l'évaluation court-circuit : si le premier opérande est false , le second opérande n'est pas évalué.
Pour l'opérateur logique OR intégré, le résultat est true si le premier ou le second opérande (ou les deux) est true . Cet opérateur est à court-circuit : si le premier opérande est true , le second opérande n'est pas évalué.
Notez que les opérateurs logiques bit à bit n'effectuent pas d'évaluation court-circuit.
Résultats
| a | true | false |
|---|---|---|
| ! a | false | true |
| and | a | ||
|---|---|---|---|
| true | false | ||
| b | true | true | false |
| false | false | false | |
| or | a | ||
|---|---|---|---|
| true | false | ||
| b | true | true | true |
| false | true | false | |
` pour le code C++)
2. Les termes C++ (`or`, `true`, `false`, `a`, `b`) ne doivent pas être traduits
3. La structure HTML et les attributs sont conservés intacts
Dans le cadre de la résolution de surcharge pour les opérateurs définis par l'utilisateur , les signatures de fonctions intégrées suivantes participent à la résolution de surcharge :
|
bool
operator
!
(
bool
)
|
||
|
bool
operator
&&
(
bool
,
bool
)
|
||
|
bool
operator
||
(
bool
,
bool
)
|
||
`, `
` et `
Exemple
#include <iostream> #include <sstream> #include <string> int main() { int n = 2; int* p = &n; // les pointeurs sont convertibles en bool if ( p && *p == 2 // "*p" peut être utilisé sans risque après "p &&" || !p && n != 2) // || a une précédence inférieure à && std::cout << "true\n"; // les flux sont également convertibles en bool std::stringstream cin; cin << "3...\n" << "2...\n" << "1...\n" << "quit"; std::cout << "Entrez 'quit' pour quitter.\n"; for (std::string line; std::cout << "> " && std::getline(cin, line) && line != "quit";) std::cout << line << '\n'; }
Sortie :
true Entrez 'quit' pour quitter. > 3... > 2... > 1... >
Bibliothèque standard
En raison du fait que les propriétés de court-circuit de
operator&&
et
operator||
ne s'appliquent pas aux surcharges, et parce que les types avec une sémantique booléenne sont rares, seules deux classes de la bibliothèque standard surchargent ces opérateurs :
|
applique un opérateur arithmétique unaire à chaque élément du valarray
(fonction membre publique de
std::valarray<T>
)
|
|
|
applique des opérateurs binaires à chaque élément de deux valarrays, ou d'un valarray et d'une valeur
(fonction template) |
|
|
vérifie si une erreur s'est produite (synonyme de
fail()
)
(fonction membre publique de
std::basic_ios<CharT,Traits>
)
|
Voir aussi
|
objet fonction implémentant
x
&&
y
(modèle de classe) |
|
|
objet fonction implémentant
x
||
y
(modèle de classe) |
|
|
objet fonction implémentant
!
x
(modèle de classe) |
| Opérateurs courants | ||||||
|---|---|---|---|---|---|---|
| affectation |
incrémentation
décrémentation |
arithmétique | logique | comparaison |
accès
membre |
autre |
|
a
=
b
|
++
a
|
+
a
|
!
a
|
a
==
b
|
a
[
...
]
|
appel de fonction
a ( ... ) |
|
virgule
a, b |
||||||
|
conditionnel
a ? b : c |
||||||
| Opérateurs spéciaux | ||||||
|
static_cast
convertit un type en un autre type apparenté
|
||||||
|
Documentation C
pour
Opérateurs logiques
|