I denne opplæringen vil vi lære om forrang og tilknytning til operatører i C ++ ved hjelp av eksempler.
C ++ operatørens prioritet
Hvis det er flere operatorer i ett uttrykk, blir ikke operasjonene evaluert samtidig. Snarere får operatører med høyere prioritet først evaluert sin virksomhet.
La oss se på et eksempel:
int x = 5 - 17 * 6;
Her har multiplikasjonsoperatøren *
høyere prioritet enn subtraksjonsoperatøren -
. Derfor 17 * 6
blir behandlet først.
Som et resultat tilsvarer uttrykket ovenfor
int x = 5 - (17 * 6);
Hvis vi først vil evaluere 5 - 17
, må vi legge dem innenfor parentes :
int x = (5 - 17) * 6;
Eksempel 1: Operatørens forrang
#include using namespace std; int main() ( // evaluates 17 * 6 first int num1 = 5 - 17 * 6; // equivalent expression to num1 int num2 = 5 - (17 * 6); // forcing compiler to evaluate 5 - 17 first int num3 = (5 - 17) * 6; cout << "num1 = " << num1 << endl; cout << "num2 = " << num2 << endl; cout << "num3 = " << num3 << endl; return 0; )
Produksjon
num1 = -97 num2 = -97 num3 = -72
Merk: Fordi det er mange operatører i C ++ med flere forrangsnivåer, anbefales det sterkt at vi bruker parenteser for å gjøre koden vår mer lesbar.
C ++ operatørens prioritetstabell
Følgende tabell (hentet fra cppreference.com) viser forrang for C ++ -operatører. Prioritetsnivå 1 betyr operatører med høyest prioritet, mens Prioritetsnivå 17 betyr operatører med lavest prioritet.
Eiendommen til assosiativitet vil bli diskutert om kort tid.
Presedens | Operatør | Beskrivelse | Assosiativitet |
---|---|---|---|
1 | :: | Omfangsoppløsning | Venstre til høyre |
2 | a ++ a-- type () type () a () a () . -> | Suffiks / postfix inkrement Suffix / postfix decrement Funksjon cast Funksjon cast Funksjon samtale Abonnement Medlemstilgang fra et objekt Medlemstilgang fra objekt ptr | Venstre til høyre |
3 | ++ a --a + a -a ! ~ (type) * a & en størrelse på co_await nytt nytt () slett slett () | Prefikset inkrement prefikset dekrement enhetlige pluss enhetlige minus logiske IKKE bitvise IKKE C stil støpt indirekte (deferanseoperasjon) adresse-of Size-av avvente-ekspresjon dynamisk minnetildeling dynamisk minne deallokering | Høyre til venstre |
4 | . * -> * | Medlemsobjektvelger Medlemmepekervelger | Venstre til høyre |
5 | a * b a / b a% b | Multiplikasjon Division Modulus | Venstre til høyre |
6 | a + b a - b | Addisjon Subtraksjon | Venstre til høyre |
7 | << >> | Bitvis venstre skift Bitvis høyre skift | Venstre til høyre |
8 | <= < | Treveis sammenligningsoperatør | Venstre til høyre |
9 | < <= > > = | Mindre enn mindre enn eller lik større enn større enn eller lik | Venstre til høyre |
10 | == ! = | Like til Ikke lik | Venstre til høyre |
11 | & | Bitvis OG | Venstre til høyre |
12 | ^ | Bitvis XOR | Venstre til høyre |
1. 3 | | | Bitvis ELLER | Venstre til høyre |
14 | && | Logisk OG | Venstre til høyre |
15 | || | Logisk ELLER | Venstre til høyre |
16 | a? b: c kaste co_yield = + = - = * = / = % = << = >> = & = = | = | Ternary Betinget kastoperatørs avkastningsuttrykk (C ++ 20) Oppgave Addisjon Oppgave Subtraksjon Oppgave Multiplikasjon Oppgave Divisjon Oppgave Modulus Oppgave Bitvis Skift Venstre Oppgave Bitvis Skift Høyre Oppgave Bitvis OG Oppgave Bitvis XOR Oppgave Bitvis ELLER Oppgave | Høyre til venstre |
17 | , | Kommaoperatør | Venstre til høyre |
C ++ Operators Associativity
Operatørassosiativitet er retningen som et uttrykk vurderes fra. For eksempel,
int a = 1; int b = 4; // a will be 4 a = b;
Ta en titt på a = 4;
uttalelsen. Assosiativiteten til =
operatøren er fra høyre til venstre. Derfor blir verdien av b tilordnet a, og ikke i den andre retningen.
Flere operatører kan også ha samme prioritetsnivå (som vi kan se fra tabellen ovenfor). Når flere operatører av samme prioritetsnivå brukes i et uttrykk, blir de evaluert i henhold til deres assosiativitet .
int a = 1; int b = 4; b += a -= 6;
Både operatører +=
og -=
operatører har samme forrang. Siden assosiativiteten til disse operatørene er fra høyre til venstre, er det slik hvordan den siste utsagnet blir evaluert.
a -= 6
evalueres først. Derfor vil a være -5- Deretter
b += -5
vil bli evaluert. Derfor vil b være -1
Eksempel 2: Operatørers assosiativitet
#include using namespace std; int main() ( int a = 1; int b = 4; // a -= 6 is evaluated first b += a -= 6; cout << "a = " << a << endl; ; cout << "b = " << b; )
Produksjon
a = -5 b = -1