Driftsprioritet

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 21. marts 2017; checks kræver 3 redigeringer .

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: .

Praksis med rangeringsoperationer

I C++

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.