Quali sono le principali differenze tra i modelli C ++ e i generici Java? [chiuso]

6

Sono un programmatore C ++ di inizio che viene da Java.

Mi sembra che i modelli C ++ e i generici Java siano in realtà molto simili. Li usi praticamente nelle stesse occasioni e allo stesso modo. E loro "sentono" lo stesso. Tuttavia posso pensare a due differenze tra i sistemi:

  1. In Java è possibile utilizzare solo tipi di classe come argomenti di tipo, mentre in C ++ qualsiasi tipo si adatta. Non penso che questo sia significativo perché Java autoboxing è buono.

  2. Una differenza più significativa: i modelli C ++ sono antropizzati. Significa che puoi chiamare qualsiasi operazione su un tipo generico T . Se non supporta l'operazione, viene generato un errore di compilazione. I generici di Java, tuttavia, non sono antropomorfi. Di default tutti gli argomenti di tipo sono di tipo Object , e puoi specificare qualcosa di più specifico con la sintassi T extends Something , che ci permette di chiamare su T metodi definiti in Something .

Il secondo punto è piuttosto significativo. Comunque a parte quello, quali sono le differenze tra i due sistemi? Quali sono i pro e i contro di ciascuno? Sono simili o diversi nel loro complesso?

    
posta Aviv Cohn 09.10.2014 - 11:58
fonte

1 risposta

6

L'implementazione dei generici è notte e giorno:

  1. In java il codice compilato rimuove tutti i riferimenti al tipo generico e aggiunge i cast laddove necessario. Questo è chiamato cancellazione di tipi e ti consente di fare List<String> list; ((List)list).add(new Object()); che genera un errore solo quando cerchi di ottenere il valore come stringa. Tutti i java generici sono in realtà zucchero sintattico con controllo di tipo extra in fase di compilazione.

  2. In C ++ quando usi un modello il compilatore emetterà nuovamente il codice del modello dopo aver sostituito il parametro generico in esso con il tipo che hai usato. Questo è più potente in molti modi, ma può portare a file eseguibili esagerati.

risposta data 09.10.2014 - 12:08
fonte

Leggi altre domande sui tag