1. Puede utilizar palabras clave en lugar de operadores lógicos:
#define debug qDebug()<<
int main(int argc, char *argv[])
{
debug (true and false);
}
2. C ++ no estipula claramente el orden de evaluación de las expresiones. No se puede suponer que las expresiones se evalúan de izquierda a derecha. Para evitar resultados de ejecución extraños, evite leer y escribir el mismo objeto en la misma expresión al mismo tiempo ( como evitar escribir v [i] = i ++ este tipo de código).
3. El operador de coma, Y lógico (&&), O lógico (||) estipula que el operando en su lado izquierdo se evalúa primero.
- La forma general del operador de coma es: expresión 1, expresión 2. El proceso de evaluación consiste en evaluar los valores de dos expresiones por separado y utilizar el valor de la expresión 2 como el valor de toda la expresión de coma. (Por ejemplo: y = (x = a + b), (b + c);)
- && solo evaluará el valor de la derecha cuando el resultado de la evaluación del operando de la izquierda sea verdadero
- || El valor del lado derecho se evaluará solo cuando el resultado de la evaluación del lado izquierdo sea falso
prioridad | Operador | Descripción | Asociatividad |
---|---|---|---|
1 | :: | Resolución de alcance | De izquierda a derecha |
2 | ++ - | Auto-incremento de sufijo / auto-decremento de sufijo | |
() | soportes | ||
[] | Subíndice de matriz | ||
. | Selección de miembros (objeto) | ||
-> | Selección de miembros (puntero) | ||
3 | ++ - | Incremento de prefijo / decremento de prefijo | De derecha a izquierda |
+ - | Sumar / restar | ||
! ~ | Negación lógica / negación bit a bit | ||
(escribe) | Conversión de tipo forzada | ||
* | Toma el valor señalado por el puntero | ||
Y | La dirección de tal y tal | ||
tamaño de | El tamaño de fulano de tal | ||
nuevo nuevo[] | Asignación de memoria dinámica / asignación de memoria de matriz dinámica | ||
eliminar, eliminar [] | Liberación de memoria dinámica / liberación de memoria de matriz dinámica | ||
4 | . * -> * | Selección de objeto de miembro / selección de puntero de miembro | De izquierda a derecha |
5 | * /% | Multiplicación / División / Resto | |
6 | + - | Mas menos | |
7 | << >> | Desplazamiento de bits a la izquierda / Desplazamiento de bits a la derecha | |
8 | <<= | Menor que / menor que o igual a | |
>> = | Mayor que / mayor que o igual | ||
9 | ==! = | Igual / no igual | |
10 | Y | Bit a bit y | |
11 | ^ | XOR bit a bit | |
12 | | | Bit a bit o | |
13 | && | Y operación | |
14 | || | O operación | |
15 | ?: | Operador ternario | De derecha a izquierda |
dieciséis | = | Asignación | |
+ = - = | Asignación después de la suma / Asignación después de la resta | ||
* = / =% = | Tarea después de la multiplicación / Tarea después de la división / Tarea después de tomar el resto | ||
<< = >> = | Asignación de desplazamiento de bits a la izquierda / Asignación de desplazamiento de bits a la derecha | ||
& = ^ = | = | Asignación después de operación AND bit a bit / Asignación OR exclusiva bit a bit después de operación bit a bit / Asignación después de operación OR bit a bit | ||
17 | lanzar | Lanzar una excepción | |
18 | , | coma | De izquierda a derecha |
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=()。