Alguns pontos de conhecimento sobre operadores

1. Você pode usar palavras-chave em vez de operadores lógicos:

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

 2. C ++ não estipula claramente a ordem de avaliação das expressões. Não pode ser assumido que as expressões são avaliadas da esquerda para a direita. Para evitar resultados de execução estranhos, evite ler e escrever o mesmo objeto na mesma expressão ao mesmo tempo ( como evitar escrever v [i] = i ++ este tipo de código).

3. O operador vírgula, AND lógico (&&), OR lógico (||) estipula que o operando em seu lado esquerdo é avaliado primeiro.

  • A forma geral do operador vírgula é: expressão 1, expressão 2. O processo de avaliação consiste em avaliar os valores de duas expressões separadamente e usar o valor da expressão 2 como o valor de toda a expressão da vírgula. (Como: y = (x = a + b), (b + c);)
  • && só irá avaliar o valor à direita quando o resultado da avaliação do operando à esquerda for verdadeiro
  • || O valor do lado direito será avaliado apenas quando o resultado da avaliação do lado esquerdo for falso
Tabela de precedência do operador C ++
prioridade Operador Descrição Associatividade
1 :: Resolução de escopo Da esquerda para a direita
2 ++ - Sufixo auto-incremento / sufixo auto-decremento
() colchetes
[] Subscrito de matriz
. Seleção de membros (objeto)
-> Seleção de membro (ponteiro)
3 ++ - Aumento / diminuição do prefixo Direita para esquerda
+ - Adicionar / subtrair
! ~ Negação lógica / negação bit a bit
(modelo) Conversão de tipo forçada
* Pegue o valor apontado pelo ponteiro
E Endereço de fulano de tal
tamanho de O tamanho de fulano
novo novo[] Alocação de memória dinâmica / alocação de memória de matriz dinâmica
deletar, deletar [] Liberação de memória dinâmica / liberação de memória de matriz dinâmica
4 . * -> * Seleção de objeto de membro / seleção de ponteiro de membro Da esquerda para a direita
5 * /% Multiplicação / Divisão / Restante
6 + - Mais menos
7 << >> Mudança de bit para a esquerda / mudança de bit para direita
8 <<= Menor que / menor ou igual a
>> = Maior que / maior que ou igual
9 ==! = Igual / diferente
10 E Bit a bit e
11 ^ XOR bit a bit
12 | Bitwise ou
13 && Operação E
14 || Operação OR
15 ?: Operador ternário Direita para esquerda
16 = Atribuição
+ = - = Atribuição após adição / Atribuição após subtração
* = / =% = Atribuição após multiplicação / Atribuição após divisão / Atribuição após levar o restante
<< = >> = Atribuição de deslocamento de bit à esquerda / Atribuição de deslocamento de bit à direita
& = ^ = | = Atribuição após operação E bit a bit / Atribuição OU bit a bit exclusivo após operação bit a bit / Atribuição após operação OR bit a bit
17 lançar Lançar uma exceção
18 , vírgula Da esquerda para a direita

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

Acho que você gosta

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