Эффективный C ++ по-прежнему эффективен?


139

Из того, что я увидел в этом посте, я решил начать читать книгу « Эффективный C ++» .

Но теперь, когда появилось много новых функций из-за C ++ 11 и изменились некоторые передовые практики, я не уверен, действительно ли это хорошая идея. С появлением C ++ 11 устарели какие-либо советы, содержащиеся в Эффективном C ++? Если да, то каких тем мне следует избегать?


4
Автор сделал некоторые комментарии в статье scottmeyers.blogspot.co.uk/2013/01/… и других на сайте, в основном да, но это еще не все.
jcoder

2
Просто взгляните на содержание: pearson.ch/1471/9780321334879/… . Многие элементы все еще действительны, некоторые можно улучшить с помощью ссылок на r-значения и других нововведений, но в целом это должно оставаться эффективным.
Zeta

Этот вопрос плохо подходит для SO. (1) Спрашиваемый контент не в вопросе, он находится на стороннем ресурсе (и даже не связан). (2) Либо обращение к каждой рекомендации в книге является отдельным ответом, и в этом случае это вопрос списка, требующий слишком много ответов, либо один ответ должен обсуждать всю книгу, и в этом случае этот вопрос слишком общий. Тем не менее, было бы здорово задать одинаковый вопрос по любой отдельной рекомендации.
Ben Voigt

2
(1) Я ссылаюсь на книгу, упомянутую в одном из самых популярных вопросов в SO. (2) Это нормальная жалоба, но вы можете ответить практически на любой вопрос. или вы можете быть настолько узкими, насколько хотите. Я думаю, что ответы были довольно хорошими и намного более узкими, чем на большинство вопросов в SO, поэтому я не думаю, что нужен подробный список. НЕ ПО ТЕМЕ: угадайте, у кого есть вопрос, который начинается с «Может ли кто-нибудь превзойти производительность моего целого числа в коде std :: string, ссылка на который приведена ниже?»
German Capuano

Ответы:


93

Вот что сам Скотт Мейерс сказал об этом в своем блоге.

Это может заставить вас задуматься, остаются ли актуальными информация и советы в этой версии Effective C ++ до C ++ 0x. Я рад сообщить, что это так. На самом деле это удивительно. Потратив почти два года на изучение C ++ 0x в деталях, я ожидал, что немного вздохну, просматривая оглавление этой книги с учетом C ++ 0x. Конечно, некоторые предметы будут неуместными. Но совет, который я нашел, оказался верным. Если разработчики C ++ 0x предпочитают константы, перечисления и встроенные строки #defines(Пункт 2)? Им следует. Должны ли они препятствовать тому, чтобы исключения оставляли деструкторы (пункт 8)? Безусловно. Должны ли они использовать объекты для управления ресурсами? Объявить элементы данных закрытыми? Рассматриваете альтернативы виртуальным функциям? Вычленить независимый от параметров код из шаблонов? (Пункты 13, 22, 35 и 44.) Да, да, да, да! Моя цель всегда заключалась в том, чтобы оглавление Effective C ++ резюмировало советы, содержащиеся в книге, и это краткое изложение остается столь же применимым к разработке на C ++ 0x, как и к «традиционной» разработке на C ++. C ++ 0x - это более крупный язык, и в некотором смысле он отличается от других, но основные методы эффективного использования «старого» C ++ также являются основными для эффективного использования C ++ 0x.

Это не означает, что этот эффективный C ++ идеально подходит для C ++ 0x. В книге не обсуждаются новые возможности C ++ 0x, поэтому отсутствуют сведения об эффективном использовании этих функций. В C ++ 0xified Effective C ++ наверняка будут элементы, посвященные операциям перемещения, унифицированной инициализации и лямбда-выражениям, и, вероятно, в нем будет целая глава об эффективном использовании API параллелизма. Такая книга также будет содержать различные примеры, например, те, которые используют автоматические переменные, циклы for на основе диапазона, классовые инициализаторы по умолчанию, а также случайные вариативные шаблоны. Поскольку в этой книге не хватает поддержки C ++ 0x, ошибки связаны с упущением, а не комиссией.

ОБНОВЛЕНИЕ : новое название Effective Modern C ++ продается с ноября 2014 года от O'Reilly и Amazon (и многих других, для которых вы можете использовать Google).


45

Да, безусловно, стоит прочитать. Есть новая книга, над которой Скотт работает: « Эффективный C ++ 11» , в которой основное внимание уделяется только коду C ++ 11. Эффективное использование C ++ по - прежнему очень актуальна, и не вытесняется новой книги. Купите, прочтите, наслаждайтесь :)


1
Я вижу, что книги дополняют друг друга, поэтому эффективный C ++ - жизненно важная основа. Если вы читаете только один из двух, это должен быть Эффективный C ++. Эффективный современный C ++ гораздо более эзотеричен (и, честно говоря, большая часть C ++ в любом случае далека от «современного»).
Энди Кроувел

21

Во-первых, книга, конечно, все еще актуальна для C ++ 03.

Во-вторых, Мейерс пишет или написал, в зависимости от того, когда вы читаете это предложение, «Эффективный C ++ 11».

В-третьих, в общем, пункты этой книги останутся в силе. C ++ по-прежнему предпочитает скорость безопасности, и многие проблемы в Effective C ++ связаны с этим.

Только вид пункта я бы ожидать , чтобы быть недействительными являются те , которые говорят : «Не делай этого, это сделать вместо этого.» «Не делай этого» будет по-прежнему в силе. Но C ++ решил некоторые проблемы. В частности, любые рекомендации по использованию Boost, вероятно, устарели, поскольку C ++ 11 включает многие функции, для которых Мейерс специально отсылает читателя к Boost.


1
И, конечно же tr1, поскольку я считаю, что каждый элемент, о котором tr1он упомянул, вошел в стандарт C ++ 11.
Кайл Стрэнд
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.