Il C ++ efficace è ancora efficace?


139

Da quello che ho visto in questo post ho deciso di iniziare a leggere il libro Effective C ++ .

Ma ora che ci sono molte nuove funzionalità a causa di C ++ 11 e che alcune delle buone pratiche sono cambiate, non sono sicuro che sia effettivamente una buona idea. L'avvento di C ++ 11 ha deprecato qualcuno dei consigli contenuti in C ++ effettivo? In tal caso, quali argomenti dovrei evitare?


4
L'autore ha fatto alcuni commenti in un articolo scottmeyers.blogspot.co.uk/2013/01/… e altri sul sito, praticamente sì, ma c'è altro da considerare.
jcoder,

2
Dai un'occhiata al sommario: pearson.ch/1471/9780321334879/… . Molti elementi sono ancora validi, alcuni possono essere migliorati con riferimenti di valore R e altre novità, ma nel complesso dovrebbe essere ancora efficace.
Zeta,

Questa domanda non è adatta per SO. (1) Il contenuto richiesto non è nella domanda, è in una risorsa fuori sito (e nemmeno collegato). (2) O rispondere a ciascuna raccomandazione nel libro è una risposta separata, nel qual caso si tratta di una domanda dell'elenco, che richiede troppe risposte, oppure una singola risposta dovrebbe discutere l'intero libro, nel qual caso questa domanda è troppo ampia. Detto questo, fare la stessa domanda su ogni singola raccomandazione sarebbe grandioso.
Ben Voigt,

2
(1) Sto facendo riferimento a un libro menzionato in una delle domande più popolari in SO. (2) È una lamentela accettabile, ma puoi essere ampio con quasi tutte le domande. o puoi essere stretto quanto ti pare. Penso che le risposte siano state abbastanza buone e molto più ristrette della maggior parte delle domande in SO, quindi non credo sia necessario un elenco dettagliato. OFF TOPIC: indovina chi ha una domanda che inizia con "Qualcuno può battere le prestazioni del mio numero intero al codice std :: string, collegato sotto?"
Capuano tedesco,

Risposte:


93

Questo è quello che Scott Meyers stesso ha detto al riguardo sul suo blog

Il che potrebbe portarti a chiederti se le informazioni e i consigli in questa edizione pre-C ++ 0x di Effective C ++ rimangono rilevanti. Sono lieto di segnalarlo. Sorprendentemente, in effetti. Dopo aver trascorso quasi due anni immerso nei dettagli di C ++ 0x, mi aspettavo di gemere un po 'mentre rivedevo il sommario di questo libro con in mente C ++ 0x. Sicuramente alcuni articoli sarebbero inappropriati. Ma il consiglio che ho trovato si è dimostrato valido. Gli sviluppatori C ++ 0x preferiscono i cons, gli enum e gli inline a #defines(Articolo 2)? Dovrebbero. Dovrebbero impedire che le eccezioni lascino i distruttori (elemento 8)? Certamente. Dovrebbero usare oggetti per gestire le risorse? Dichiarare i membri dei dati privati? Considerare alternative alle funzioni virtuali? Fattore di codice indipendente dai parametri del fattore fuori dai modelli? (Articoli 13, 22, 35 e 44.) Sì, sì, sì, sì! Il mio obiettivo è sempre stato il sommario efficace di C ++ per riassumere i consigli nel libro, e quel sommario rimane applicabile sia allo sviluppo C ++ 0x che allo sviluppo "tradizionale" del C ++. Il C ++ 0x è un linguaggio più grande, e per certi versi è un linguaggio diverso, ma le tecniche di base per fare un uso efficace del "vecchio" C ++ sono fondamentali anche per un uso efficace del C ++ 0x.

Ciò non significa che questo C ++ efficace sia una corrispondenza perfetta per C ++ 0x. Il libro non tratta le funzionalità nuove di C ++ 0x, quindi mancano elementi su come utilizzare in modo efficace tali funzionalità. Un C ++ 0xified Effective Certamente avrebbe articoli dedicati alle operazioni di spostamento, all'inizializzazione uniforme e alle espressioni lambda, e probabilmente avrebbe un intero capitolo su come utilizzare in modo efficace l'API di concorrenza. Un libro del genere conterrebbe anche diversi esempi, ad esempio quelli che fanno uso di variabili automatiche, range-based per loop, inizializzatori predefiniti in classe, nonché il modello variadico occasionale. Nella misura in cui questo libro non riesce a supportare C ++ 0x, gli errori sono quelli di omissione, non di commissione.

AGGIORNAMENTO : il nuovo titolo Effective Modern C ++ è in vendita da novembre 2014 da O'Reilly e Amazon (e molti altri per i quali puoi cercare su Google).


45

Sì, sicuramente vale ancora la pena leggere. C'è un nuovo libro su cui Scott sta lavorando: efficace C ++ 11 , che si concentra solo sul codice C ++ 11. L' efficace C ++ è ancora molto rilevante e non è sostituito dal nuovo libro. Compralo, leggilo, divertiti :)


1
Vedo i libri costruire l'uno sull'altro, quindi il C ++ efficace è il fondamento vitale. Se leggi solo uno dei due, dovrebbe essere efficace C ++. Il C ++ moderno efficace è molto più esoterico (e, ad essere sinceri, la maggior parte del C ++ è comunque tutt'altro che "moderna").
Andy Krouwel,

21

Uno, il libro è ovviamente ancora valido per C ++ 03.

Due, Meyers sta scrivendo o ha scritto, a seconda di quando stai leggendo questa frase, efficace C ++ 11.

Tre, parlando in generale, i punti di questo libro saranno ancora validi. Il C ++ favorisce ancora la velocità rispetto alla sicurezza e molti problemi in C ++ efficace ruotano attorno a questo.

L' unico tipo di punto che mi aspetterei di essere non valido è quello che dice "Non farlo, fallo invece". "Non farlo" sarà comunque valido. Ma C ++ avrà risolto alcuni problemi. In particolare, qualsiasi consiglio per usare boost è probabilmente deprecato, poiché C ++ 11 ha incluso molte delle funzionalità per cui Meyers si riferisce specificamente al lettore di Boost.


1
E ovviamente tr1, poiché credo che ogni elemento di tr1cui ha parlato sia diventato lo standard C ++ 11.
Kyle Strand,
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.