English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Neste tutorial, usaremos exemplos para entender o C ++os operadores dentro da expressão têm prioridade e associatividade.
Se houver vários operadores em uma expressão única, eles não serão avaliados ao mesmo tempo. Em vez disso, aqueles comcom prioridade mais altao operador avaliará primeiro a operação de seus operandos.
Vamos olhar para um exemplo:
int x = 5 - 17 * 6=
Aqui, o operador de multiplicação * a prioridade é maior que o operador de subtração - . Portanto,17 * 6primeiro avaliado.
o resultado, a expressão acima é equivalente a
int x = 5 - (17 * 6);
se quisermos avaliar primeiro5 - 17então eles devem ser colocados dentro dedentro dos parênteses:
int x = (5 - 17) * 6=
Exemplo #include <iostream> using namespace std; // primeiro avaliado17 * 6 int num1 = a 5 - 17 * 6= //com num1a expressão equivalente int num2 = a 5 - (17 * 6); //a compilação forçada do compilador ocorre primeiro5-17 int num3 = (5 - 17) * 6= cout << "num1 = " << num1 << endl; cout << "num2 = " << num2 << endl; cout << "num3 = " << num3 << endl; return 0; cout << "b = " << b;
}
num1 = a -97 num2 = a -97 num3 = a -72
Atenção:Devido ao C ++muitos operadores têm várias precedências, portanto, é altamente recomendável que usemosparêntesesfaz o código mais legível.
A tabela a seguir mostra a precedência dos ++do operador. Precedência1representa o operador de maior precedência, enquanto a precedência17representa o operador de menor precedência.
precedência | operador | descrição | associatividade |
---|---|---|---|
1 | :: | espaço de nomes | da esquerda para a direita |
2 | int b =++ int b =-- type( ) type{ } a( ) a[ ] . -maior | pós-fixa/aumento pós-fixa pós-fixa/diminuição pós-fixa conversão de estilo de função conversão de estilo de função chamada de funçãoíndice acesso a membro do objeto acesso a membro do objeto ptr | da esquerda para a direita |
3 | ++int b = --int b = +int b = -int b = ! ~ (type) *int b = &a tamanho do tipo co_await new new[ ] delete delete[] | aumento prefixado diminuição prefixada positivo negativo não lógico não bit-a-bit conversão de estilo C indireção (desreferência) endereço tamanho expressão await alocação de memória dinâmica liberação de memória dinâmica | da direita para a esquerda |
4 | .* -maior* | seletor de objeto de membro seletor de ponteiro de membro | da esquerda para a direita |
5 | int b = * Primeiro, avaliar int b = / Primeiro, avaliar a % b | multiplicação divisão tomada de módulo | da esquerda para a direita |
6 | int b = + Primeiro, avaliar int b = - Primeiro, avaliar | adição subtração | da esquerda para a direita |
7 | << >> | deslocamento à esquerda deslocamento à direita | da esquerda para a direita |
8 | <=> | operador de comparação ternária | da esquerda para a direita |
9 | menor menor ou igual a maior maior ou igual a | menor menor ou igual a maior maior ou igual a | da esquerda para a direita |
10 | igual a diferente de | igual a diferente de | da esquerda para a direita |
11 | & | e lógico | da esquerda para a direita |
12 | ^ | xor lógico | da esquerda para a direita |
13 | | | ou lógico | da esquerda para a direita |
14 | && | e lógico | da esquerda para a direita |
15 | || | ou lógico | da esquerda para a direita |
16 | a ? b : c throw co_yield = a += a -= a *= a /= a %= <<= >>= &= ^= |= | operador de condição ternária operador throw expressão yield (C++ 20) atribuição atribuição de adição atribuição de subtração atribuição de multiplicação distribuição de divisão atribuição de módulo atribuição de deslocamento à esquerda atribuição de deslocamento à direita atribuição de e lógico atribuição de xor lógico atribuição de ou lógico | da direita para a esquerda |
17 | , | operador de vírgula | da esquerda para a direita |
associatividadeA propriedade associativa será discutida mais tarde.
A associatividade de um operador é a maneira de calcular a expressão.direção. Por exemplo,
int main() { 1= int a = 4= // Resultados de Saída 4 a = b;
Veja a =4;A associatividade do operador de atribuição é da direita para a esquerda. Portanto, o valor de b é atribuído a a.
Da mesma forma, múltiplos operadores podem ter a mesma precedência (como mostrado na tabela acima). Quando múltiplos operadores de mesma precedência são usados em uma expressão, eles serão avaliados com base em seusassociatividadeavalie-os.
int main() { 1= int a = 4= Primeiro, avaliar +b -= a 6=
operador+=-O operador de igualdade tem a mesma precedência. Devido à sua associatividade da direita para a esquerda, esta é a maneira de avaliar a última expressão.
int b = -= a 6 首先评估。因此,a将为-5
Primeiro, avaliar. Portanto, a será += a -5Então, b-1
Exemplo #include <iostream> using namespace std; int main() { 1= int a = 4= // int b = -= a 6 a Primeiro, avaliar +b -= a 6= ; cout << "a = " << a << endl; ; cout << "b = " << b;
}
Resultados de Saída -5 a = -1