Toimenpiteen tai operaattorin prioriteetti , arvosana tai vanhuus on operaattorin/operaation muodollinen ominaisuus, joka vaikuttaa sen suoritusjärjestykseen lausekkeessa, jossa on useita eri operaattoreita ilman nimenomaista (sulkeilla) ilmaisua järjestyksestä, jossa ne arvioidaan. Esimerkiksi kertolaskuoperaatiolle annetaan yleensä korkeampi prioriteetti kuin yhteenlaskuoperaatiolle, joten lauseke saa ensin tulon ja , ja sitten summan.
Operaatioilla voi olla sama prioriteetti, jolloin ne arvioidaan näille operaatioille määritetyn assosiatiivisuussäännön mukaisesti .
Muodallisissa järjestelmissä on kaksi tapaa asettaa minkä tahansa operaattorin etusija. Ensimmäinen on kaikkien operaattoreiden jakautuminen prioriteettihierarkian mukaan. Tätä menetelmää käytetään aina oletusprioriteettien asettamiseen ja se on kiinnitetty kielikuvaukseen sopimuksen muodossa, että sellaisille ja sellaisille operaattoreille määrätään sellaiset prioriteetit. Se ei saa heijastusta kielen syntaksissa, eli se ei käytä mitään eksplisiittisiä keinoja (= noita / muita symboleja) osoittamaan toiminnon prioriteettia.
Toinen menetelmä mahdollistaa oletusprioriteettien muuttamisen määrittämällä ne eksplisiittisesti käyttämällä hakasulkumerkkejä. Samanaikaisesti sisäkkäisyyden syvyys on suoraan verrannollinen prioriteettiarvoon, eli enemmän sisempiä sulkuja ilmaisee korkeampaa prioriteettia kuin niitä kehystävät ulommat. Edellisessä esimerkissä summalla ja tulolla laskentajärjestystä voidaan muuttaa suluilla kirjoittamalla koko lauseke näin: tai näin: .
Toimintojen tärkeysjärjestys on järjestys, jossa toiminnot suoritetaan lausekkeessa, edellyttäen, että lausekkeessa ei ole selkeää osoitusta toimintojen suoritusjärjestyksestä (sulkeilla).
Jos operaatioilla on sama prioriteetti, niin tällaisten toimintojen suoritusjärjestys määräytyy assosiatiivisuusominaisuuden mukaan.
Assosiatiivisuus on toimintojen suoritussuunta, jos operaatioilla on sama prioriteetti:
Prioriteetti | Operaatio | Assosiatiivisuus | Kuvaus |
---|---|---|---|
yksi | :: | vasemmalta oikealle | yksipuolinen resoluutiotoiminto |
[ ] | indeksointitoiminto | ||
() | pyöreät kiinnikkeet | ||
. | pääsyn rakenteen tai luokan jäseneen | ||
-> | rakenteen tai luokan jäsenen käyttäminen osoittimen kautta | ||
2 | ++ | vasemmalta oikealle | postfix lisäys |
— | postfix-vähennys | ||
3 | ++ | oikealta vasemmalle | etuliitteen lisäys |
— | etuliitteen vähennys | ||
neljä | * | vasemmalta oikealle | kertolasku |
/ | jako | ||
% | divisioonan loppuosa | ||
5 | + | vasemmalta oikealle | lisäys |
— | vähennyslasku | ||
6 | >> | vasemmalta oikealle | oikea vaihto |
<< | siirtyä vasemmalle | ||
7 | < | vasemmalta oikealle | Vähemmän |
<= | pienempi tai yhtä suuri | ||
> | lisää | ||
>= | suurempi tai yhtä suuri | ||
kahdeksan | == | vasemmalta oikealle | on yhtä suuri |
!= | ei tasa-arvoinen | ||
9 | && | vasemmalta oikealle | looginen JA |
kymmenen | || | vasemmalta oikealle | looginen TAI |
yksitoista | ?: | oikealta vasemmalle | ehdollinen toiminta (kolmiosainen toiminta) |
12 | = | oikealta vasemmalle | toimeksianto |
*= | kertolasku tehtävän kanssa | ||
/= | jako toimeksiannon kanssa | ||
%= | loput jaosta toimeksiannon kanssa | ||
+= | lisäys toimeksiannon kanssa | ||
-= | vähentäminen tehtävän kanssa | ||
13 | , | vasemmalta oikealle | pilkku |
Jos olet epävarma, käytä sulkeita. Joissakin tapauksissa operaattorin ensisijaisuudella voi olla implisiittisiä vaikutuksia. Harkitse esimerkkiä:
int n = 5 ; cout << n += 3 ;Huolimatta koodin ilmeisyydestä ihmiselle, kääntäjä tuottaa virheen: lausekkeessa rivillä 2 suoritetaan bittikohtaisen siirtooperaattori (<<) ensin. sen ensisijaisuus on 6 ja se on suurempi kuin summaus-osoitusoperaattorin (+=) 12 etusija. Tämän seurauksena muuttujan n arvo välitetään cout-virtaan, eikä +=-operaatiota suoritettu.