Toiminnan prioriteetti

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 21. maaliskuuta 2017 tarkistetusta versiosta . tarkastukset vaativat 3 muokkausta .

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

Luokitusoperaatioiden käytäntö

C++:ssa

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.