|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#21 | |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
Quote:
E stato bellissimo
__________________
Gnu/Linux User
|
|
|
|
|
|
|
#22 | |
|
Senior Member
Iscritto dal: Nov 2003
Città: Napoli
Messaggi: 6193
|
Quote:
Proponine degli altri!!! A discrezione dei Moderatori ovviamente
__________________
Diablo3 PF | MyPC(liquidato) - Case Corsair Obsidian 800D / PSU Enermax Galaxy 1000W / MB GA-EX58A-UD7 / CPU Intel I7 920 [email protected] / MEM Corsair Dom. GT@1680mhz / GPU R9 290X / HD 2xWD 150GB raid 0/ SO - Windows 7 Ult. |
|
|
|
|
|
|
#23 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Cavolo...certo...altri altri
|
|
|
|
|
|
#24 |
|
Senior Member
Iscritto dal: Nov 2003
Città: Napoli
Messaggi: 6193
|
Ne posso proporre io uno al volo?
Cosa c'è di sbagliato in queste righe di codice? void pippo(void) { int a[6], i = 0; for(;i<6;i++) i[a]=0; }
__________________
Diablo3 PF | MyPC(liquidato) - Case Corsair Obsidian 800D / PSU Enermax Galaxy 1000W / MB GA-EX58A-UD7 / CPU Intel I7 920 [email protected] / MEM Corsair Dom. GT@1680mhz / GPU R9 290X / HD 2xWD 150GB raid 0/ SO - Windows 7 Ult. |
|
|
|
|
|
#25 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
"i" non e' un'array e "a" non viene valutato come scalare, quindi i[a] e' sbagliata. Noticina: preferite sempre ++i a i++, in altre parole preferite sempre il preincremento al postincremento a meno che non vi serva il valore della variabile da incrementare prima che venga incrementata (e' una caso raro). Per tipi semplici non fa molta differenza, ma per oggetti che fanno overload degli operatori di incremento, potrebbe fare la differenza fra una semplice chiamata a funzione (preincremento) e la creazione di un oggetto temporaneo con conseguente chiamata a costruttore, operatore, distruttore. Esempio: Object obj; ++obj; // (1) obj++; // (2) (1) viene compilato in qualcosa di simile a: obj.operator++(); // semplice chiamata a metodo (2) viene compilato in: Obj temp(obj); // costruttore di copia obj.operator++(); temp.~Object(); // distruttore Questo perche' state chiedendo al compilatore di conservare il valore di obj prima che venga incrementato e gentilmente lo copia in temp. Quell'oggetto temporaneo non puo' essere di solito eliminato dall'ottimizzatore perche' in generale il compilatore non puo' "guardare dentro" al costruttore e distruttore per sapere se sono operazioni semplici. In generale non lo sono. Usate il preincremento, soprattutto se avete a che fare con STL
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
|
#26 |
|
Senior Member
Iscritto dal: Nov 2003
Città: Napoli
Messaggi: 6193
|
Non imbrogliate...
Non dovete compilà!!!
__________________
Diablo3 PF | MyPC(liquidato) - Case Corsair Obsidian 800D / PSU Enermax Galaxy 1000W / MB GA-EX58A-UD7 / CPU Intel I7 920 [email protected] / MEM Corsair Dom. GT@1680mhz / GPU R9 290X / HD 2xWD 150GB raid 0/ SO - Windows 7 Ult. |
|
|
|
|
|
#27 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Formalmente niente...
i[a] == *(i + a) Comunque è un po' bruttino... Io, quando posso, uso sempre il preincremento...ormai l'ho preso di abitudine... |
|
|
|
|
|
#28 | |
|
Senior Member
Iscritto dal: Nov 2003
Città: Napoli
Messaggi: 6193
|
Quote:
GIUSTO. fek... mi deludi...
__________________
Diablo3 PF | MyPC(liquidato) - Case Corsair Obsidian 800D / PSU Enermax Galaxy 1000W / MB GA-EX58A-UD7 / CPU Intel I7 920 [email protected] / MEM Corsair Dom. GT@1680mhz / GPU R9 290X / HD 2xWD 150GB raid 0/ SO - Windows 7 Ult. |
|
|
|
|
|
|
#29 | |
|
Senior Member
Iscritto dal: Nov 2003
Città: Napoli
Messaggi: 6193
|
Quote:
__________________
Diablo3 PF | MyPC(liquidato) - Case Corsair Obsidian 800D / PSU Enermax Galaxy 1000W / MB GA-EX58A-UD7 / CPU Intel I7 920 [email protected] / MEM Corsair Dom. GT@1680mhz / GPU R9 290X / HD 2xWD 150GB raid 0/ SO - Windows 7 Ult. |
|
|
|
|
|
|
#30 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
"i" e' un'intero e viene automaticamente castato a puntatore, quindi puo' essere indirizzato. "a" e' un puntatore e viene casato automaticamente a intero, quindi puo' essere usato come indice. Dannato C e i suoi cast
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
|
#31 | |
|
Senior Member
Iscritto dal: Nov 2003
Città: Napoli
Messaggi: 6193
|
Quote:
Ma cosa? Guarda che cionci ha dato la spiegazione giusta... i cast non c'entrano proprio in questo caso.
__________________
Diablo3 PF | MyPC(liquidato) - Case Corsair Obsidian 800D / PSU Enermax Galaxy 1000W / MB GA-EX58A-UD7 / CPU Intel I7 920 [email protected] / MEM Corsair Dom. GT@1680mhz / GPU R9 290X / HD 2xWD 150GB raid 0/ SO - Windows 7 Ult. |
|
|
|
|
|
|
#32 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
|
#33 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
Cionci ha detto giusto, le due versioni sono perfettamente equivalenti in C, ma il "ragionamento" che fa il parser C++ quando interpreta quel codice e' quello che ti ho detto. Infatti se provi a sostituire delle classi e fornisci i giusti operatori di conversione, lo vedi fare le chiamate.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
|
#34 | |
|
Senior Member
Iscritto dal: Nov 2003
Città: Napoli
Messaggi: 6193
|
Quote:
__________________
Diablo3 PF | MyPC(liquidato) - Case Corsair Obsidian 800D / PSU Enermax Galaxy 1000W / MB GA-EX58A-UD7 / CPU Intel I7 920 [email protected] / MEM Corsair Dom. GT@1680mhz / GPU R9 290X / HD 2xWD 150GB raid 0/ SO - Windows 7 Ult. |
|
|
|
|
|
|
#35 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
400 401 402 .... Invece di 100 104 108 .... Infatti il calcolo dell'indirizzo sarebbe i + sizeof(*i)*a...invece il compialtore traduce automaticamente i[a] come *(i + a) che con l'aritmentica dei puntatori significa andare a scrivere all'indirizzo a+sizeof(*a)*i... |
|
|
|
|
|
|
#36 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
In alcune situazioni un po' intricate, quando l'ottimizzatore non riesce a star dietro a quello che scrivi, e' costretto a semplificare e si "dimentica" che le due espressioni magari possono essere equivalenti. Se imposti le ottimizzazione al massimo e disassembly il codice prodotto, puoi vedere che riesci a mandare facilmente in crisi l'ottimizzatore che si salva il valore da incrementare anche se poi non gli serve piu'. E aiutiamolo un po' il compilatore!
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
|
#37 | |
|
Senior Member
Iscritto dal: Nov 2003
Città: Napoli
Messaggi: 6193
|
Quote:
Cionci che ne pensi? Comunque vi saluto... a domani
__________________
Diablo3 PF | MyPC(liquidato) - Case Corsair Obsidian 800D / PSU Enermax Galaxy 1000W / MB GA-EX58A-UD7 / CPU Intel I7 920 [email protected] / MEM Corsair Dom. GT@1680mhz / GPU R9 290X / HD 2xWD 150GB raid 0/ SO - Windows 7 Ult. |
|
|
|
|
|
|
#38 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
Il C tira dritto e fa il ragionamento che fai tu. Il C++ si domanda: "posso applicare l'operatore [] a i? Si', se lo converto (promuovo) a puntatore, posso usare a come parametro per l'operatore di default operator[](size_t i)? Si', se lo converto (degrado) ad un size_t". Da qui in poi il comportamento di default dell'operator[] e' quello che dici tu e le due strade si riuniscono. Comunque e' un bell'esempio perche' mostra come il C++ sia troppo zelante, retaggio della compatibilita' con il C, nel castare alle spalle del programmatore, cosa che a volte fa compilare codice come quello e magari porta a errori difficili da scoprire. I puristi vorrebbero che i cast fossero sempre espliciti se non in pochi casi ben definiti.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
|
#39 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
|
|
|
|
|
#40 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
comincia a prendere una piega interessante
__________________
Gnu/Linux User
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:47.



















