Quelques connaissances sur les opérateurs

1. Vous pouvez utiliser des mots clés au lieu d'opérateurs logiques:

#define debug qDebug()<<
int main(int argc, char *argv[])
{
    debug (true and false);
}

 2. C ++ ne stipule pas clairement l'ordre d'évaluation des expressions. On ne peut pas supposer que les expressions sont évaluées de gauche à droite. Afin d'éviter des résultats étranges, évitez de lire et d'écrire le même objet dans la même expression en même temps ( comme éviter d'écrire v [i] = i ++ ce type de code).

3. L'opérateur virgule, ET logique (&&), OU logique (||) stipule que l'opérande sur leur côté gauche est évalué en premier.

  • La forme générale de l'opérateur virgule est: expression 1, expression 2. Le processus d'évaluation consiste à évaluer les valeurs de deux expressions séparément et à utiliser la valeur de l'expression 2 comme valeur de l'expression virgule entière. (Tels que: y = (x = a + b), (b + c);)
  • && n'évaluera la valeur de droite que lorsque le résultat de l'évaluation de l'opérande de gauche est vrai
  • || La valeur sur le côté droit ne sera évaluée que lorsque le résultat de l'évaluation sur le côté gauche est faux
Table de priorité des opérateurs C ++
priorité Opérateur Description Associativité
1 :: Résolution de la portée De gauche à droite
2 ++ - Incrémentation automatique du suffixe / Décrémentation automatique du suffixe
() supports
[] Indice du tableau
. Sélection de membres (objet)
-> Sélection de membres (pointeur)
3 ++ - Incrément de préfixe / décrément de préfixe De droite à gauche
+ - Ajouter / soustraire
! ~ Négation logique / négation au niveau du bit
(taper) Conversion de type forcée
* Prendre la valeur pointée par le pointeur
& Tel et tel adresse
taille de La taille d'untel
Nouveau nouveau[] Allocation de mémoire dynamique / allocation de mémoire de matrice dynamique
supprimer, supprimer [] Libération de mémoire dynamique / Libération de mémoire de matrice dynamique
4 . * -> * Sélection d'objet membre / sélection de pointeur de membre De gauche à droite
5 * /% Multiplication / Division / Reste
6 + - Plus moins
7 << >> Décalage de bits à gauche / Décalage de bits à droite
8 <<= Inférieur / inférieur ou égal à
>> = Supérieur / supérieur ou égal
9 ==! = Égal / différent de
dix & Bitwise et
11 ^ XOR au niveau du bit
12 | Bitwise ou
13 && ET opération
14 || Opération OU
15 ?: Opérateur ternaire De droite à gauche
16 = Mission
+ = - = Affectation après addition / Affectation après soustraction
* = / =% = Affectation après multiplication / Affectation après division / Affectation après avoir pris le reste
<< = >> = Affectation de décalage de bit à gauche / Affectation de décalage de bit à droite
& = ^ = | = Affectation après opération ET bit à bit / Affectation OU exclusif bit à bit après opération bit à bit / Affectation après opération OR bit à bit
17 lancer Lancer une exception
18 , virgule De gauche à droite

 4、一些运算符可以重载:

5、重载函数形式是:operator后面加运算符,a+b相当于a.operator+(b)

6、预置含义:++a等价于a+=1和a=a+1,但不适用于此规则, 编译器不会根据A::operator+()和A::operator=()生成::operator+=()的定义。一个类默认带有赋值运算、取地址运算、顺序(逗号)运算的含义的,可以选择去除这些含义:

#define debug qDebug()<<
struct ceshi
{
    int frist;
    int second;
    ceshi(int one = 0,int two = 0):frist{one},second{two}
    {
    }
    void operator =(const ceshi&) = delete;
    void operator &() = delete;
    void operator ,(const ceshi&) = delete;
};

int main(int argc, char *argv[])
{
    ceshi a(4,5);
    ceshi b = a;
    a = b;
    &a;
    a,b;
}

注:ceshi b = a;是调用(拷贝/移动)构造函数而不是operator=()。

Je suppose que tu aimes

Origine blog.csdn.net/kenfan1647/article/details/113817131
conseillé
Classement