Quanto è importante conoscere lo standard C ++?


11

Ho provato a cercare, ma non ho visto una domanda simile (né quella o la mia terminologia di ricerca era errata - in tal caso, non esitate a chiudere).

Sono un avido utente di SO, e noto che ci sono molti riferimenti allo standard C ++ nelle discussioni e nelle risposte - e devo ammettere che non ho mai letto questo particolare documento, il linguaggio mi fa male agli occhi ... Quindi , la domanda è: uno sviluppatore C ++ può davvero programmare per vivere senza aver mai letto questo documento? È davvero importante per noi semplici mortali che non si occupano di scrivere compilatori?


La persistenza delle domande a cui si risponde con brevi citazioni dallo standard dovrebbe essere una prova sufficiente che leggerlo non è un prerequisito per l'uso della lingua ... (a condizione che tu abbia un posto da girare quando
rimani

Risposte:


16

No, puoi andare d'accordo senza di essa

Tuttavia, avrai una comprensione molto più profonda se ti prendi il tempo per impararlo. Forse segui i riferimenti di quelle domande che ti disturbano e impara un piccolo pezzo alla volta.


8

Se vuoi discutere della semantica linguistica e dello standardese, allora lo standard è molto importante. (Non voglio dire questo del tutto derogatorily.) Se si desidera solo per ottenere il lavoro fatto nel linguaggio (vs. sulla lingua), allora è molto meno.

Lo standard può fare un riferimento decente alla libreria standard (non tanto per il linguaggio stesso) una volta che ti senti un po 'a tuo agio con esso, ma sono titubante nel raccomandare di usarlo in quel modo. Molte persone sembrano fare meglio con altri materiali. Detto questo, mi rivolgo allo standard il più delle volte quando devo cercare qualcosa sullo stdlib.

Tuttavia, leggere le bozze e i documenti della commissione è un modo per rimanere al passo con C ++ 0x - in effetti, attualmente solo uno dei pochi modi.

Per SO e altri forum, esito a citare lo standard tranne quando sembra che il poster ne trarrebbe un chiaro e sicuro beneficio - forse lo hanno chiesto o penso che lo stiano aspettando implicitamente. Nella maggior parte dei casi, e specialmente con i programmatori che non conoscono il C ++, la citazione di solito non sembra molto utile.


Se qualcuno vuole sapere cosa dovrebbe fare la lingua, lo standard è prezioso. Se vogliono sapere perché il compilatore fa qualcosa, è spesso molto utile. Per altre domande, non così tanto.
David Thornley,

1
@DavidThornley: è difficile giudicare dopo essere stato abituato da così tanto tempo a leggere da solo lo standard, ma sembra sicuramente che molte persone trovino più accessibili testi come TC ++ PL anche per scoprire cosa dovrebbe fare la lingua.
Fred Nurk,

1
@Fred Nurk: quasi tutto è più accessibile dello standard. Intendevo rispondere a domande su SO e simili, e non ero chiaro. Aggiunge un po 'di autorità quando le persone citano cplusplus.com e altre fonti.
David Thornley,

@DavidThornley: citerò molto raramente siti del genere (cplusplus.com in particolare ha troppi problemi per i miei gusti), ma per la maggior parte dei poster su SO, sembrano anche più utili, anche con errori, rispetto allo standard - ed essendo facilmente purtroppo disponibile online è una parte importante di ciò.
Fred Nurk,

@Fred, è interessante da sapere, ho sempre pensato che cplusplus fosse un buon riferimento (il rovescio della medaglia è la loro fonte di pubblicità - che è altamente inappropriata!), Ora dovrò ricordare di incrociare il riferimento con il riferimento sgi.
Nim,

6

Dovresti averlo a disposizione come riferimento, ma non credo che nessuno, ma i suoi autori abbiano letto tutto ... se addirittura lo facessero (lavorano in gruppi concentrandosi su aree, quindi ne dubito).

Il motivo per cui dovresti averlo a disposizione è che a volte una domanda sulla correttezza del codice può essere risolta solo facendo riferimento allo standard.


