LINUX.ORG.RU

Материалы для экспресс-курса по C++

 ,


1

6

Товарищи, братья, друзья, господа!

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

★★★★☆

Последнее исправление: Sahas (всего исправлений: 1)
Ответ на: комментарий от Dudraug

Я концепцию перемещения понял за пол часа, какая неделя?
Для начала надо объяснить разницу между «быстрым копированием» и «глубоким копированием»

Ога, верю. Что такое «перемещение» с т.з. языка?

vcerloman
()
Ответ на: комментарий от Sahas

2) в нашей области (вычислительная физика) это практически единственный вариант из языков высокого уровня, дающий быстрый код.

Язык не даёт быстрый код.

И да, я делаю акцент именно на изучении C++

Гиблое дело. Хотя если тебе только научить кого-то дёргать апи, что является потолком для подавляющего большинство так называемых «С++-программистов».

Никаких там raw pointer

Если только дёргать апи - покатит. И то маловероятно, ведь большинство кода в лоулевел написано на си, а весь остальной крестовый код на 95% состоит из указателей.

неявного преобразования типов и подобной хрени...

Такого нету в си, да и подобная формулировка следствие непонимания базовых вещей, ту же систему типов Си.

Кресты являются сями, основная проблема, и основное преимущество крестов - это то, что они являются сями. Ты нихрена не поймёшь в них, не понимая си.

Да и в лоулевел мире существовать без си невозможно. А лоулевел это всё, что ниже кути. Да даже в кути ты с такими ограничениями не сможешь.

vcerloman
()
Ответ на: комментарий от vcerloman

Кресты являются сями, основная проблема, и основное преимущество крестов - это то, что они являются сями. Ты нихрена не поймёшь в них, не понимая си.

надеюсь, что мне удастся «переломить» этот стереотип :)

Sahas ★★★★☆
() автор топика

Lippman - C++ primer. Написано более-менее доступно, но с экспресс-подготовкой... В общем, как вариант - дальше смотри сам

Deleted
()
Ответ на: комментарий от Sahas

Забыл напейсать - вроде не ниже пятого издания нужно для ++11

Deleted
()
Ответ на: комментарий от Sahas

Ну невежество всегда толкает на необоснованные позывы срывать покровы. Ничего нового.

Ты мне можешь попытаться рассказать о том, что такое decay, почему функция не тип, почему «» не строка, почему нельзя взять «ссылку» на перегруженную функцию? И подобные вопросы можно продолжать до бесконечности.

vcerloman
()
Ответ на: комментарий от vcerloman

Ты мне можешь попытаться рассказать о том, что такое...

даже пытаться не буду — мне работать надо :)

Sahas ★★★★☆
() автор топика
Ответ на: комментарий от Sahas

В том и дело. Почти все нюансы в крестах - прямое, либо косвенное следствие из логики си. И ты их без учёта си не поймёшь и не объяснишь.

Да и не пытайся, не надо - зачем. Лучше взболтнуть какую-то чушь и в кусты.

vcerloman
()
Ответ на: комментарий от Dudraug

Нет. На уровне языка никаких владений, ресурсов, передач и прочей подобной лексики нет.

Концепция куда шире пары глупых фраз, про передачу какого-то неведомого владения. Точно так же и понимание существует параллельно вере.

vcerloman
()
Ответ на: комментарий от RazrFalcon

Учитывая что в C++ за перемещением следит автор, а не компилятор.

Отнюдь, попробуй-ка скопировать move-only тип.

annulen ★★★★★
()
Ответ на: комментарий от annulen

Никакого перемещения, никакого «копирования» не существует на уровне языка. На уровне языка существует копирование, но это не то, что ты себе представляешь.

На уровне языка существует только && и правила вывода T &&. Всё остальное - логика сверху. move-only тип итак копируется.

Это концепция уровня программы, т.е. поверх языка. А всё это лежит на плечах «автора», а не компилятора.

