Come posso imparare a scrivere C ++ idiomatico?

27

Sono uno studente di informatica e, di conseguenza, mi è stato insegnato C ++ come una versione migliore di C con le classi. Finisco per cercare di reinventare la ruota ogni volta che è necessaria una soluzione a un problema complesso, solo per trovarlo dopo, alcune funzionalità linguistiche o alcune routine di libreria standard potrebbero potenzialmente averlo fatto per me.

Sono a mio agio con le mie espressioni char* e *(int*)(someVoidPointer) , ma di recente, dopo aver apportato un contributo (minore) a un progetto open-source, ritengo che non sia così che si dovrebbe pensare quando si scrive codice C ++ . È molto diverso da C.

Considerando che conosco abbastanza bene la programmazione orientata agli oggetti, e sto bene con una curva di apprendimento ripida, cosa mi suggeriresti di pensare alla traccia di C ++ quando sto codificando C ++?

    
posta yati sagade 03.11.2011 - 21:14
fonte

7 risposte

12

In base ai tuoi commenti conosci la sintassi C ++.
Non stai codificando in C ++ ma quello che è spesso definito come C con le classi.

Il tag C ++ sullo stackoverflow è un buon punto di partenza, include un reading list e FAQ .

L'unico vero modo per imparare è scrivere codice e fare in modo che l'utente esperto faccia commenti. Puoi inserire il tuo codice qui per la revisione. Un buon esempio

I'm all comfortable with my "char*" s

Smetti di usarli, passa a std :: string.

and (int)(someVoidPointer) idioms.

