Cosa dovrei sapere su C ++? [chiuso]

8

Recentemente ho iniziato ad imparare il C ++ e mi diverto molto.

Ho letto spesso che è più facile scrivere codice errato in C ++ rispetto alla maggior parte delle lingue e che è molto più profondo di quello che sembra.

Come vorrei evitare di scrivere codice cattivo, mi stavo chiedendo cosa esattamente non dovrei fare, e cosa dovrei fare, per scrivere un buon codice in C ++.

    
posta DistantEcho 01.02.2011 - 11:18
fonte

6 risposte

21

Le insidie

Ci sono così tante insidie in C ++, che se non le conosci, creerai un codice molto instabile, con tonnellate di perdite di memoria e sovraccarichi del buffer. Rispetto alle lingue più moderne con Garbage Collection, è necessario rilasciare tutta la memoria da soli. Inoltre, il codice è di livello molto basso. Non c'è nulla che ti impedisce di sovrascrivere il tuo codice di programma (che è stato sfruttato da molti hack di IE).

Quindi il prossimo che devi imparare sono le pratiche di programmazione che mitigano questi rischi, ad es. usando puntatori intelligenti per gestire liberare oggetti, avvolgere matrici di byte nelle classi che gestiscono i dati, ecc.

Posso consigliare i libri di Scott Meyers "Efficace C ++" e "Più efficace C ++".

Quei libri essenzialmente mi hanno insegnato la bellezza del C ++. Nota che questi non sono libri per principianti. Suppongono che tu abbia già familiarità con la lingua.

    
risposta data 01.02.2011 - 12:04
fonte
20

Modi di dire

C ++ supporta una grande varietà di funzionalità. Allo stesso modo, si può facilmente tentare di usarlo in molti modi o stili diversi. Sfortunatamente, non si adatta bene a molti di loro e diventa così noioso, soggetto a errori o lento se in tal modo.

O formulati in modo diverso, senza sapere veramente cosa fai, è incredibilmente facile usare il C ++ in modo sbagliato (il che sarebbe molto meglio supportato in altre lingue). Pertanto, l'apprendimento semplice può condurre in una direzione sbagliata, quindi leggere libri di buona qualità è probabilmente più importante che in altre lingue (vedi questo post sullo stesso argomento).

Java ad esempio è un linguaggio intrinsecamente orientato agli oggetti. Non puoi programmarlo in modo molto diverso. In C ++ tuttavia puoi . Puoi usarlo come faresti in C o Java - e in nessun caso C ++ eccelle, quindi è meglio che tu stia con C o Java in questi casi.

Pertanto, è necessario conoscere lo stile e gli idiomi appropriati per ottenere C ++, sin dall'inizio. Sfortunatamente, all'inizio possono essere piuttosto complessi, ma eccone alcuni, dal semplice all'avanzato.

  • Utilizza const
  • Non preoccuparti delle micro-ottimizzazioni (dovrei inline una funzione, << o * ecc.?)
  • Evita di usare puntatori o array grezzi ovunque sia possibile (specialmente void* ). Utilizza riferimenti o puntatori intelligenti
  • Scrivi codice generico = Comprendi i modelli
  • Comprendi intestazioni / file di codice / preprocessore (ma evita le macro)
  • Usa l'STL (e capisci i concetti sottostanti)!
  • Utilizza boost
  • Pensa alla durata e all'ambito dell'oggetto - Gestisci RAII
  • Non scrivere codice orientato agli oggetti (vale a dire un sacco di polimorfismo runtime, ereditarietà) in primo luogo - ci sono linguaggi OO molto migliori là fuori
  • Utilizza oggetti invece
  • Preferisci polimorfismo statico
  • Utilizza le funzioni di compilazione
risposta data 01.02.2011 - 14:40
fonte
13

Il potere di C ++ è che è un linguaggio fantastico. Lo svantaggio di C ++ è che è un linguaggio fantastico. Può essere allo stesso tempo stupendo e terribile.

Se vuoi impararlo - e non c'è ragione per cui non dovresti - dovrai impararlo bene. Dovrai leggere un lotto . Ci sono alcuni libri che ti aiuteranno nel tuo cammino: il C ++ accelerato ti farà iniziare, specialmente se fai gli esercizi. Efficace C ++, efficace STL, Eccezionale C ++ e le loro serie continue sono tra i migliori del gioco per suggerimenti su come migliorare il modo di lavorare.

    
risposta data 01.02.2011 - 11:42
fonte
4

Penso che una cosa che ti aiuterà lungo la strada del buon codice è esperienza . Per ora, resta intrappolato nella lingua e non preoccuparti troppo delle "migliori pratiche di codifica" finché non ti senti abbastanza a tuo agio per iniziare a cercare modi per migliorare il tuo utilizzo. Imparerai a riconoscere ciò che è buono e ciò che è male. Una volta che hai abbassato la lingua, puoi guardare indietro e pensare "ok, avrei dovuto implementarlo in modo diverso" o "questo sembra disordinato, come posso migliorarlo?"

Ci penso come questo : se impari una nuova lingua parlata, non ti immergi direttamente e impari ogni singola regola grammaticale prima di iniziare a imparare parole semplici o come dire "dove è la fermata dell'autobus? ". La programmazione (IMO) è come una seconda lingua (o terza, quarta, ecc.). Trattalo come faresti con qualsiasi altra lingua e impara facendo. Il resto arriverà con il tempo.

    
risposta data 01.02.2011 - 12:03
fonte
1

I've often read it's easier to write bad code in C++ than in most languages, and that it is a lot deeper than what it seems

Chiarificazione: in C ++ è più facile scrivere codice non valido involontariamente che in altre lingue. Puoi scrivere codice cattivo in qualsiasi lingua, ma in C ++ ti metti in atto con le migliori intenzioni ma spesso finisci in qualche modo inaspettato perché C ++ - dopo che ti sei spostato da "novizio" a dire "principiante avanzato" hai la falsa impressione che C ++ sia più facile di quello che è in realtà. Ma C ++ si sta evolvendo e tutte le nuove librerie di modelli ti semplificano la vita (e sono più sicure).

    
risposta data 01.02.2011 - 15:22
fonte
-1

Due cose:

  1. Come funziona la gestione della memoria con C ++?
  2. In che modo i puntatori influiscono sulla gestione della memoria in C ++?
risposta data 01.02.2011 - 19:00
fonte

Leggi altre domande sui tag