PDA

View Full Version : [C++] funzioni inline


cisc
25-12-2003, 19:24
Qualcuno saprebbe spiegarmi quale differenze ci sono tra funzioni inline e funzioni "normali"??

grazie.

Luc@s
25-12-2003, 20:00
che la funzione inlline viene espansa.
Es:

inline int size()
{
return num;
}

int num;

int main()
{
int dim = size();
// diventa => int dim = num;
}


Inline è usato perche una chiamata a funzione è molto + dispendiosa rispetto ad una chiamata a variabile.
Cmq inline è molto usato nel discorso OOP.


Buon Natale

fek
25-12-2003, 20:24
Originariamente inviato da cisc
Qualcuno saprebbe spiegarmi quale differenze ci sono tra funzioni inline e funzioni "normali"??

grazie.

Dichiarare una funzione inline e' un "suggerimento" che si da' al compilatore; gli si richiede di sostituire il codice della funzione all'interno del codice che chiama la funzione stessa.

Ti faccio un esempio



class A
{
public:

int x;

inline int IncX(void) const
{
x += 1;
return x;
}
}

void main(void)
{
A a;

a.x = 0;
a.IncX();
}



Specificando IncX() come inline, si chiede al compilatore di omettere la chiamata al metodo e sostituirlo con il suo codice, quindi gli si chiede di produrre un codice di questo tipo:


void main(void)
{
A a;

a.x = 0;
a.x += 1;
}


Per funzioni particolarmente corte, il non chiamare una funzione corrisponde ad un'esecuzione piu' veloce. Inoltre nota come, sapendo che cosa accade "dentro" la funzione inline, proprio perche' e' inline quindi visibile durante la compilazione di main(), il compilatore puo' ulteriormente ottimizzare il codice di cui sopra e produrre direttamente:


void main(void)
{
A a;

a.x = 1;
}


Questo non sarebbe possibile (in generale) se il metodo A::IncX() non fosse inline.
Come ho detto e' solo un suggerimento che puo' essere (e spesso e') ignorato dal compilatore che effettua comunque la chiamata. Non c'e' alcun modo per garantire che una funzione sia espansa inline.

cisc
26-12-2003, 20:51
grazie ad entrambi, adesso ho capito:yeah: ;) ;)