C ++ eficaz ainda é eficaz?

139

Pelo que vi neste post , decidi começar a ler o livro Effective C ++ .

Mas agora que existem muitos recursos novos por causa do C ++ 11 e que algumas das boas práticas foram alteradas, não tenho certeza se é realmente uma boa ideia. O advento do C ++ 11 preteriu algum dos conselhos contidos no C ++ eficaz? Em caso afirmativo, quais tópicos devo evitar?

Capuano alemão
fonte
4
O autor fez alguns comentários em um artigo scottmeyers.blogspot.co.uk/2013/01/… e outros no site, basicamente sim, mas há mais a considerar.
jcoder
2
Basta dar uma olhada no índice: pearson.ch/1471/9780321334879/… . Muitos itens ainda são válidos, alguns podem ser aprimorados com referências de valor r e outras coisas novas, mas, no geral, ainda deve ser eficaz.
Zeta
Esta pergunta é inadequada para SO. (1) O conteúdo perguntado não está na pergunta, está em um recurso externo (e nem está vinculado). (2) Abordar cada recomendação do livro é uma resposta separada; nesse caso, é uma pergunta de lista, exigindo muitas respostas, ou então uma única resposta deve discutir o livro inteiro; nesse caso, essa pergunta é muito ampla. Dito isto, fazer a mesma pergunta sobre uma única recomendação seria ótimo.
Ben Voigt
2
(1) Estou fazendo uma referência a um livro mencionado em uma das perguntas mais populares do SO. (2) Essa é uma reclamação aceitável, mas você pode ser amplo com quase qualquer pergunta. ou você pode ser tão estreito quanto quiser. Eu acho que as respostas foram muito boas e muito mais estreitas do que a maioria das perguntas no SO, então não acho que seja necessária uma lista detalhada. TÓPICO FORA: adivinhe quem tem uma pergunta que começa com "Alguém pode superar o desempenho do meu número inteiro no código std :: string, vinculado abaixo?"
German Capuano

Respostas:

93

Isso o que o próprio Scott Meyers tinha a dizer sobre isso em seu próprio blog

O que pode levar você a pensar se as informações e conselhos nesta edição pré-C ++ 0x do Effective C ++ permanecem relevantes. Tenho o prazer de informar que sim. Surpreendentemente, de fato. Depois de passar quase dois anos mergulhando nos detalhes do C ++ 0x, esperava gemer um pouco ao revisar o índice deste livro com o C ++ 0x em mente. Certamente alguns itens seriam inapropriados. Mas o conselho que encontrei provou ser sólido. Os desenvolvedores do C ++ 0x preferem consts, enums e inlines a #defines(Item 2)? Eles deviam. Eles devem impedir que exceções deixem destruidores (Item 8)? Certamente. Eles devem usar objetos para gerenciar recursos? Declarar membros de dados privados? Considere alternativas para funções virtuais? Fatorar código independente de parâmetro dos modelos? (Itens 13, 22, 35 e 44.) Sim, sim, sim! Meu objetivo sempre foi o sumário efetivo do C ++ resumir os conselhos do livro, e esse resumo permanece tão aplicável ao desenvolvimento do C ++ 0x quanto ao desenvolvimento "tradicional" do C ++. O C ++ 0x é uma linguagem maior e, de certa forma, é diferente, mas as principais técnicas para fazer uso efetivo do C ++ “antigo” também são essenciais para o uso efetivo do C ++ 0x.

Isso não significa que este C ++ eficaz seja uma combinação perfeita para C ++ 0x. O livro não discute os recursos novos do C ++ 0x; portanto, faltam itens sobre o uso efetivo desses recursos. Um C ++ eficaz com C ++ 0 certamente teria Itens dedicados para mover operações, inicialização uniforme e expressões lambda, e provavelmente teria um capítulo inteiro sobre como fazer uso efetivo da API de simultaneidade. Esse livro também conteria exemplos diferentes, por exemplo, aqueles que usam variáveis ​​automáticas, com base em intervalos para loops, inicializadores padrão na classe, bem como o modelo variável ocasional. Na medida em que este livro não oferece suporte ao C ++ 0x, os erros são de omissão, não de comissão.

ATUALIZAÇÃO : o novo título Effective Modern C ++ está à venda desde novembro de 2014 pela O'Reilly e Amazon (e muitas outras que você pode pesquisar no Google).

TemplateRex
fonte
45

Sim, definitivamente ainda vale a pena ler. Há um novo livro no qual Scott está trabalhando: C ++ 11 eficaz , que se concentra no código apenas do C ++ 11. O C ++ efetivo ainda é muito relevante e não é substituído pelo novo livro. Compre, leia, aproveite :)

cdmh
fonte
1
Eu vejo os livros construindo um sobre o outro, então o C ++ eficaz é a base vital. Se você ler apenas um dos dois, deverá ser C ++ eficaz. O C ++ moderno eficaz é muito mais esotérico (e para ser honesto, a maioria do C ++ está longe de ser "moderno").
Andy Krouwel
21

Primeiro, o livro ainda é válido para o C ++ 03.

Segundo, Meyers está escrevendo ou escreveu, dependendo de quando você está lendo esta frase, C ++ eficaz 11.

Três, falando de maneira geral, os pontos deste livro ainda serão válidos. O C ++ ainda favorece a velocidade e não a segurança, e muitos problemas no C ++ eficaz giram em torno disso.

O único tipo de argumento que eu esperaria ser inválido são os que dizem "Não faça isso, faça isso". "Não faça isso" ainda será válido. Mas o C ++ terá resolvido alguns problemas. Em particular, todas as recomendações para usar o boost provavelmente serão descontinuadas, pois o C ++ 11 incluiu muitos dos recursos que Meyers refere especificamente ao Boost para o leitor.

djechlin
fonte
1
E tr1, é claro , já que acredito que todos os elementos tr1dele mencionados entraram no padrão C ++ 11.
Kyle Strand