vcerloman
()
Ответ на: комментарий от Sahas

Вот от этого увольте! Я придерживаюсь концепции, что из C надо тащить по минимуму

Да, но ты просто рассрочишь набивание шишек на долгий срок. Ну, не будет сырых указателей, а будет например лямбда с «неудачным» захватом по ссылке, и всё накроется. Без некоторых шишек не выйдет, и проще их набить на детских граблях C.

anonymous
()
Ответ на: комментарий от RazrFalcon

std::move это костылик для xvalue. prvalue и lvalue компилятор без труда разруливает и задача человека - всего лишь предоставить нужные перегрузки

Deleted
()
Ответ на: комментарий от anonymous

Моя (основная) цель — чтобы студенты не «шугались» при виде синтаксиса C++, а могли более-менее адекватно разбираться в чужом коде хотя бы на уровне «что где подправить, чтобы стало за...хорошо» :)

Sahas ★★★★☆
() автор топика
Последнее исправление: Sahas (всего исправлений: 1)
Ответ на: комментарий от RazrFalcon

Я могу попробовать обратится к объекту после перемещения.

Можешь, но хороший компилятор и об этом сообщит

annulen ★★★★★
()
Ответ на: комментарий от annulen

Вот в такой ситуации вряд ли:

class demo {
  std::string v_;
public:
  std::string take_away() { return std::move(v_); }
  void append(const char * sz) { v_.append(sz); }
  ...
};

eao197 ★★★★★
()
Ответ на: комментарий от Sahas

Надо очень много шишек набить на «старом» Си

Вот от этого увольте!

Но большая часть отличий С++ от Си основана на автоматизации монотонных действий из «переносимого ассемблера». И не приводя примеры, получим питон с ужасно неудобным процессом сборки всех зависимостей.

По best practice можно посмотреть в Awesome Modern C++

Тогда:

Что-то ещё рекомендовать без названия дисциплины, специальности и курса сложно.

AlexVR ★★★★★
()
Ответ на: комментарий от anonymous

Проблема с зомби-объектами проистекает из семантики xvalue. Только человек(а не компилятор) знает, в какой именно момент(xvalue живёт до конца блока) должно выполнятся перемещение

Deleted
()
Ответ на: комментарий от annulen

Ответов нет, так и запишем. Меня это прям удивило, что раст-адепт своей рандомной потугой попал, а ты сел в лужу.

vcerloman
()
Ответ на: комментарий от eao197

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

annulen ★★★★★
()
Ответ на: комментарий от AlexVR

Спасибо! Для моих целей этого за глаза хватит :)

CMake мне не нравится, для тестовых примеров будем использовать просто g++ с опциями, а для сложных уже есть готовая система сборки

P.S. Всё это нужно для освоения вот этой «библиотеки»: OpenFOAM

Sahas ★★★★☆
() автор топика
Последнее исправление: Sahas (всего исправлений: 2)
Ответ на: комментарий от Sahas

для тестовых примеров будем использовать просто g++ с опциями

Тогда лучше сразу make использовать, удобнее

annulen ★★★★★
()
Ответ на: комментарий от vcerloman

На уровне языка никаких владений, ресурсов, передач и прочей подобной лексики нет.

Ты продолжаешь открывать нам Великую Истину?

Когда мы узнаем ещё что-нибудь поразительное? Например, что на уровне маш. кода нет объектов, а есть только байты?

anonymous
()
Ответ на: комментарий от Sahas

там C++11

Это что, плохо? ИМХО для студента осилить большую часть нововведений 11 уже достижение, так что на более свежие стандарты я бы и ориентироваться не стал.

yoghurt ★★★★★
()
Ответ на: комментарий от vcerloman

Точно так же и понимание существует параллельно вере.

Ясно.

Dudraug ★★★★★
()

https://ebanoe.it/2015/12/15/interstellar-c-plus-plus/

