Algunos puntos de conocimiento sobre operadores

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
Tabla de precedencia de operadores de C ++
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=()。

Supongo que te gusta

Origin blog.csdn.net/kenfan1647/article/details/113817131
Recomendado
Clasificación