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
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=()。