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