Pull to refresh

Comments 39

Какая разница между версиями C++ 11, 14 и 20?

Так разница между версиями то какая? Какая польза в изучении C++11 или C++14 по книге от O'Reilly или Страуструпа в 2023 году? Или стоит рассмотреть варианты книг про C++17 и C++20?

Именно в этом суть вопроса

Если реально не знаете, в чем разница, тогда эти книги точно стоит почитать. Особенно Майерса. Там много советов, которые не устарели.

Понял. Спасибо большое за ответ (жаль, что пока не могу оценить комментарий)

Так разница между версиями то какая?

Вы можете столкнуться с кодом на 11 стандарте и долго думать над вопросом "что хотел сказать автор?". В таких книгах вы можете найти объяснение почему это сделано так как сделано, а не иначе.

Или стоит рассмотреть варианты книг про C++17 и C++20?

Авторитетные авторы долго не обновляют свои книги. Если для вас это новый язык - лучше начать с последних стандартов. Я бы, наоборот, не стал начинать изучение с 11. Банально из-за того, что усилий вы потратите много, а толку 0, т.к. с новым стандартом уже так не пишут. Классиков, имхо, стоит читать, когда поймете, что вам ваших знаний не хватает. Вот тогда пойдут всякие александреску, страуструпы, устройства компиляторов, линкеры и подобные книги, не обновляющиеся десятилетиями.

Насчёт того, что прямо совсем "уже так не пишут" - спорно. Можете привести пример нововведения из c++ 20, после которого не пишут так, как писали в c++11?

if constexpr

И ещё кучу всего аналогичного

if constexpr - это c++ 17. Я именно про c++ 20 спрашивал. И что значит "аналогичного"? Вы про шаблоны или что?

Вы определитесь, у вас в сообщении (как и книга в статье) C++11

Но даже про 17 плюсы: шаблонные лямбды и работа с вариадиками, концепты, ranges, std::format (хотя libfmt все ещё удобнее).

У меня в сообщении не c++11, а вопрос: что такого в c++20 появилось, что после этого c++11 не надо использовать?

А чем libfmt удобнее, чем std::format?

Ну ваш вопрос совсем не так звучит. У вас четко написано, про разницу между 11 и 20 стандартом. Повторюсь, наиболее существенное отличие между 11 и 20 - подход к метапрограммированию: sfinae нужен намного реже, вариадики по другому разворачиваются, проще и лучше выведение типов.

Далеко не во всех задачах нужны шаблоны и метапрограммирование. Даже ranges нужны не всегда, часто хватает for auto.

Я просто хотел сказать, что для многих задач достаточно c++17.

Это понятно. У нас такой аргумент часто на работе упоминают, когда ленятся компилятор обновлять. Мол зачем, не нужно. Но для меня это странно звучит. С таким успехом можно и на голом си программировать. Ну или на C++98.

Надо исходить из разумности в каждом конкретном случае. Если проект написан на C++98, но работает и свою задачу выполняет, зачем его трогать? Если проект на C++11, но в нем вообще не используются шаблоны - надо срочно проект на шаблонах переписать, что-ли?

Что делать, если проект пишется и добавляется новый функционал, который лаконичнее сделать на 20-х плюсах? Продолжать писать в стиле 20-летней давности на c++03? При том что они поддерживаются всеми целевыми компиляторами проекта.

Хорошо поставленный вопрос содержит в себе ответ. Если это потребует небольших усилий, то, конечно, лучше использовать новое. Но если для этого нужно, например, заодно заменить половину старых классов на новые, то надо исходить из того, есть ли на это время и силы, и не повлечёт ли это вероятность внесения ошибок.

Бывают и прочие соображения. Например, надо делать проект под конкретную сборку Astra Linux, не очень новую, и устанавливать туда что-то новое нельзя (не спрашивайте, почему, мопед не мой). Там банально компилятор не поддерживает C++20, и ставить более новый нельзя. Ситуация была не со мной, но она из жизни. Про другие случаи, когда корпоративный стандарт подразумевает использование только C++17, и не выше, я тоже слышал.

