tgoop.com/cxx95/115
Last Update:
#cringe #books
На данном скриншоте - последствие того, как автор поста на два дня положил систему для практикума форк-бомбой.
Но не стоит за него волноваться - он только получил отстранение от занятий на три недели, потом успешно выпустился из учебного заведения с дипломом баландёра бакалавра и забыл его как страшный сон.
Обзор книги "Введение в язык Си++" (2012/2020 г.) 📚
Jeder lacht, jeder lacht — ja
Все смеются, все смеются, да
Jeder lacht über dich
Все смеются над тобой
В #books есть обзоры на хорошие книги, но не хватает обзоров на примеры, каких книг не стоит писать. Я решил, что надо обзирать какой-нибудь университетский учебник, потому что его эффект более разлагающий.
Под руку попалось творчество уже знакомого нам Столярика. Уважаемый телезритель может засомневаться - нет ли у меня предвзятого отношения к нему? Нет - просто других методичек почти нет, и они слишком плохи, чтобы быть интересными.
Третья редакция опуса от 2012 года находится тут, мы будем кринжевать с нее. Ради справедливости, уже есть пятая редакция 2020 года (тут), но она слабо отличается от третьей - убрана часть фактических ошибок и добавлены новые ошибки рандомные факты, а про rvalue и фичи стандартов не рассказали (потому что Столяров не признает стандарты).
Книжка намеренно небольшая, потому что рассчитана на 6-8 лекций. За 4 года бакалавриата на C++ больше времени не находится, ведь так в учебный план не поместятся философия, урматы и основы экономики.
А ведь плюсы это такая глыба, что полный справочник позволяет Столярову обороняться от своих многочисленных врагов...
Полное описание всех возможностей языка и его стандартной библиотеки представляет собой книгу такого объёма, что ею вполне можно при желании воспользоваться в качестве оружия против врагов (в смысле чисто физическом).Предполагается, что читатель уже знает язык C и с него переучивается на C++, там описывается разница между языками
Для изучения базовых средств языка Си++ вам потребуется уверенное владение языком СиЗвучит аналогично тому, чтобы изучить французский язык, надо сначала выучить латынь (откуда le français произошел), а потом выучить дифф между латынью и французским
Языки упорно называются "Си" и "Си++", одобряем патриотический перевод
В главе
Язык Си++ и его совместимость с Си
нет ни слова про действительную совместимость языков через extern "C"
.В языке Си++ введен механизм **защиты**, который позволяет запретить доступ к некоторым частям структурыИнтересно, как "инкапсуляцию" перевели как "защиту"... Еще можно переводить "полиморфизм" как "превентивный удар", а "наследование" как "хлопо́к". Там много такого надмозгового перевода.
Мы могли бы написать и так:Фразу "unnamed object" из Стандарта лучше перевести как "безымянный объект". Но лучше бы были рассмотрены категории выражений (
double mod = str_complex(2.7, 3.8).modulo();
В последнем случае мы создали временную **анонимную переменную** типа `str_complex`
lvalue/rvalue
и их подвиды) и их поведение, вместо этого всё объясняется "на пальцах" и размыто, а про move-семантику нет ни слова.На примере показывается полезность инкапсуляции в C++. К сожалению, не описана типичная Сишная идиома для инкапсуляции opaque data type, что было бы к месту для тех, кто переучивается с С на C++.
В главе про
const
ничего не сказано про ключевые слова constexpr
и (!) mutable
, что плохо, потому что не складывается понимание что это слово про логическую константность, а не физическую.Там же рекомендуется передача переменной через константную ссылку:
Так, если в описанном ранее классе `Complex` вместоПо крайней мере для 16-байтовых типов это неверно - их на x86-64 выгоднее передавать через копию. В проектах можно использовать чекер clang-tidy: пример проверки на godbolt.
Complex operator+(Complex op2) { ... }
написать
Complex operator+(const Complex &op2) { ... }
семантика кода не изменится, но физически вместо копирования двух полей `double` будет происходить передача адреса ...
ПРОДОЛЖЕНИЕ В КОММЕНТАРИИ