and, && (C++)
Remonter à Liste alphabétique des mots clés - Index
Category
Représentations alternatives de tokens (C++), Opérateurs (C++)
Syntaxe
Description
L'opérateur and est une représentation alternative de l'opérateur && (AND logique ou binaire).
i les deux opérandes ont la valeur true, le résultat a la valeur true. Sinon, le résultat a la valeur false. Les deux opérandes sont implicitement convertis en bool et le type du résultat est bool.
A l'inverse de l'opérateur & (AND bit-à-bit), l'opérateur && garantit une évaluation gauche-à-droite des opérandes. Si l'opérande gauche est évalué à 0 (ou false), l'opérande droite n'est pas évalué.
Les opérateurs and et && sont des opérateurs court-circuits (c'est-à-dire que le second opérande n'est pas évalué si le premier est évalué à false). Ainsi, c'est à la fois correct et fiable de tester un pointeur null, comme dans l'exemple suivant :
Afin d'utiliser l'opérateur and, vous devez activer l'option Activer les nouveaux noms d'opérateur (le commutateur -Vn du compilateur, disponible sur la page Compatibilité de la boîte de dialogue Projet > Options).
Exemple de and
bool test( int * p ) {
return (p != 0) and (*p > 5);
}
Substituer && à and est également valide.
Surcharger && ou and
Vous pouvez surcharger l'opérateur && ainsi que la représentation alternative, and. N'oubliez pas que, quand l'opérateur est surchargé, la logique n'est pas court-circuitée, et que le test du pointeur vide n'est pas fiable. Voici un exemple illustrant comment surcharger and :
struct example { bool operator and ( const example & ) {return true;}// same as operator &&}
Utilisation de && dans les références rvalue
En tant que partie du nouveau standard C++11, C++Builder prend en charge maintenant les références rvalue. En référence rvalue est formée en plaçant un && (mais pas un and) après un type dans une déclaration, comme suit :
Apt a;
Apt&& a_ref1 = a;
Une différence majeure entre la référence lvalue familière et la nouvelle référence rvalue est que les références rvalue peuvent être liées à un temporaire (c'est-à-dire un rvalue), mais une référence lvalue (au moins une qui n'est pas un const) ne peut pas être liée à un rvalue.