Ну вот вы и ответили на свой исходный вопрос. Фичи из новых стандартов используются, за исключением ситуаций с искусственным ограничением. Я рад что мы разобрались :)

Никто не спорит, что они используются. Мой вопрос был не о том, используются ли они вообще. А в каких случаях c++11 не используется, когда есть c++20.

Опять же, некорректная постановка вопроса. C++20 не заменяет, а дополняет C++11 и местами упрощает.

С этим я как раз согласен. Я не очень согласен с тем, что выше было написано про то, что якобы c++11 сейчас изучать толку ноль, потому что "так уже не пишут".

Изучая С++20 вы в любом случае изучите С++11.

Ладно, мы друг друга поняли, думаю можно остановить тред :)

Гляньте constexpr. Для меня пока 20 стандарт открывает достаточно много доп функций из коробки std.

Знаю я про constexpr. И про то, что добавлено в 20 стандарт, знаю. Всё зависит от круга решаемых задач. Лично мне constexpr вообще мало где поможет. Ну да, хорошо, когда что-то на этапе компиляции вычисляется, код оптимизируется и т.д. Но вероятность того, что это как-то повлияет на скорость обработки данных, сильно зависит от решаемой задачи. Например, даже если кусок кода удается ускорить в 10 раз, но он выполняется только в течение 1% от всей выполняемой задачи по времени, толку-то от такого ускорения.

Вот, кстати, еще в копилку книг про C++ на эту тему: "Оптимизация программ на C++" Курт Гантерот.

UFO just landed and posted this here

Мне понравилась книга "Осваиваем C++17 STL. О'Двайр Артур". Не совсем для начинающих, но помимо описания нововведений стандарта C++17, упоминаются и более старые стандарты, а также объясняется, как контейнеры и алгоритмы STL устроены внутри, даже с упрощённым кодом, показывающим примеры их реализации.

UFO just landed and posted this here

2023? Ну при этом вся литература, в лучшем случае, 2014 года. Зачем тогда уточнение, что бы каждой год перевыпускать статью меняя только год

UFO just landed and posted this here

Изучаем C++ через программирование игр. Майкл Доусон
Эта книга, конечно, не очень плохая, но слишком поверхностная. Совсем новичку может быть тяжеловато, а не новичку уже не надо.
Сам бы для начала посоветовал Лафоре Р. Объектно-ориентированное программирование в С++. После него и Страуструп более менее пойдёт

У Лафоре код с UB, для начала его нельзя читать. Вместо него "Язык программирования C++. Базовый курс" - Стенли Липпман или "Язык программирования C++. Лекции и упражнения." - Стивен Прата.

Добавил бы: Иван Чукич, "Функциональное программирование на C++". Хорошее дополнение к книге Мейерса по Modern C++.

Очень странный набор книг. Для кого он? В заголовке написано Для разработчиков. Возникают вопросы. А разработчиков чего? Разработчиков на чём? Для разработчиков на C++? Хорошо. Какой уровень этих разработчиков? Для молодых разработчиков давным давно есть список проверенных книг, который постоянно обновляется. Всё что в него не попало, либо повторяет уже существующие книги, либо узкоспециализированные книги, которые понадобятся только в конкретных задачах, либо шлак, который нет смысла даже читать. Список на английском, но книги хорошо гуглятся и можно найти русские издания. Вот их бы в виде статьи на хабре прорекламировать.

А ещё бы лучше по настоящему пройтись по современным российским авторам книг по программированию, и порекомендовать именно достойные к прочтению. Я бы с удовольствием почитал. Потому что, к примеру, список книг для C++ разработчиков на английском есть, я его выше указал, а такого же но с русскими авторами - нет. Чем не тема для будущей статьи? Тем более, что МТС вызвалась составлять списки. Почему бы не сделать это с умом для читателей?

Язык программирования C++. Краткий курс. Бьерн Страуструп

Есть уже третье издание переведённое на русский язык. Перевод любительский, но за основу был взят перевод второго издания.

https://coollib.net/b/661752-bern-straustrup-tur-po-s-kratkiy-kurs-trete-izdanie

Замечания и пожелания по переводу можно писать мне.

Sign up to leave a comment.