C ++ Operatørens prioritet og tilknytning

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 * 6blir 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 -= 6evalueres først. Derfor vil a være -5
  • Deretter b += -5vil 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

Interessante artikler...