Не освоишь ты ни ни С, ни С++, ни за 21, ни за 221 день. Даже если очень захочешь. Потому что для этого дела требуется особая ебнутость на всю голову, которая у тебя вряд ли имеется. И, конечно, чугунный зад. Только трушный некрофил будет получать кайф от динозавровых языков, где нет даже сраного сборщика мусора, не говоря уже об Exception handling и всём остальном. Каждый день в ебаном С++ людей гибнет больше, чем в автокатастрофах.

В целом - есть замечательная статья Питера Норвига, «Teach Yourself Programming In Ten Years». А способа экспресс-подготовки нет. И тем более, по C++. Касательно C++ же вообще, за одни такие предложения и мысли, надо жестко бить морду не слушая оправданий.

lovesan ★★★
()
Ответ на: комментарий от lovesan

С++ проще чем мат анализ или теорвер, а машин лернинг тем более
современному студенту, нет никаких сложностей в этих трех дисциплинах, так уж какой то простенький С++11 за месяц освоит
а те кто даже С++ освоить не смог, не понятно что вообще в ИТ делают, по типу lovesan троллять на форумах ? это их удел видимо, и статейки на ####ое ИТ пописывают :))

anonymous
()
Ответ на: комментарий от anonymous

С++ проще чем мат анализ или теорвер, а машин лернинг тем более

Только дебил мог такое написать, особенно с учетом того, какую мизерную и простенькую часть указанных дисциплин скубентикам преподают. Преподают из рук вон плохо, к тому же, а все же в головы что-то залазит.

С крестами так не получится. Это во-первых. А во-вторых, преподавание крестов в качестве одного из первых языков, как показывает практика, необратимо повреждает мозг и ставит крест на карьере человека как программиста, и вообще на его способностях к программированию в той или иной форме.

lovesan ★★★
()
Ответ на: комментарий от yoghurt

Это что, плохо? ИМХО для студента осилить большую часть нововведений 11 уже достижение, так что на более свежие стандарты я бы и ориентироваться не стал.

Согласен. Просто плюшки C++11 настолько хорошие, что я почему-то подумал, что в C++17 будет ещё лучше (так и есть, в общем-то, например, auto [x,y] = func(z)). А так разница для студентов небольшая

Sahas ★★★★☆
() автор топика
Ответ на: комментарий от lovesan

«Сегодня вы прослушаете мой новый курс „Программирование на C++ как на Python“» :)

преподавание крестов в качестве одного из первых языков, как показывает практика, необратимо повреждает мозг и ставит крест на карьере человека как программиста, и вообще на его способностях к программированию в той или иной форме.

Может, преподаватели плохие, а не студенты?..

Sahas ★★★★☆
() автор топика
Последнее исправление: Sahas (всего исправлений: 1)
Ответ на: комментарий от Sahas

Программирование на C++ как на Python

Дело в том, что такое не получится. Никаким образом.

Так что пока не поздно, рекомендую взять оный Python, забыть про кресты, и найти аналог библиотеки для Python или хотя бы биндинги - это труда не составит, в отличие от поставленной цели.

lovesan ★★★
()

преподаватель? конкретно под какую-то задачу/либу?

напиши свою методичку страниц на двадцать и пару лаб, да и все.

conalex ★★★
()
Ответ на: комментарий от annulen

Лучше, чем шелл-скрипт

bash легче понять, чем синтаксис makefile

Да и для простых программ можно без скрипта обойтись. А в Geany, который я для этих целей использую, вообще одной кнопочкой запускается компиляция :)

Sahas ★★★★☆
() автор топика
Последнее исправление: Sahas (всего исправлений: 1)
Ответ на: комментарий от lovesan

Только дебил мог такое написать

так мог ответить только поврежденный, что не осилил С++ ?
или в школе плохо математика давалась ?
в вуз не приняли дебилушку ?
как дебил малолетка самоучка на лоре на всех плюешь ?

anonymous
()

Экспресс по C++98 еще можно, но со C++11 хз.

BceM_IIpuBeT ★★☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.