Prioritet , rang eller anciennitet for en operation eller operatør er en formel egenskab tilhørende en operatør/operation, der påvirker rækkefølgen af dens udførelse i et udtryk med flere forskellige operatører i mangel af en eksplicit (ved hjælp af parentes) angivelse af den rækkefølge, hvori de bliver vurderet. For eksempel er multiplikationsoperationen normalt prioriteret højere end additionsoperationen, så udtrykket vil først modtage produktet og , og derefter summen.
Operationer kan have samme forrang, i hvilket tilfælde de evalueres i henhold til associativitetsreglen, der er fastsat for disse operationer.
I formelle systemer er der to måder at sætte forrang for enhver operatør på. Den første er fordelingen af alle operatører i henhold til prioritetshierarkiet. Denne metode bruges altid til at sætte standardprioriteter og er fastlagt i sprogbeskrivelsen i form af en aftale om, at sådanne og sådanne operatører tildeles sådanne og sådanne prioriteter. Det modtager ikke nogen refleksion i sprogets syntaks, det vil sige, det bruger ikke nogen eksplicitte midler (= disse / andre symboler) til at angive prioriteten af operationen.
Den anden metode gør det muligt at ændre standardprioriteterne ved eksplicit at angive dem ved hjælp af parrede parentestegn. Samtidig er rededybden direkte proportional med prioritetsværdien, det vil sige, at flere indre parenteser indikerer en højere prioritet end ydre, der rammer dem. I det foregående eksempel med summen og produktet kan udregningsrækkefølgen ændres ved hjælp af parenteser, og hele udtrykket skrives således: eller sådan: .
Forrangen af operationer er den rækkefølge, hvori operationer udføres i udtrykket, forudsat at der ikke er nogen eksplicit indikation af rækkefølgen, hvori operationer udføres i udtrykket (ved hjælp af parenteser).
Hvis operationer har samme prioritet, bestemmes rækkefølgen for udførelse af sådanne operationer i henhold til associativitetsegenskaben.
Associativitet er retningen for udførelse af operationer, hvis operationerne har samme prioritet:
En prioritet | Operation | Associativitet | Beskrivelse |
---|---|---|---|
en | :: | fra venstre mod højre | unær scope resolution operation |
[ ] | indekseringsoperation | ||
() | runde beslag | ||
. | adgang til et medlem af en struktur eller klasse | ||
-> | adgang til et medlem af en struktur eller klasse gennem en markør | ||
2 | ++ | fra venstre mod højre | postfix stigning |
— | postfix nedsættelse | ||
3 | ++ | fra højre mod venstre | præfiks stigning |
— | præfiks dekrement | ||
fire | * | fra venstre mod højre | multiplikation |
/ | division | ||
% | resten af divisionen | ||
5 | + | fra venstre mod højre | tilføjelse |
— | subtraktion | ||
6 | >> | fra venstre mod højre | højre skift |
<< | skifte til venstre | ||
7 | < | fra venstre mod højre | mindre |
<= | mindre end eller lig | ||
> | mere | ||
>= | større end eller lig | ||
otte | == | fra venstre mod højre | lige med |
!= | ikke lige | ||
9 | && | fra venstre mod højre | logisk OG |
ti | || | fra venstre mod højre | logisk ELLER |
elleve | ?: | fra højre mod venstre | betinget drift (ternær drift) |
12 | = | fra højre mod venstre | opgave |
*= | multiplikation med opgave | ||
/= | division med opgave | ||
%= | resten af divisionen med opgave | ||
+= | tilføjelse med opgave | ||
-= | subtraktion med opgave | ||
13 | , | fra venstre mod højre | komma |
I tvivlstilfælde skal der bruges parentes. I nogle tilfælde kan operatørernes forrang have implicitte virkninger. Overvej et eksempel:
int n = 5 ; cout << n += 3 ;På trods af åbenbarheden af koden for et menneske, vil compileren generere en fejl: I udtrykket på linje 2 vil den bitvise skiftoperator (<<) blive udført først. dens forrang er 6, og den er højere end forrangen af additionstildelingsoperatoren (+=) 12. Som et resultat vil værdien af variablen n blive videregivet til cout-strømmen, og +=-operationen vil ikke være udført.