|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: May 2001
Città: Milano
Messaggi: 3197
|
[C++]Inline
Raga non riesco a capire a cosa serve e come si usa la INLINE
Chi mi può spiegare in poche parole a cosa serve e come si usa con un piccolo esempio comprensibile?? Grazie in anticipo |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
inline e' un "invito" che fai al compilatore nel trattare una funzione.
Gli chiedi in particolare di sostituire una chiamata a una funzione (quella dichiarata inline) con il codice della funzione stessa. A fronte di una dimensione maggiore dell'eseguibile riduci il (piccolo) overhead dovuto alla chiamata a una funzione. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: May 2001
Città: Milano
Messaggi: 3197
|
ma il codice della funzione lo metto nel prototipo?
es: inline float cubo(float s) { return s*s*s;} Perchè la definizione della funzione la mette dove c'è il prototipo?? |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
Quote:
per le funzioni inline puoi farlo, anzi mi sembra che anche se non la dichiari esplicitamente se definisci un metodo di una classe nella definizione della classse sia inline di default.... puoi dichiarare inline sia metodi di una classe che funzioni. come ti dicevo prima inline e' un suggerimento per il compilatore, naturalmente puo' ignorarlo (pensa se chiamassi la funzione inline dentro un ciclo for |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: May 2001
Città: Milano
Messaggi: 3197
|
ok grazie
Volevo chiederti un altra cosa Quando uso il passaggio per indirizzo il prototipo è così: int cubo(int *); o int cubo(int & ) ; ??? |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
nel passaggio per indirizzo usi la prima notazione, la seconda e' detta "passaggio per riferimento"
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: May 2001
Città: Milano
Messaggi: 3197
|
ma il passaggio di riferimento non è uguale a passaggio per indirizzo??
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: May 2003
Città: Rimini
Messaggi: 2279
|
No è meglio.
Nel passaggio per indirizzo, all'interno della funzione devi usare la sintassi dei puntatori. Nel passaggio per riferimento (introdotto dal C++) la tratti come una variabile qualsiasi. Una gran comodità e inoltre aiuta ad evitare errori coi puntatori.
__________________
Gigabyte 965P-DS3 ¤ E6600@400*8 ¤ Scythe Ninja Plus Rev.B ¤ Ram 4GB ¤ HD SSD Crucial M4 128GB
Gainward 4850 Golden Sample ¤ Antec NEO 550HE ¤ CM Centurion 534 ¤ Dell Ultrasharp U2312HM Notebook Asus N551JW ¤ i7-4750HQ ¤ nVidia 960M 4GB ¤ 16GB DDR3 ¤ SSD Intel 850EVO 500GB |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Dal punto di vista della traduzione effettuata dal compilatore in linguaggio macchina il passaggio per riferimento e quello per indirizzo sono di fatto identici...
L'unica differenza è che quello per indirizzo è più comodo in fase di scrittura del programma... |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: May 2001
Città: Milano
Messaggi: 3197
|
Ok, grazie
Un ultima cosa, nei template quando li definisco e scrivo: template<class T> Al posto di t posso mettere quello che voglio?? Anche I etc etc ?? Ultima modifica di Gogeta ss4 : 20-05-2004 alle 23:16. |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Sì
|
|
|
|
|
|
#12 | |
|
Bannato
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
|
Quote:
Da un lato il puntatore e' piu' comodo quando devi cambiare l'oggetto a cui ti riferisci: la sintassi da usare risulta piu' chiara e non sei tenuto ad assegnare il riferimento da subito (non hai "riferimenti a NULL", non direttamente perlomeno). Dall'altra il riferimento, proprio perche' un po' piu' limitato, puo' essere rielaborato in modo piu' libero dal compilatore cosicche' viene ottimizzato di piu'. Ad esempio se io scrivo Codice:
const int& x = y + 3; const int& z = x * 4; cout << z << endl; |
|
|
|
|
|
|
#13 | |
|
Member
Iscritto dal: Sep 2001
Messaggi: 181
|
Quote:
|
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Che io sappia il comportamento è identico...
Utilizzavamo un porting del gcc per Windows (djgpp)...ed dal punto di vista delle istruzioni assembler mi ricordo che erano esattamente la stessa identica cosa... |
|
|
|
|
|
#15 | |
|
Bannato
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
|
Quote:
Ad esempio la classica funzione Codice:
template<typename T>
const T& max( const T& x , const T& y )
{ x<y ? y : x; }
Codice:
int a,b; ... cout << max(a,b) << endl; Codice:
int a,b; ... cout << ( a < b ? b : a ) << endl; Non che con i puntatori non sia possibile, ma comporta alcuni passaggi in piu' da eliminare da parte dell'ottimizzatore, cosi' che in alcuni casi si potrebbe generare codice un po' diverso (opinione personale questa... non e' affatto detto che sia proprio cosi' |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:21.



