3
Nella maggior parte delle situazioni non è necessario. Ciò di cui hai bisogno è trattato in altri libri. È solo quando arrivi a quei casi angolari o non hai mai usato angoli della lingua che devi controllare la definizione nello standard (e di solito c'è un'alternativa all'utilizzo dei casi angolari nella lingua). Lasciare lo standard per gli sviluppatori del compilatore e lo sviluppatore generale può andare d'accordo con altri testi non formali.
Martin York,

2

Probabilmente è più importante sapere dove si trova lo standard e sapere quando cercare le cose.

Se non altro dovresti controllare periodicamente per assicurarti di aderire alla versione più recente e di non lasciare che il tuo codice vada alla deriva.


2

In una grande squadra, dovresti generalmente avere una (ma di solito non più) una persona che conosce lo standard almeno ragionevolmente bene, quindi possono fare cose come risolvere qualsiasi argomento / domanda su cose come se un particolare codice sia conforme ai requisiti dello standard.

Realisticamente, tuttavia, quelle risposte devono essere temperate dal giudizio e dall'esperienza. Lo standard (attuale) dice che exportè una parola chiave e dice cosa fa. In realtà, semplicemente non funziona così con la maggior parte dei compilatori. Allo stesso modo, in molti casi, se ci sono tre persone in disaccordo su un determinato codice e su ciò che lo standard potrebbe dire al riguardo, ciò potrebbe essere un segno che potrebbe essere necessario riscrivere il codice per essere più semplice.

Allo stesso tempo, la maggior parte dei team lavorerà per la maggior parte su una piattaforma e avere uno standard (e qualcuno che abbia almeno ragionevolmente familiarità con esso) per verificare che ciò che stai facendo non sia strettamente legato a quella piattaforma può sicuramente essere utile.


Il "non di più" è probabilmente importante - a meno che tu non voglia litigare tra gli esperti su come interpretare lo standard <g>
Steve314,

2

Ho guadagnato il mio pane come sviluppatore C ++ per circa 4 anni in totale, senza aver letto lo standard. In effetti, per i primi due anni circa, non ho nemmeno letto molto altro che C ++ Primer di Stan Lippman e articoli MSDN. Quindi è possibile - in effetti temo che la maggior parte delle persone che producono codice C ++ non abbiano nemmeno letto opere fondamentali come Effective C ++ et al. che io stesso ho scoperto solo più tardi.

Per essere un buon sviluppatore di C ++, IMHO deve comprendere la logica interna della (e) lingua (e) (come nota Scott Meyers, il C ++ è circa 4 lingue diverse) e le espressioni e le insidie ​​comuni, ed essere pronti a imparare sempre di più. Leggere le discussioni su SO può insegnare molto sui casi angolari in cui a sua volta può valere la pena leggere su parti pertinenti dello standard, se qualcuno vuole approfondire davvero. Ma leggere tutto ciò è probabilmente raramente necessario per la maggior parte di noi.


Un buon punto è che ci sono libri essenziali che sono molto più essenziali (per la maggior parte dei programmatori che non scrivono compilatori) rispetto allo standard. +1 - ma c'è un discreto numero di libri "essenziali".
Steve314,

@ Steve314, infatti - iniziare a elencarli non aiuterebbe a rispondere a questa domanda specifica. Ma ho aggiunto un link al thread pertinente su SO ora.
Péter Török,

@Péter - bel tocco, ma il mio punto non dichiarato era che nessuno dei libri "essenziali" è veramente essenziale. La maggior parte dei programmatori C ++ avrebbe dovuto leggere diversi titoli da quell'elenco, ma tutti ? Improbabile. Anche se lo facessi, dubito che potresti davvero conservare tutta quella conoscenza. "Efficace C ++" è nella mia lista non ancora letta, quindi ovviamente lo considero un libro essenziale per nulla essenziale.
Steve314,

@ Steve314, non volevo dire che uno deve leggere tutti quelli - non l'ho nemmeno fatto io, e alcuni di loro ho letto ma non sono stato colpito da :-) C'è anche una sovrapposizione tra alcuni di questi, quindi è un questione di gusti e possibilità personali quale uno sviluppatore incontra per primo e / o quale (e) uno (i) definisce "essenziale". Credo che l'importante sia che ci siano alcuni idiomi comuni che sono buoni da seguire e che le insidie ​​comuni dovrebbero essere evitate, e si dovrebbe conoscere la maggior parte di questi, e il modo meno doloroso per imparare questi è da (alcuni di) questi libri .
Péter Török,

Ovviamente non saprò quanto sia essenziale fino a quando non lo avrò letto.
Steve314,

1

"Conoscere lo standard" è una questione di laurea e non significa necessariamente memorizzare il documento originale.

Un documento standard è progettato per essere autorevole, non necessariamente accessibile. Ci sono molte fonti rimosse in un solo passaggio che sono molto più accessibili. È vero, ci sono un po 'di sussurri cinesi in questo, ma raramente è un grosso problema, certamente a un livello rimosso.

Divulgazione completa - Sono obbligato a dirlo - Non ho mai letto lo standard. Anche se probabilmente farò lo sforzo di ottenere l'intero documento C ++ 0x quando sarà finalizzato.

EDIT ovviamente se Stroustrup pubblica una nuova edizione di "Il linguaggio di programmazione C ++", potrei accontentarmi di nuovo.


1

Quando ho programmato in C ++, mi riferivo spesso allo standard del linguaggio per informazioni sulle funzioni di libreria standard. La libreria standard C ++ è piuttosto grande e ho trovato lo standard del linguaggio come la fonte più conveniente.


1
Wow veramente? Trovo sempre indispensabili risorse online come cplusplus in questo senso ...
Nim,

1

Avrei potuto giurare di aver già risposto a questa domanda, ma non riesco a trovarla. Fondamentalmente, C ++ è diverso da Java in quanto è destinato ad avere buchi nella specifica che altre specifiche della piattaforma possono riempire (ad esempio POSIX, la specifica ABI della tua architettura o il tuo compilatore). Pertanto, quando si rispondono a domande su siti come StackOverflow, è comune far apparire le specifiche per indicare che solo perché qualcosa funziona su un compilatore non implica che funzioni ovunque. In altre parole, la ragione per cui si fa riferimento a specifiche particolari quando si lavora con C ++ è di chiarire esattamente quanto sia portatile un particolare uso del linguaggio.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.