Upload
nikola-andjelic
View
54
Download
6
Embed Size (px)
Citation preview
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
&(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
|=<<=>>=
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