3
Prioriteti i asocijativnost operatora Operatori su hijerarhijski grupirani prema svojem prioritetu. Operatori višeg prioriteta izvršavaju se prije operatora nižeg prioriteta. Najviši prioritet imaju operatori prioriteta 1, zatim slijede oni prioriteta 2 itd. (vidi tabelu). Asocijativnost govori kako se grupiraju operandi oko operatora istog prioriteta. Može biti lijeva ili desna. Kod lijeve asocijativnosti operandi se grupiraju s lijeva na desno, a kod desne asocijativnosti s desna na lijevo. Na primjer, 1 + 2 * 3 + 4 = 11 budući da oerator množenja ima viši prioritet pa se izračunava kao 1 + (2 * 3) + 4 Ako ulančamo operatore istog prioriteta, kao na primjer ovdje, 1 + 2 - 3 + 4 onda odlučuje asocijativnost koja je kod aritmetičkih operatora lijeva: operandi se dakle grupiraju oko operatora s lijeva na desno: 1 + 2 - 3 + 4 = ( ( ( 1 + 2) - 3 ) + 4 = 4 Prioritet Operator Opis Primjer Asocijativnost 1 :: Operator dosega Class::var = 2; lijeva 2 () [] -> . ++ -- typeid static_cast<tip> dynamic_cast<tip> const_cast<tip> reinterpret_cast<tip> op. grupiranja, funkcijski poziv dohvat elementa polja operator dohvata operator dohvata Post-inkrement Post-dekrement Identifikacija tip Statička konverzija Dinamička konverzija Const konverzija Neprovjeravana konverzija (a + b) / 4; f(3); array[4] = 2; ptr->age = 34; obj.age = 34; for( i = 0; i < 10; i++ ) ... for( i = 10; i > 0; i-- ) ... typeid(tip) typeid(izraz) static_cast<tip>(izraz) dynamic_cast<tip>(izraz) const_cast<tip>(izraz) reinterpret_cast<tip>(izraz) lijeva lijeva lijeva lijeva lijeva lijeva desna desna desna desna desna 3 ! ~ ++ -- - + * Logička negacija Bit-komplement Pre-inkrement Pre-dekrement Unarni minus Unarni plus Dereferenciranje if( !done ) ... flags = ~flags; for( i = 0; i < 10; ++i ) ... for( i = 10; i > 0; --i ) ... int i = -1; int i = +1; data = *ptr; desna C++ Operator Precedence http://web.math.pmf.unizg.hr/nastava/opepp/Ch1/prioriteti-asoc.html 1 od 3 23.11.2013. 2:23

C++ Operator Precedence

Embed Size (px)

Citation preview

Page 1: C++ Operator Precedence

Prioriteti i asocijativnost operatora

Operatori su hijerarhijski grupirani prema svojem prioritetu. Operatori višeg prioriteta izvršavaju se prijeoperatora nižeg prioriteta. Najviši prioritet imaju operatori prioriteta 1, zatim slijede oni prioriteta 2 itd.(vidi tabelu).

Asocijativnost govori kako se grupiraju operandi oko operatora istog prioriteta. Može biti lijeva ili desna.Kod lijeve asocijativnosti operandi se grupiraju s lijeva na desno, a kod desne asocijativnosti s desna nalijevo.

Na primjer,

1 + 2 * 3 + 4 = 11

budući da oerator množenja ima viši prioritet pa se izračunava kao

1 + (2 * 3) + 4

Ako ulančamo operatore istog prioriteta, kao na primjer ovdje,

1 + 2 - 3 + 4

onda odlučuje asocijativnost koja je kod aritmetičkih operatora lijeva: operandi se dakle grupiraju okooperatora s lijeva na desno:

1 + 2 - 3 + 4 = ( ( ( 1 + 2) - 3 ) + 4 = 4

Prioritet Operator Opis Primjer Asocijativnost

1 :: Operator dosega Class::var = 2; lijeva

2

()[]->.++--typeidstatic_cast<tip>dynamic_cast<tip>const_cast<tip>reinterpret_cast<tip>

op. grupiranja,funkcijski pozivdohvat elementa poljaoperator dohvataoperator dohvataPost-inkrementPost-dekrementIdentifikacija tipStatička konverzijaDinamička konverzijaConst konverzijaNeprovjeravanakonverzija

(a + b) / 4; f(3);array[4] = 2;ptr->age = 34;obj.age = 34;for( i = 0; i < 10; i++ ) ...for( i = 10; i > 0; i-- ) ...typeid(tip) typeid(izraz)static_cast<tip>(izraz)dynamic_cast<tip>(izraz)const_cast<tip>(izraz)reinterpret_cast<tip>(izraz)

lijevalijevalijevalijevalijevalijevadesnadesnadesnadesnadesna

3

!~++---+*

Logička negacijaBit-komplementPre-inkrementPre-dekrementUnarni minusUnarni plusDereferenciranje

if( !done ) ...flags = ~flags;for( i = 0; i < 10; ++i ) ...for( i = 10; i > 0; --i ) ...int i = -1;int i = +1;data = *ptr;

desna

C++ Operator Precedence http://web.math.pmf.unizg.hr/nastava/opepp/Ch1/prioriteti-asoc.html

1 od 3 23.11.2013. 2:23

Page 2: C++ Operator Precedence

&(type)sizeofnewdeletedelete []

Adresni operatorEksplicitna konverzijaVeličina tipadinamička alokacijadinamička dealokacijadinamička dealokacija

address = &obj;int i = (int) floatNum;int size = sizeof(floatNum);int * pi = new int(1); int *pj= new int[10]();delete pi;delete [] pj;

4->*.*

Složeni operatordohvataSloženi operatordohvata

ptr->*var = 24;obj.*var = 24;

lijeva

5*/%

MnoženjeDijeljenjeModulo

int i = 2 * 4;float f = 10 / 3;int rem = 4 % 3;

lijeva

6+-

ZbrajanjaOduzimanje

int i = 2 + 3;int i = 5 - 1;

lijeva

7<<>>

Lijevi pomakDesni pomak

int flags = 33 << 1;int flags = 33 >> 1;

lijeva

8

<<=>>=

ManjeManje ili jednakoVećeVeće ili jednako

if( i < 42 ) ...if( i <= 42 ) ...if( i > 42 ) ...if( i >= 42 ) ...

lijeva

9==!=

Jednako(uspoređivanje)Različito(uspoređivanje)

if( i == 42 ) ...if( i != 42 ) ...

lijeva

10 & I bit-po-bit flags = flags & 42; lijeva

11 ^Isključivo ILI (XOR)bit-po-bit

flags = flags ^ 42; lijeva

12 | ILI bit-po-bit flags = flags | 42; lijeva

13 && Logičko Iif( conditionA &&conditionB ) ...

lijeva

14 || Logičko ILIif( conditionA || conditionB) ...

lijeva

15 ? :Ternarni operator(if-then-else)

int i = (a > b) ? a : b; desna

16

=+=-=*=/=%=&=^=

Operator pridruživanjaZbrajanje ipridruživanjeOduzimanje ipridruživanjeMnoženje ipridruživanjeDijeljenje i

int a = b;a += 3;b -= 4;a *= 5;a /= 2;a %= 3;flags &= new_flags;flags ^= new_flags;

desna

C++ Operator Precedence http://web.math.pmf.unizg.hr/nastava/opepp/Ch1/prioriteti-asoc.html

2 od 3 23.11.2013. 2:23

Page 3: C++ Operator Precedence

|=<<=>>=

pridruživanjeModulo i pridruživanjeI bit-po-bit ipridruživanjeXOR bit-po-bit ipridruživanjeOR bit-po-bit ipridruživanjeLijevi pomak ipridruživanjeDesni pomak i ipridruživanje

flags |= new_flags;flags <<= 2;flags >>= 2;

17 throw Izbacivanje iznimke throw "Fatal error!" desna

18 ,Operatorsekvencijalnogizračunavanja

for( i = 0, j = 0; i < 10; i++,j++ ) ...

lijeva

C++ Operator Precedence http://web.math.pmf.unizg.hr/nastava/opepp/Ch1/prioriteti-asoc.html

3 od 3 23.11.2013. 2:23