Smetti di usarli (a parte l'interfaccia con il codice C). L'utilizzo del concetto di functor offre diversi vantaggi (inclusa l'idea dello stato di incapsulamento).

But recently, after making a (minor) contribution to an OSS project, I feel that is not how you think in C++. It's much different, though C has its own place.

Sì. C e C ++ sono divergenti come lingue. Sebbene sia possibile utilizzare praticamente la stessa sintassi, ciò che viene considerato un buon codice C non è generalmente considerato un buon codice C ++ (o viceversa).

Some friends have suggested Accelerated C++, but again I know what types are, and what classes are and what overloading is.

Hai le basi in basso.

How can a (mutilated) C++ programmer, who happens to be sound with the OO concepts write idiomatic programs in the language.

Con molto lavoro: -)

    
risposta data 03.11.2011 - 21:59
fonte
12

Il libro Effective C ++ insegna un numero di cose interessanti e ti porterà ad apprezzare le caratteristiche del C ++. C'è anche STL efficace - Non l'ho letto ma sono sicuro che sarebbe un'ottima lettura se non conosci la STD.

La cosa importante da imparare è che dovresti usare la lingua e non reinventare la ruota costantemente . Hai già imparato come crearli, quindi rendilo facile con te stesso (e altri!) E usa gli strumenti per tutto il loro potenziale.

Come nota a margine, incontrerai un sacco di persone che richiedono l'utilizzo della STD. Questo è altrettanto pessimo di come usare solo char* - a volte non è lo strumento giusto e ce ne sono molti altri là fuori. Nello stesso senso, non scoraggiarti dal creare le tue classi contenitore: se utilizzerai char* , il posto migliore per farlo è racchiuso in una classe in modo sicuro.

    
risposta data 03.11.2011 - 21:50
fonte
6

Posso raccomandare la recente presa BUILD di Herb Sutter. Quella denominata " Scrittura di codice C ++ moderno: come C ++ si è evoluto nel corso degli anni ":

Many people think of C++ as the same language they experienced in college or just as “C with classes”, but the C++ language has evolved extensively over the years. In this session, we’ll cover how you can use C++ to write innovative, expressive and beautiful apps that deliver power and performance apps. Join us to see how the newly finished C++0x standard can make writing C++ as productive as many other languages.

La sua non è una brutta presentazione, non troppo lunga, ha alcuni buoni suggerimenti per le nuove funzionalità dell'ultimo standard che ti darebbero alcuni suggerimenti per aggiornare il tuo vecchio stile C / C ++.

Oltre a questo, devi imparare l'STL - non è complicato e ci sono un sacco di libri, ad esempio, efficaci STL o semplicemente google per i tutorial STL per aiutarti.

    
risposta data 04.11.2011 - 19:13
fonte
4

Ho letto C ++ accelerato di Andrew Koenig e Barbara Moo per aiutare insegnando C ++, dopo aver lavorato con C ++ per quasi un decennio. (In effetti, stavo iniziando ad armeggiare con la meta-programmazione dei modelli in quel momento.) Ho trovato che fosse una rivelazione, anche se non penso che mi abbia insegnato alcun nuovo aspetto della lingua. 1

Ciò che mi ha insegnato, tuttavia, era di guardare e utilizzare il C ++ come linguaggio di alto livello. Per non scherzare con i puntatori grezzi e delete e utilizzare la libreria standard laddove possibile.

Ho la sensazione che questo è esattamente ciò che stai cercando.

1 Non è che non ci fosse ancora nulla da insegnarmi (ce ne sono molte anche ora, un decennio dopo), ma c'è solo tanta conoscenza che puoi spremere in un libro introduttivo di 250 pagine.

    
risposta data 04.11.2011 - 14:25
fonte
1

Prima di rispondere - una nota: Idiomatic C ++ è un bersaglio mobile. Come cambia la lingua, così fanno i suoi idiomi. In effetti, alcune caratteristiche del linguaggio sono intese per permetterci di eliminare il codice idiomatico che potrebbe essere semplificato o migliorato con un supporto dal linguaggio stesso, o almeno dalla libreria standard. Quindi ricorda che ogni fonte può solo informarti su ciò che era idiomatico al momento della scrittura .

Detto questo, farebbe bene a dare un'occhiata:

Il sito di codereview.SX

La rete StackExchange ha un sito denominato codereview.stackexchange.com . Se hai scritto un pezzo di codice C ++ - una classe, una parte di una libreria, qualcosa di non eccessivamente enorme - puoi pubblicarlo lì e chiedere alla comunità di rivederlo. Nota che il codice deve essere compilato ed essere fondamentalmente funzionale - quel sito non è per il debug.

Inoltre, puoi cercare un codice C ++ lì, relativo a ciò su cui stai lavorando, e vedere cosa sottolineano i revisori. Potresti persino provare a rivedere il codice postato da te stesso senza pubblicare una risposta, quindi leggere quello che gli altri hanno pensato.

Presentazioni video conferenza C ++

Ci sono diverse conferenze per sviluppatori incentrate sul C ++ che si tengono ogni anno:

e quelli non sono nemmeno gli unici ... comunque, ognuno di questi post video di molte / tutte le presentazioni. Questi ti insegneranno un lotto , compresi alcuni codici idiomatici, e il principio con cui puoi decidere cosa dovrebbe o non dovrebbe essere idiomatico.

A volte puoi persino ottenere i deck slide degli altoparlanti.

    
risposta data 24.03.2018 - 19:13
fonte
0

Bene, i progetti open source sono un ottimo inizio. Non aspettarti di diventare un programmatore professionista basato sui tuoi corsi universitari, non sono destinati a questo (come ho scritto nella mia risposta qui ).

Sembri essere consapevole della sintassi, va bene. Ora vai a leggere il codice degli altri e contribuisci con le tue recensioni peer. Imparerai molto leggendo il codice e provando a comprenderlo, eseguirne il debug e correggerlo e, naturalmente, aggiungendolo aderendo alle convenzioni di codifica già presenti.

Anche i libri professionali sono un'ottima idea, come accennato, e sfogliando le domande e le risposte su StackOverflow ti insegneremo molto (sicuramente mi insegna molto e mi considero un professionista C ++).

    
risposta data 03.11.2011 - 21:55
fonte
-1

Probabilmente sarà utile leggere molto codice C ++. Devi vedere il codice per iniziare a farti un'idea. Poi di nuovo, la maggior parte del codice C ++ è sbagliato.

    
risposta data 03.11.2011 - 21:57
fonte

Leggi altre domande sui tag