Это копия, сохраненная 25 мая 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Вместо шапки:
⚹ https://github.com/sosachbot/cppthreadhat/wiki
Ответы на вопросы:
⚹ https://en.cppreference.com/w/
⚹ https://www.cplusplus.com/reference/
Для указателей: ⚹
Прошлый (1000- постов, вы серьезно?) тред: >>1958641 (OP)
Тег нормальный, просто /cpp/ еще в теме написано.
Есть чудаки, которые на mingw-g++ умеют компилировать?
Короче решил себе на голову кросскомпиляцией на винде озадачиться, да еще OpenCL в программе использовать.
Без ОпенСЛя прога норм собиралась как в вижуалке, так и с mingw. С подрубкой ОпенСЛя возникли проблемы.
Сделал отдельную прогу для проверки СЛя: https://pastebin.com/fDGituYE
В общем сейчас дошел до того, что в 32-битном режиме с win32 исходниками СЛя (от nvidia cuda) оно даже работает. Но с 64-битными исходниками пахать не хочет - компилируется без ошибок, но где-то при первом же вызове clGetPlatformIDs оно просто выходит без слов. Пробовал даже с отладкой компилить и gdb шагать, но он естественно не показывает где возникает проблемес (либо я нубас и не разобрался).
В итоге обнаружил еще, что есть отдельный mingw-w64 под 64-битные сборки, но его использование не дало новых результатов.
Есть конечно варик, что мингв криво установлен, или какие-то библиотеки g++ не рассчитаны, чтобы работать с opencl, или сама opencl.lib не годная. И возможно под линухом оно нормально запашет, я еще не тестил. Но хотелось бы иметь возможность прямо с винды проверять возможность сборки под g++. Есть какие-то идеи?
Вулкан гибче и современнее. Опенгл попроще и работает почти на любых картошках.
ОН?
На самом деле крестозадроты и есть самые лютые анимешники, хоть и кидаются какашками в сторону Java/JS, чтобы хоть как-то подозрение отбить. Сидят перед компом круглыми сутками, получают красные шаринганы в обоих зенках, мечтая достичь мастерства хокаге, чтобы приняли в деревню Зеленой Сакуры писать батники.
Ghoul это не аниме - это образ мышления. А ты позер, чел )
Да мне похуй, я уже опель курю.
У той же CUDA есть ограничения на версии gcc. Так же скорее всего и тут - попробуй версии, предшествующие твоей (начни с 5.4).
А вообще лучше запили себе виртуалку с лялексом, смонтируй туда паку с проектом и там компилируй.
На счет версии гцц интересно, спасибо за наводку.
Надо конеш запариться с линуксом по-хорошему...
Напиши хоть что-нибудь на чём угодно.
Для среднего вкатуна\хоббиста в вулкане ровно 0 смысла, на опенгл можно сделать все тоже самое, только в разы быстрее.
На лялексе намного удобнее кросскомпиляцию делать - там есть всякие пакеты полезные для этого, проще синхронизация сорцов и дебаг удалённый (особенно gpu).
Поебстись с настройкой действительно придётся, но на виртуалке у тебя всегда будет готовое рабочее окружение, которое ты сможешь на любом компе поднять в пару кликов (и точки отката, если после грейда до новой версии gcc/cuda/cl у тебя всё по пизде пошло).
>Срр жив, иди уже сдох?
Дохлое тело имеет тенденцию раздуваться.
Стандарт срр имеет тенденцию раздуваться.
Криминалист-дэбил, ты? В каком же ты отчаянии раз не сумел в гуманитарку и пришёл в кресты.
Это растошизик, которые имеет тенденцию хлебать борщи.
Первое - низкоуровневое API для 3D-графики, второе - высокоуровневая либа для 2D-графики и не только.
Благодарю
На C++ Reference не всегда полные сведения приводятся. Таким образом, знатоком стандарта ты точно не станешь.
Да мне не нужно гуру. Мне чтобы я пришёл в контору где 11-20 и меня тупо взяли.
Это совсем другой уровень требований, для него не надо дрочить референсы, а просто где-нибудь просмотреть и запомнить основное.
Стандарт и цепепереференс это примерно как библия и библия для детей. Хотя последних я и не читал особо.
> библия
А знание плюсов у адептов тоже на уровне "читал только начало и несколько вторичных толкований, всё остальное слышал от знакомых" ?
This. Достаточно даже фронтенда, а не полного компилятора.
Надеюсь, cpr из этой коллекции уже умеет отменять запрос. А то в недра curl, по-моему, в своё время нельзя было влезть через эту библиотеку. Так я понял, что надо очень осторожно подходить к выбору библиотек для проекта.
Есть тут продвинутые юзеры Visual Studio?
Мб знает кто плагин какой-то для текстового редактора, чтобы из файлов исходников каждый метод можно было в отдельном окошке открыть и там же дебажить его?
Или какие альтернативы есть с аналогичными фичами?
Доебывает в простынях кода по 5к лок прыгать между функциями.
Закладки или навигация в неймспейсе не вполне подходят.
Хочу перекатиться в HFT. Что для этого надо знать? Всякие баззворды из вакансий типа FIX, FASt, CoralFIX и иже с ними - это вроде просто интерфейсы к биржам. А по самим торговым алгоритмам есть что-нибудь почитать?
Когда я полгода назад обосрался на собесе в Московскую биржу, меня дрючили lock-free многопоточностью. Там это реально активно используется? Опять-таки, что про это почитать? Кроме Уильямса
В чём проблема? Если for убрать то всё вроде работает. А если get size отъинтовать пропадает третья ошибка сверху, хотя по коду там везде инт как оно испортилось то?
Спасибо.
>Что для этого надо знать?
engrish + social skills, бери пример с 700к нвидиа-куна, поклонника "киберпанк 2077"
этот байт код задрал, опенсорс
И какие такие вопросы были там, что сам Вилли не котируется (которого начиная с главы про атомики приходится по 100 раз каждое слово перечитывать чтобы хоть что-то уловить из написанного)?
От тебя воняет пиздежом шо глаза слезятся
>которого начиная с главы про атомики приходится по 100 раз каждое слово перечитывать чтобы хоть что-то уловить из написанного
Ну так именно поэтому и спрашиваю чего другого почитать. Вот этот бложик мне нравится: https://preshing.com/20120612/an-introduction-to-lock-free-programming/ Хорошо, но мало.
1000 строк кода!!
Написал void operator++(structname* a), а компилятор говорит, что функция должна иметь at least one parameter of class or enumeration type.
Приходится свой язык программирования пилить, потому что C++ ужаснейший. Мой ЯП сразу понял бы, что если в оверлоаде оператора указатель, значит надо указатель на переменную кинуть и функция сама всё устроет в структуре, что надо и ничего возвращать не надо
>Как перегрузить оператор ++?
Взять class or enumeration type и перегрузить, или тебе мало способов выстрелить себе в ногу без модификации операций с указателями?
>Приходится свой язык программирования пилить
В сердцах бросаешь эту затею с визгами "ебал рот это айти" на попытке реализации хранения 32 битного инта.
> реализации хранения 32 битного инта
Да зачем, можно же просто сказать, что вот вам пачка UB и не ебёт, крутитесь как хотите.
>2021
>Использовать class в C++
Ага, смешно.
А насчёт энамов поподробнее. Я правильно понял, C++ даёт возможность взять enum {ABC; ABV; GDEYOZH} и перегрузить оператор на него? Но зачем?
>>1975508
Совсем того, что ли? Мне не нужно думать о хранении интов, этим занимается LLVM Где вообще может возникнуть проблемы хранения интов? В ПЛИСах?
Главная проблема в разработке компилятора моего ЯП была и сейчас является это темплейты. Я изначально очень плохо продумал архитектуру. Думал это будет препроцессинг -> парсинг -> байткодирование -> LLVM IR вкратце, у меня препроцессинг как в C, ещё перед LLVM происходит преобразование в "байткод" моего ЯП, но когда начал вводить темплейты, так таких костылей надобавил, теперь весь проект переписывать приходится. Между парсингом и байткодированием добавляю новый слой — обработка парсинговых данных, чтобы сразу сгенерировать все темплейты, заменить в операндах название темплейта на название полученной функции (исходя из нейм-манглинга для темплейтов моего ЯП), а также с перегруженными операторами и функциями так поступить.
Когда доделаю это придётся ещё и парсинг разделить на 2 уровня — токенизация и парсинг токенов, чтоб можно было чекать на ошибки сразу много инструкций и выводить хотя бы номер строки, где ошибка.
В очередной раз убеждаюсь, что крестаны хейтят всё, что не велосипед. Казалось бы: есть инструмент - пользуйся. Но нет, хочу заново писать 1001-ый генератор парсеров, очередной оптимизатор, свой гуй поверх GDI, свой игровой движок поверх OpenGL, свой буст, свой STL, свои строки, свой юникод, свой cmake. А некоторые ещё удивляются, почему крестотред один из самых живых, а просто все нон-стопом обсуждают, как правильнее велосипеды писать.
мимо
>Но зачем?
Например ты хочешь зацикливать чтобы GDEYOZH++ давал ABC. Значения в енуме ты так то произвольно можешь раздавать.
80% крестовой работы это кастомизация велосипедов и всего 20% RnD.
Если гипотетически изъебнуться и заставить скомпилироваться твой код, то твой оператор++ не будет вызываться с переменными structname. Он будет вызываться только с указателями на structname. А так низзя. Такая операция уже определена в языке и имеет смысл сдвига указателя на конец твоего structname.
Если тебе надо инкрементить внутренности structname, то передавай его по ссылке. А лучше объявляй как член structname и ничего явно не передавай
structname& structname::operator++(); // преинкремент
structname& structname::operator++(int); // постинкремент
Тут ведь как дела обстоят. Вот допустим есть тест на коронавирус. JS/Java/Python господин будет пользоваться им без сомнений. Плюсовик залезет посмотреть чё там за тест - а он оказывается китайский и там палкой в жопе ковыряют. Доложит куда надо. ПМ скажет, что на американский рынок мы с такой медициной не пролезем, поэтому надо переписывать.
>C++ даёт возможность взять enum {ABC; ABV; GDEYOZH} и перегрузить оператор на него? Но зачем?
enum class {
>сам Вилли не котируется
хуевая книжка, на форуме мамонтов (rsdn) обоссали ее и абсолютно справедливо
При том что я подключаю библиотеку на крестах, очевидно. И нахуй мне знать, как работает ОС, я у мамы погромист, а не одмин. Может, мне еще схемотехнику изучить?
Чтобы нажать кнопку смыва, не обязательно знать, как устроен унитаз, там интуитивно понятный интерфейс. А тут какое-то говно на костылях, работающее через жопу.
Иногда кстати там слишком много методов хер поёмешь че нажать, а иногда даже встречаются и без сокрытия....
Тут везде костыли, потому что разрабатывалось очень давно, с тех пор многое что поменялось, а архитектура осталась та же. Так и живём.
Для таих целей, и не только в VS, придумали разделение кода между несколькими файлами, в идеале - один класс-один файл.
Так это и есть один класс на 5клок. Ну лан, не 5, несколько файлов по 2клок. Реализации методов строк по 100-200, меньше уже не сделаешь. В любом случае бывает приходится из одного конца файла скакать в другой, чтобы раскурить что как связано, откуда куда какие данные текут.
В ВС можно конечно несколько раз файл открыть, но оно через жопу делается, и можно потерять нужный метод.
открываешь еще одно окошечко с тем же файлом и смотришь
Ну можно тогда каждый метод в отдельный файл вынести. Все равно по true-way реализация методов делается вне класса, через :: .
Меня как-то приглашали в одну контору, где все, от эйчара до тимлида, были тянки. По крайней мере те, с кем я собеседовался.
разумеется я туда не пошел
Представил, какой у них там змеиный клубок, и как мне в их коде придется ковыряться.
Инцел, спок.
Разве что мозги.
ты для них будешь бесполым Коленькой. Они при тебе будут Ерох, меськи и труханы обсуждать.
В ойти отделах, упакованных тнями, недоебит в воздухе витает, а все Ерохи разобраны курочками из финансов, hr и бухгалтерии.
Ходил как-то в контору, где игрульки под мобилки делают. Там бабцов вот прям овердохуя было. Довольно смело подкатывали, хотя видели меня первый и последний раз.
А ты продолжай отрицать и рефлексировать.
Больше половины были норм. Там же всякие художницы, аниматорши, тестировщицы, комьюнити менеджеры, hr. Всем в пределах 25.
Был у нас лид-натурал. Он когда на дейли митинги приходил от него метра за два несло немытым телом (такой лайтовый аромат бездомного). Чуваку было немного за 30 и он всего пару недель ходил чистым и стриженым как раз перед увольнением.
Вангую "g++" не является внутренней или внешней командой, исполняемой программой или пакетным файлом.
А на винде под вскод есть альтернативы мивины? Я не шарю просто.
компилирует, но при попытке запустить файл пишет:
Сбой выполнения программы main.exe: Указанный исполняемый файл не является действительным приложением для этой операционной системы.строка:1 знак:1
+ .\main
+ ~~~~~~.
строка:1 знак:1
+ .\main
+ ~~~~~~
+ CategoryInfo : ResourceUnavailable: (:) [], ApplicationFailedException
+ FullyQualifiedErrorId : NativeCommandFailed
Проблему решил, убрав -с
Теперь конструкция выглядит так: " g++ -o <output_filename> <filename> ", все работает.
Что не так? Турбо-паскаль если конкретнее. Просто зачем мне тратить время на мертвый язык?
>мертвый язык
Именно. Сейчас даже в школах питон учат. Ты для себя определи чем хочешь заниматься и исходи из этого. Для т.н. os unix - гуглишь lpic сколько-то там.
Так паскаль там только в начале, потом будет ассемблер, си и в конце плюсы. Можно конечно идти по пути гугла и тому подобному, но в этой книге вроде как всё настолько хорошо написано что позволяет сэкономить время на обучении.
Зачем мне эти поделки майкрософта...
Если реально хочешь сэкономить время - бери да учи чистый С. Самая адекватная база программирования на нём.
Твоё дело.
а еще у Столярова ассемблер есть
Паскаль не мертвый, это учебный язык нахуй, и он охуенен в этой роли. То что сейчас в школах учат питон очень заметно по современному софту, как сраный текстовый редактор или сайт в браузере отжирает половину ресурсов.
>>1976578
А книжки Столярова годнота, на самом деле. По крайней мере для тех, кто хочет угореть по хардкору, а не сайты на вордпрессе клепать под смузи с кейками. Причем они разделены по уровням, так что ты можешь начать откуда сочтешь нужным.
понять бы о чем ты XD
я не прогер, так, от нечего делать змейки делаю, да танчики пытаюсь понять как сделать
спасибо за ответ
да не, я понял, что это пробел, я не понимаю почему эта библиотека(?) мертва
слишком поверхностные знания
Она ещё со времён DOS и оставлена для совместимости по приколу. Для своих хеллоуворлдов юзать можно, но для чего-то серьёзнее лучше взять что-то другое.
>для чего-то серьёзнее
Ну консольные игры - это скорее из области ненормального программирования, чем что-то серьезное.
>лучше взять что-то другое
А что конкретно?
В свое время искал альтернативы, лучше getch() для ввода ничего нашлось. На винде либо винапи, либо PDCurses. Все остальное слишком тяжеловесно и нелепо для консольной игрушки. Не КуТэ же наворачивать ради этого.
Винапи в части консольного ввода более многословный и дает какой-то невнятный фидбек (отклик в смысле), что важно для игры.
Ставишь MS Visual Studio Enterprise и у тебя автоматом включается самый лучший в мире дебагер.
Ну или ебись с поделками, типа code::blocks и иже с ним. А лучше gdb в зубы и отлаживай.
Ха ха.
Покажи вкладку Fortran. Чёт прям удивлён, что такое в 2020++ ещё осталось.
Сейчас фортран все еще применяется в высокопроизводительных вычислениях, хуле бы вкладке не быть.
Некоторое время назад мы активно весь этот фортран выкидывали из системы под MPP. Математика там была действительно хороша, но что толку, если таких программистов нужно выковыривать из НИИ в каком-нибудь зажопинске.
>Подскажите как лучше всего отлавливать утечки и UB если я работаю в студии?
Enable GC and warnings as erros
>как работает ОС
>погромист, а не одмин
Пчел, это троллинг тупостью или ты реально довен? Видать век петушиных веб-технологий заставил всех зумеров деградировать до уровня овощей. Пиздец, я просто в ахуе, мне нечего больше сказать.
Ты в курсе, что писать лоу лвл системный софт на расте без ансейфа невозможно? Или ты растошиз в розовых очках?
откуда подпрограмме знать чо там делает программа основная и какая там сраная фс? есть только инструкции для вызова апи типа открыть файл и т.д.
вот этот текст копируй в их тред
Так написано в стандарте с++98, если их разнести перестанут работать старые программы.
900x506, 0:05
Кхем, что, опять сканировать код?
В 11 очень много всего. В 17 из полезного filesystem, string_view и распаковка структур. Остальное всё хуйня или доработки и упрощения того, что и так было.
Для 98% задач C++11 вполне достаточно.
А где?
<thread1>
sem_wait(&sem);
....
<thread2>
sem_post(&sem);
sem_destroy(&sem);
...
В проде не все на С++14 перешли, не говоря о С++17. С++20 в лучшем случае к 2030 году войдет в "оборот"
хз где описано, но по здравому смыслу - нельзя в принципе с ним что-то делать внутри конкурирующих потоков.
int a[10];
a = { 1, 2, 3, 4... };
Аналогично для векторов и т.д.
Откуда вообще тянется запрет на такое присваивание?
Причем если обернуть массив в структуру, то такое присваивание будет работать, то есть технически нет никаких ограничений на работу такого присваивание. Зачем создавать их искусственно?
возможно потому, что конструкция, { 1, 2, 3, 4... } - это инициализатор массива, а у тебя он уже инициализирован ранее.
Потому что это синтаксический сахар, вот так вот сделали, по другому значит не сильно нужно. Нахуя тебе в середине кода реинициализировать целиком? Наверняка ты делаешь какую-то дичь, если у тебя возникла такая потребность.
Перезапиши в цикле, в чем проблема? Сделай отдельный массив с дефолтными значениями, если тебе нужно забивать именно конкретными ненулевыми значениями.
Массивы не поддерживают копирование еще со времен C.
В сях все сделано таким образом, чтобы оно наиболее прямо ложилось на ассемблерные инструкции. Иногда C называют "кроссплатформенный ассемблер".
>невозможность
Копирование массивов можно реализовать по разному. Если бы в языке жестко закрепили какой-то один способ, вот тогда можно было бы говорить о невозможности (других способов).
А так мы имеем не невозможность, а возможности для реализации любых фантазий: хочешь - заворачивай в структуру, хочешь - вызывай memcpy(), хочешь - обмазывай функциями на все случаи жизни в процедурном стиле.
>a = { 1, 2, 3, 4... };
Не всем может понравиться то, что тут происходит "между строк".
>Нужно освоить стандарт 11-го и 17-го годов. Если кратко, что самое основное и самое важное привнесли в эти стандарты?
метапрограммирование стало возможным делать в итеративном стиле, а не трюками в функциональном стиле как раньше ((
по итогу стало удобней, но менее интересней :P
еще добавили всякого синтаксического сахарку в виде вывода типов, лямбд, using и прочаа.. по итогу стало многое писать тупо короче и еще можно "по месту" юзать..
r-value ссылки и move-семантика с этой точки зрения одно из важнейших изменений языка, тк действительно добавляют новые семантические модели в язык :P
Раньше можно было только на C++, QML появился позже, чтобы вместо ебли с виджетами на плюсах клепать гуй примерно так, как это делают вебмакаки для браузеров, а на плюсах писать только логику.
То есть гуи на qml это уже стандарт для qt? Приложухи не тормознутые получаются? Или qml так, для чего-то простого?
QML - это сейчас норма, но нельзя сказать, что прям стандарт. Конечно, он более прожорливый, чем обычные плюсы, и тут предполагается выбор между производительностью приложухи и скоростью её разработки.
>>1978455
Да куда там, жопаскриптеры вон высрали Electron, в котором каждое такое приложение запускает по хромиуму и работает почти как обычная веб-параша. У них и логика на жопаскрипте.
Это как ксамл у шарповодов, только не такой всратый.
У тебя грубо говоря приложуха разделяется на фронт на кюмл с жс и бек на крестах. Довольно удобно на самом деле.
Потому что массив--это константный указатель. И это было так, ещё когда не было const.
О, братиш, я тоже только осваиваю qt бомбит с кривости среды после б-жественной студии
qml это как xml, только альтернативно одаренный, как и весь qt. На самом деле стандарт интерфейсов сегодня, по такому же принципу строятся гуи в ведроиде, в шарпе(WPF) и даже в браузере, чтобы жавамакакам не нужно было излишне нагружать мозг и переучиваться. Хотя это в самом деле удобно, по сути просто скрипт, описывающий элементы интерфейса, по которому компилятор потом строит рабочие объекты.
>бомбит с кривости среды после б-жественной студии
>чтобы жавамакакам не нужно было излишне нагружать мозг и переучиваться.
И че? Мы же не даем ссылку на другую последовательность интов, мы меняем значения по ссылке с помощью присваивания
Нет такой операции присваивания. Когда ты пишешь а = {...} то слева у тебя указатель, а справа массив. Немного не одно и то же.
Массив - это не указатель, а отдельный тип.
В большинстве контекстов он неявно преобразуется в указатель, но по "факту рождения" указателем не является.
Мне по правде говоря ваще похуй как оно там внутри работает. Мне нужно чтобы я мог ключи заранее создать, потом файл в exe скинуть на другую машину и безопасно подключиться.
Инициализация значением - это int a[n]={ ...},
а все остальное это присваивание. А чтобы научить компилятор разбираться в сортах присваивания, придется полностью переделать компилятор, и на выходе получится шарп/джава. И все только потому что какому-то ленивому хую на дваче лень прописать цикл.
OpenSSL же.
Хую зато не лениво ебаться с массивами вместо использования std:: array
УК РФ
Что незаконного? Или у нас тор запретили?
У меня лет 15 ушло. На переход с Си.
Сначала классами обмазывался. Затем и STL тоже.
Но вот сложный шаблон без справочника до сих пор не нарисую. Да и не нужно это в обычной практике. Классы и stl покрывают 90% потребностей.
там под капотом в конструкции { ... } вызывается инициализатор:
#include <iostream>
using namespace std;
class array{
public:
array(int i, ...){
cout << "Привет лох. Я вызван, видишь?" << endl;
}
};
int main()
{
array a = {1,1,1,1};
a = {1,1,1,1};
return 0;
}
Нет, под капотом это олдскульлый сишный массив, в котором переменная это физический указатель на нулевой элемент, и в котором прокатывают такие конструкции как b = *(a+i)
ты почитай, что тебе компилятор напишет, еблан - https://ideone.com/ps568P
prog.cpp:8:15: error: assigning to an array from an initializer list
Но это ты пихаешь, лол.
>>1978677
Вы ебанутые? Сырые сишные массивы никогда не были отдельными типами, это синтаксический сахар над указателем на указанный тип данных (int, char, struct Huy и т.п.).
int arr[5]; - arr это указатель на int и никак иначе. А конструкции типа arr[1] = 1337 это ничто иное нежели ⚹(arr + 1) = 1337. То бишь можно свободно юзать ту же арифметику указателей для данного массива, не используя индексирование через оператор [] вообще.
Ну и структура данных - это синтаксический сахар над парой указателей - на начало структуры и сдвиг элемента.
Не понятно о чем вы вообще спорите.
кро
С точки зрения языка С (и С++ тоже) сырой массив - это ни разу не отдельный тип, в этом весь смысл, а тут хуйню какую-то несут.
ну, строго говоря [] у тебя еще и память на стеке выделяет, чего простым * не добьешься.
но да, это указатель, конечно
Variable-length array относится к 99 стандарту С, в крестах их нет, то что у тебя компилируется даже без ворнингов - вина компилятора.
Это нестандартное расширение компилятооа, там и вложеные фунции где-то были.
Этот правильно говорит.
Да и с точки зрения C это тоже отдельный тип (array type поищи)
https://files.lhmouse.com/standards/ISO C N2176.pdf
Если бы это было так, сырой массив можно было бы вернуть из функции как и указатель.
Найти репозиторий, где лучше, чем в моем рабочем проекте, не слишком тяжело.
Если у тебя джава-стайл геттеры из единственного return, то компилятор заинлайнит, и разницы не будет.
>джава-стайл геттеры из единственного return
Будто что-то плохое. Как по-другому vector::size() сделать, например?
Синтаксический сахар - это оператор индексирования.
>Чому
Потому что ты и так имеешь доступ к данным, если конечно они не приватные в базовом классе, тогда да - через геттеры базового.
Derived::Derived(int value1, ... int value6)
: Base(value1, value2), ... Base(value5, value6)
Вопрос, как получить к этому всему теперь доступ? Геттеры и сеттеры есть в базовом классе, но теперь в наследуемом классе нужны геттеры и сеттеры для назначенных выше трёх базовых классов.
Как это решить и понять? Либо я неправильно понял ООП, либо делаю совсем не то. Примерно накидал как это выглядит вне реального проекта: https://pastebin.com/zTMGb17m
Здесь вот суть даже не в модификаторах, он здесь вообще не важен сам по себе, я его поставил с мыслью: "А что если в наследуемом классе писать private: Base kk[3];, а потом в конструкторе просто инициализировать этот массив инстансов и тогда уже получать к каждому из них доступ который даёт модификатор protected". Но тогда получается я делаю хуйню, потому что зачем наследоваться, если это уже фактически другой класс и я так же могу геттеры использовать или же наследоваться в таком случае есть смысл?
При создании экземпляра этого класса, поле b будет инициализировано нулем или будет иметь значение, которое хранится в выделенном куске памяти?
В прошлом треде спрашивал подобный вопрос, но там я приводил пример с классом, который имеет явный пустой конструктор по умолчанию без параметров. Понятное дело, что тут итак будет неявно создан такой же конструктор, но на всякий случай лучше переспросить.
Схуяли у тебя восьмибайтный указатель, а инты занимают по 4 байта? Обычно на x64 машине инт по 8 байт ведь тоже, чтобы соответствовать машинному слову
В прошлом треде анон отвечал со ссылками на стандарт, что с пустым конструктором по умолчанию, созданным вручную, поле is default-initialized, то есть нулем проинициализирует. А почему ситуация меняется, если используется неявный сгенеренный конструктор по умолчанию?
Я так понял, нулями заполняются только глобальные и статические переменные без явной инициализации. https://stackoverflow.com/questions/34389849/default-initialization-of-class-data-members-in-c11
В первом же ответе по ссылке написано If no initializer is provided, the rules of default initialization apply.
Что имеется в виду под initializer? Кто выступает инициализатором?
https://en.cppreference.com/w/cpp/language/initialization
Вот, я сам нагуглил. Там есть абзац о том, что такое initializer.
В общем, как я понял. Если мы создаем конструктор по умолчанию вручную, либо не создаем и компилятор его генерит за нас, в любом случае, если мы явно не предоставили initializer для переменной (не важно, поле это в классе или статическая/глобальная переменная), то эта переменная будет default-initialized. А по правилам default-initialization, поля класса инициализируются мусором из куска памяти, который они получили. Глобальные и статические переменные инициализируются нулями, так как global data memory весь зануляется при старте программы.
Кресты - это когда ты разбираешься в инициализации переменной целый час, при этом и то получаешь лишь общее понимание без деталей
Ну это из этой серии
Хрен знает, это Online GDB.
Да, конкретно по этой части, вроде, все правильно, но там еще есть пикрил. Я до этого момента думал, что выделяют всего три типа инициализации: копирующая, прямая и uniform (начиная с C++11). А тут обнаруживаю, что еще есть value, list, reference и aggregate инициализации. Я до сих пор не могу сказать разницу (под капотом, если она вообще есть) между int a = 5; и int a(5); А теперь еще и как понять, что происходит в момент char str[] { 'h', 'i' } и char str[] = { 'h', 'i' } ? Короче, взрыв башки
'
Всю жизнь думал, что размер int'а соответствует размерности регистра процессора. На 16 бит int двухбайтный же. На 32 - четырех. А поч на 64 бит он тоже 4 байта?
Тут скорее всего так:
byte (1) <= short(2) <= int(4) <= long(8) <= long long(8)
Если int будет равен 8, то для 4 или 2 байт просто не будет подходящего типа.
Зависит от контекста задачи, но вообще, геттерами код не испортишь.
Ну это все синтаксический сахар, как хочешь так и пиши, суть одна - в переменный объект записываются нужные тебе значения.
В данном случае инт сделали поменьше для экономии памяти, благо скорость от этого не страдает. По той же логике виндудятники и лонг сделали 4.
Размеры соответствуют стандартам целевой системы и флагам компилятора.
Ну кстати да. Может быть, по соображениям портируемости виндогуана. Но сделали, и кмк это хуже, чем l64.
Verdigris считает, что поделать. А qt - кусок дерьма. Если тебе нужен гуй - пиши на шарпе, не еби голову
Откуда вы лезете, блять? Это тред студентов, у которых в универе все ещё деды C++ насаждают, что ли? Один тут писал, что массивы - это указатели, теперь, оказывается, целых фиксированной ширины в стандарте нет.
https://en.cppreference.com/w/cpp/header/cstdint
Массив на стэке - это массив на стэке, а не указатель
>Сырые сишные массивы никогда не были отдельными типами, это синтаксический сахар над указателем на указанный тип данных (int, char, struct Huy и т.п.).
нет, это неверно для си и с++
массив это массив, отдельный тип данный
У тебя проблемы с английским? Там написано optional, стандарт железно даёт типы с гарантируемым минимальным размером, а не фиксированным.
>А qt - кусок дерьма. Если тебе нужен гуй - пиши на шарпе, не еби голову
Сам то писал? Впф ещё больший кусок дерьма.
И тут приходит аутист, который нихуя не понял смысл написанного, но очень хочет всем рассказать, какие они дураки.
Немного изотерического программирвания.
Короче бумер девственник решил сканировать свой мозг и переселиться в тело зумера чтобы сбросить листву. Думер и Зумер это внутренние объекты Бумера. Каким образом он может передать два числа в Зумера и инициализировать его крохотный мозг?
Пытаюсь перекатиться с шарпа на кресты.
Чувство, что из новой тачки с АКПП, климат-контролем и ассистентом парковки пересел на отрытый в сарае на даче дедушкин драндулет.
Приведи пример или пиздабол
Я не тот, что про структуры писал. В C++ тривиально показать, почему массивы и указатели - это не одно и тоже, даже без language lawyering'a
optional - это не значит, что это расширение компилятора, это значит, что это часть стандарта, которую необязательно поддерживать, чтобы считаться имплементацией с++
По факту все (оба два, ага) компиляторы ее поддерживают
Скорее в гоночный болид, скрещенный с большегрузным грузовиком и танком в одном флаконе. Они просто для разных задач.
Концептуально как раз это абсолютно разные вещи. То, что в плюсах и си массив неявно преобразуется в указатель на первый элемент в большинстве контекстов, не дает им никакой концептуальной общности. Массив - это объекты, лежащие друг за другом, а указатель - ну это, бля, указатель.
Если ты про std, то в шарпе без подключения библиотек ты тоже недалеко уедешь.
Концептуально разные, а по сути одно и то же. Ты еще модель ООП вспомни. Речь о том, что по сути.
Я тоже подумал сначала что они разные потому что бля, поинтер содержит только адрес а первый элемент массива еще и значение. Но родство у них есть. Просто это руссошвайн с последней стадией деменции, шизы и рака мозга придумал клийбейтную идею для статейки. Ненависть.
ахаха бля, жиза. Но в С 17 там более менее уже развился, но до шарпа еще далеко.
>а первый элемент массива еще и значение
Хуею с даунов.
a[0] - значение.
a - указатель.
Строго говоря, ты можешь создать указатель
int* p = new int();
и провернуть такую хуйню:
p[10] = 1488;
Если не вылезешь за пределы выделенной памяти, то даже не заметишь, что тут что-то не так.
зато можно собрать то, что тебе требуется) Конечно фреймворк бы не помешал, как в NET, где все необходимое есть, но имеем что имеем.
квадратные скобки для доступа к блоку памяти это просто сахарок, безбожное ты скотоублюдище.
квадратные скобки при объявлении массива это другое.
p[10] это ты просто сдвинул указатель на 10 позиций.
понял?
Успокойся, так как Мейерс никто не пишет. А кто пишет, тот дурачок, не заботящийся о читаемости и поддерживаемости своих высеров
А почему он тогда в факе и подписан чуть ли как не мастхев? И что заместо него в таком случае читать? Про stl`ку или ...?
>Если не вылезешь за пределы выделенной памяти, то даже не заметишь, что тут что-то не так.
>1488
Как ты в пойтер запишешь значение? Кроме адреса.
>квадратные скобки при объявлении массива это другое
Да-да, это другое. Компилятору только рассказать не забудь.
>>1979894
Квадратные скобки это операция разыменования указателя, блеать. Поэтому p[10] это запись в ячейку памяти (p+10sizeof(int)). Это именно то, как работает сишный "массив".
спасибо, что поднимаете мою самооценку
Ну ок я разобрался. Теперь бы еще разобраться как в точности scanf работает. Или лучше getline. Хочу например считать csv файл. В файле эксель он в несколько строк (как это влияет не знаю). cin.getline(x, n, ','); написал но почему то крашится в конце файла.
Я че дебил с компилятором разговаривать? Выделение памяти под несколько последовательных блоков памяти и как ты сам написал операция разыменования указателя. Чуешь разницу?
Короче массив это последовательность указателей лежащих (последовательно) в памяти.
Нет, указатель это просто контейнер с адресом на блок памяти какого-то типа. Массив это последовательность блоков памяти какого-то типа.
>Выделение памяти под несколько последовательных блоков памяти
Наконец-то ты понял, чем отличается массив от указателя. Только выделением памяти при инициализации.
Слыш
Старшой
Расскажи как мне переменной внутреннего объекта второй степени присвоить значение.
Так у меня нет доступа через голову серединного объекта. Только если функцию в функции вызывать чтобы пробить инкапсуляцию. Я по-умному хочу.
Во-первых ты не прав, во-вторых я вообще на другое отвечал, на разницу между доступом к памяти с использованием квадратных скобок и объявлением массива.
С++ тред 2021. Итоги.
>Во-первых ты не прав
Ну раз ты так сказал.
>на разницу между доступом к памяти с использованием квадратных скобок и объявлением массива.
Ну то есть опять, массив отличается от указателя только инициализацией.
>>1979916
Речь не о разнице между абстрактными понятиями, а о фактической разнице в конкретно взятом языке.
Кабуто это что-то необычное для мира с++.
Вон Тимур Домлер признавался, что в течение нескольких лет полагал, что все инициалируется по умолчанию. И смело хуярил продакшен.
>Это тред студентов, у которых в универе все ещё деды C++ насаждают, что ли?
Это тред непознаваемого языка. Пора бы уж привыкнуть.
Это БАЗА. Которой нет. Где её взять я хз. Читал только Липмана урывками а так учился на видео потных индусов долбоебов.
Ок. А что после него? Так, чтобы у меня общая картина была.
Страуструп.
Столяров.
Мейерс.
На ютубчике есть годные лекции, например Хирьянов очень тщательно разжевывает достаточно фундаментальные вещи.
> Ну раз ты так сказал.
Да, я выше написал разницу, разуй глаза ебать.
> Ну то есть опять, массив отличается от указателя только инициализацией.
Ты тупой или прикалываешься? Ты разницу между ДОСТУПОМ и ИНИЦИАЛИЗАЦИЕЙ понимаешь? Понимаешь, что это разная семантика у скобок в разных случаях, на хуй ты переводишь тему на сравнение инициализации массива и инициализации указателя? НУ БЛЯ ЕПТА МАССИВ ОТЛИЧАЕТСЯ ТОЛЬКО ИНИЦИАЛИЗАЦИЕЙ ГЫГЫГЫГЫ Давай пукни еще что-нибудь не по теме, чепуха.
Я просто хотел дискуссию поддержать. Не молчать же как некоторые. Не молчи анон.
Да, это C++ тред, самый что ни на есть типичный. Я сначала хотел бомбануть на тему "какая нахуй разница", а затем вспомнил, в каком треде нахожусь.
>массив отличается от указателя только инициализацией
Типом он блядь отличается. Т И - П О М.
Знаешь, есть такая маза - типы данных?
Я не хочу взрослеть!
Я пользуюсюсь 14. Слышал тут один понтовался что на собесах спрашивал конторы какой у них стандарт чтобы если они начнут мямлить сразу нахуй. Он переворачивал игру.
Ну смотри, есть тип int. Я могу его вернуть. Есть типа int звезда. Его я могу вернуть. А есть типа int[3]. Что с ним не так, почему его не могу вернуть? Зато могу вернуть struct { int[3]; }.
инт можно вернуть, потому что инт поддерживает копирование.
Передача и возврат в/из функции - это всегда копирование.
А как это сделать? Все массивы вида int [] совместимы. Сколько байт должен заготовить caller на стеке, чтобы ему вернули массив? В случае структуры это константа.
А че смешного-то? Может, я просто не в курсе ваших мемов. Так-то норм чел, все правильно излагает, как раз для уровня двачеров.
Это канкатинация. Разницы никакой. Мой даунский умишко пропочествует что-то про потоки но не будем об этом.
ТО.
В функции ты оперируешь вновь созданной ссылкой. Все, что нужно, было скопировано в эту новую ссылку при ее инициализации.
"Передача по указателю" и "передача по ссылке" - это просто устоявшиеся фигуры речи.
Фактически у функции существует всего один механизм передачи - это копирование.
А почему бы вернуть не указатель, а int[3]?
Частный случай.
ты блядь мамонт сука. Когда все на автомобилях ездят, ты на колеснице катаешься? Сочувствую
А если я хочу массив на стеке вернуть, чтобы по возвращении в результат записалась копия?
Таджик потихоньку пилит таску.
А кто освобождать твой сраный хип будет? Верни массив со стека на стек или ставь обратно Пистон.
Это рофл или так ирл где-то бывает? Мой препод таскает мою группу по С и говорит что струны это говнище. Говорит будем писать свои библиотеки и мы будет профи. На полном серьезе говорит.
Your license has gone stale and must be updated.
Что за хуйня нормально vs работала, как это пофиксить?
(аккаунт аутлука саспендед, просимт номер)
ДА вот это я хотел скинуть.
Все верно говорит. Любая дефолтная либа - кратное падение скорости выполнения. Там где можно обойтись встроенными средствами, зачем усложнять себе жизнь?
Рофл конечно. А препод у тебя молодец.
аккаунтов много не бывает
Я в итоге сдался и укозал номер.
Номер кстате может быть абсолютно любой, главное смс'ку прочитать.
Мог бы просто функцию заинлайнить.
спасибо, воспользуюсь когда истечет новый аккаунт
Написали с ним кастомные "cstring.h"
Там всё с реддита пижженое.
Я про то, что плюсовая std - это шутка, блять, а не стандартная библиотека.
Тебе уже десять примеров привели, когда массив не дикэится до указателя, животное ты безобразное.
Не расстраивайся, в с++23 добавят string::split
1 ifstream csvfile("ms3.csv");
2 while (csvfile) {
3 csvfile >> W;
4 ...
5 }
В сsv закончились записи и во время выполнения третьей строки ошибка. Какую проверку мне сделать чтобы избежать краша? Пробовал good() не помогло
Массив-то сможешь отличить от указателя, мастер?
Только не в этом треде. Эти долбоёбы не могут ни на один нормальный вопрос ответить. Это вобще питонисты теребонькающие на плюсы по вечерам.
Я думал, это элита рунета по теме.
У меня считывает но после того как записи закончились крашится. Я пробовал проверку на eof но нихуя.
Нихуя не понятно. Что за W, какой его тип? Что это за конструкция?
>while (csvfile) {
>3 csvfile >> W;
Наверняка у тебя за пределы файла вылетает. Считывай посимвольно, с нормальной проверкой на eof, или лучше через буфер, если файл не текстовый.
Мы телепаты? Что такое W? До него функция чтения из потока может творить что угодно, например бросать исключение.
Массив нельзя вернуть и вообще вся семантика pointer decay появилась потому, что похожее поведение было в B, и чтобы меньше тратить время на портирование программ из B в C решили захачить похожее поведение.
Вызывать готовые внешние программы, например winmerge в консольном режиме.
че в гугле забанили? Чекать дату модификации
похоже, что ебанутый тут только ты)
как ты будешь с бубном плясать дурик, когда тебе нужно будет либу защитить от анализа?
буржуи этим тоже грешат, лол
>байт код llvm
Нет такого, есть обычный intermediate representation компилятора. Когда-то LLVM и хотели сделать а-ля Hotspot (откуда VM в названии и пошла), но так и не сделали и теперь это обычный компилятор.
рисунок так себе
тогда лошади были небольшого размера, по форме больше на пони похожие, и еще с длинной шерстью
можно просто описать с перегрузкой без какой-то особой "явной специализации (функция job)
https://ideone.com/GLNMZG
ахуеть логика - если разберут, то не надо ничего защищать) Тебе в геймдеве работать бы (нет)
Ты нихуя не защищаешь обфускацией, Дуняша. Если ты нахуй никому не нужен - то никто трогать не будет, если ты нужен - то тебя разберут хоть узащищайся.
>, додики?
Семантические свойства
Значение
жарг. гомосексуалист (в уголовном арго — молодой пассивный) В неестественно раскрытых совиных глазах Ястребова вспыхнули ржавые белки, в них металось безумие… Под ним бился молодой додик по кличке Снежинка. Л. П. Костомаров, «Десять кругов ада»
жарг. ирон. женственный, женоподобный мужчина И реально, что бы вы думали, из-за кулис выходит какой-то додик, тощий, в зелёных очках и с лысой головой, подходит к микрофону и начинает вещать что-то тонким, по-бабьи жеманным голоском.〈…〉Он очень томно растягивает слова, выпячивает губы и делает все эти педиковские ужимки, которые я так ненавижу. С. С. Минаев, «Духless. Повесть о ненастоящем человеке», 2006 г. (цитата из Библиотеки Максима Мошкова, см. Список литературы)
жарг. презр. или пренебр. хилый, ничем не примечательный человек Например, решит профессор закончить пару пораньше и для приличия спросит, всё ли всем понятно. Группа уже сложила вещички и ждёт предложения разойтись по домам, и в этот момент Борис поднимает руку и говорит: «А вот я не понял один момент…». В результате народ тоскует и томится, один лишь Борис внимательнейшим образом слушает и кивает головой. Чаще всего в процессе кивания у него появляются и другие вопросы. После проявления такого интереса к предмету преподаватели начинали его уважать, студенты называть додиком, а девушки не любить, несмотря на очевидную красоту. Эльвира Барякина, Анна Капранова, «Рыба в чайнике», 1999—2002 г. На прогулку во двор старейшей московской психиатрической больницы выпускали только с часу до двух дня и только самых спокойных обитателей. / — Маша, загоняй додиков! — кричала из окна второго этажа тётка в замызганном голубом халате и косынке. П. А. Астахов, «Квартира», 2010 г.
Синонимы
гомосексуал, гомосексуалист, педераст; устар.: мужеложец, мужеложник, содомит; устар., частичн.: малакия; книжн.: уранист, урнинг; разг.: гей, гом, гомик, гомосек, мужелюб; разг., субстантивир.: голубой; эвф.: сидор; сленг: в теме, зайка, крашу ногти, сижу в окопе, тематический, яойщик; жарг.: ахтунг, барсук, василёк, васька, галя, гамадрил, гамаз, гамазей, гамак, гном, гобсек, говносек, голубарь, голубец, голубок, голубчик, голубь, гома, гомарь, гомс, гомусик, двустволка, дирижёр, дочка, дуплан, ермак, жоподрючник, жополаз, жопочник, жопотрах, заднепроходец, звезда, кентавр, котик, кьюр, квир, маркоташник, мастёвый, мужиковед, папа, парафин, пед, педагог, педарь, педе, педерага, педераго, педеряга, педигрипал, педик, педр, педрик, педрила, педрило, педрильник, педруччо, педя, петух, пидарас, пидарь, пидер, пидор, пидорас, пидорасина, пидораскин, пидораха, пидорюга, пидорюжник, пидорюк, пинчер, половой демократ, пэдэ, рудокоп, руслан, субчик-голубчик, такой, темовой, тёпленький, тёплый брат, универсал, уник, уни, хали-гали, чебурашка, чичеряка, шахтёр, шкицнурик, шура; активный: акт, актив, активист, георгин, глиномес, говномес, дятел, кочегар, марксист, педикатор, печатник, печник, печной ящер, ромео, солидол иванович, топтун, трубочист; активный, субстантивир.: уважаемый; вульг.: чужежопник; пассивный: акробат, ананаска, армянская королева, бархотка, валет, вафел, вафёл, вафлеглот, вафлёр, вафлист, вафло, гребень, дама, даша, дашка, жена, женива, женщина, жопа, жопник, козёл, козлик, козочка, конь педальный, кочет, манька, маня, маргаритка, маша, машка, моргалик, мурка, наташа, наташка, незабудка, пассив, пассивка, пассуха, педер, педерасик, педермот, петюнчик, петя, пидовка, пидорша, пидаль, пидесса, пинч, плашкет, подруга, пярну, санта-лючия, Светка, сестра, туз червонный, умница, шпидагуз, шурик, шурин; субстантивир.: округлённый, заднеприводный, заднеприводной, дырявый; изнасилованный: обиженный, опущенный, проткнутый, петух, петушня, петушок, петяра, пятёра, пятёрка; собир., бран.: пидорасня
Антонимы
Гиперонимы
Гипонимы
Родственные слова
Ближайшее родство
Этимология
Происходит от ??
Фразеологизмы и устойчивые сочетания
у каждого додика своя методика
>, додики?
Семантические свойства
Значение
жарг. гомосексуалист (в уголовном арго — молодой пассивный) В неестественно раскрытых совиных глазах Ястребова вспыхнули ржавые белки, в них металось безумие… Под ним бился молодой додик по кличке Снежинка. Л. П. Костомаров, «Десять кругов ада»
жарг. ирон. женственный, женоподобный мужчина И реально, что бы вы думали, из-за кулис выходит какой-то додик, тощий, в зелёных очках и с лысой головой, подходит к микрофону и начинает вещать что-то тонким, по-бабьи жеманным голоском.〈…〉Он очень томно растягивает слова, выпячивает губы и делает все эти педиковские ужимки, которые я так ненавижу. С. С. Минаев, «Духless. Повесть о ненастоящем человеке», 2006 г. (цитата из Библиотеки Максима Мошкова, см. Список литературы)
жарг. презр. или пренебр. хилый, ничем не примечательный человек Например, решит профессор закончить пару пораньше и для приличия спросит, всё ли всем понятно. Группа уже сложила вещички и ждёт предложения разойтись по домам, и в этот момент Борис поднимает руку и говорит: «А вот я не понял один момент…». В результате народ тоскует и томится, один лишь Борис внимательнейшим образом слушает и кивает головой. Чаще всего в процессе кивания у него появляются и другие вопросы. После проявления такого интереса к предмету преподаватели начинали его уважать, студенты называть додиком, а девушки не любить, несмотря на очевидную красоту. Эльвира Барякина, Анна Капранова, «Рыба в чайнике», 1999—2002 г. На прогулку во двор старейшей московской психиатрической больницы выпускали только с часу до двух дня и только самых спокойных обитателей. / — Маша, загоняй додиков! — кричала из окна второго этажа тётка в замызганном голубом халате и косынке. П. А. Астахов, «Квартира», 2010 г.
Синонимы
гомосексуал, гомосексуалист, педераст; устар.: мужеложец, мужеложник, содомит; устар., частичн.: малакия; книжн.: уранист, урнинг; разг.: гей, гом, гомик, гомосек, мужелюб; разг., субстантивир.: голубой; эвф.: сидор; сленг: в теме, зайка, крашу ногти, сижу в окопе, тематический, яойщик; жарг.: ахтунг, барсук, василёк, васька, галя, гамадрил, гамаз, гамазей, гамак, гном, гобсек, говносек, голубарь, голубец, голубок, голубчик, голубь, гома, гомарь, гомс, гомусик, двустволка, дирижёр, дочка, дуплан, ермак, жоподрючник, жополаз, жопочник, жопотрах, заднепроходец, звезда, кентавр, котик, кьюр, квир, маркоташник, мастёвый, мужиковед, папа, парафин, пед, педагог, педарь, педе, педерага, педераго, педеряга, педигрипал, педик, педр, педрик, педрила, педрило, педрильник, педруччо, педя, петух, пидарас, пидарь, пидер, пидор, пидорас, пидорасина, пидораскин, пидораха, пидорюга, пидорюжник, пидорюк, пинчер, половой демократ, пэдэ, рудокоп, руслан, субчик-голубчик, такой, темовой, тёпленький, тёплый брат, универсал, уник, уни, хали-гали, чебурашка, чичеряка, шахтёр, шкицнурик, шура; активный: акт, актив, активист, георгин, глиномес, говномес, дятел, кочегар, марксист, педикатор, печатник, печник, печной ящер, ромео, солидол иванович, топтун, трубочист; активный, субстантивир.: уважаемый; вульг.: чужежопник; пассивный: акробат, ананаска, армянская королева, бархотка, валет, вафел, вафёл, вафлеглот, вафлёр, вафлист, вафло, гребень, дама, даша, дашка, жена, женива, женщина, жопа, жопник, козёл, козлик, козочка, конь педальный, кочет, манька, маня, маргаритка, маша, машка, моргалик, мурка, наташа, наташка, незабудка, пассив, пассивка, пассуха, педер, педерасик, педермот, петюнчик, петя, пидовка, пидорша, пидаль, пидесса, пинч, плашкет, подруга, пярну, санта-лючия, Светка, сестра, туз червонный, умница, шпидагуз, шурик, шурин; субстантивир.: округлённый, заднеприводный, заднеприводной, дырявый; изнасилованный: обиженный, опущенный, проткнутый, петух, петушня, петушок, петяра, пятёра, пятёрка; собир., бран.: пидорасня
Антонимы
Гиперонимы
Гипонимы
Родственные слова
Ближайшее родство
Этимология
Происходит от ??
Фразеологизмы и устойчивые сочетания
у каждого додика своя методика
так давай я тебе кину либу, ты мне разберешь алгоритм? Умник ебучий. Как же я ору с далбаебов, у которых логика: если взломают, то нахуя защищать? ))
вот я тоже хуй знаю, почему гиганты геймдева юзают денуву, раньше юзали старфорс и подобное, если всё ломается. Ну лохи же, правда.
Денува нужна, чтобы сломали не в первую неделю, потому-что ровно на первую неделю приходятся бОльшая часть покупок.
Но и как бы, денува вообще никак не защищает от вытаскивания ассетов и прочего.
>>1980637
Я не разберу - мой коллега реверсер - изи разберет. Если ты ее ОБФУСЦИРУЕШЬ - он ее так же изи разберет.
Компиляция сама по себе - достаточная защита от залётного. А не залётный разберет твою либу как нехуй делать, как бы ты ее не защищал.
>Денува нужна, чтобы сломали не в первую неделю, потому-что ровно на первую неделю приходятся бОльшая часть покупок.
а это значит не относится к софту?
Насколько сложно написать простую отслеживающую программу под Android, (кейлогер) (с учетом если ставить её самому и логи на почту к примеру отправлять)?
Возможно, но он не переносимый и не является байт кодом в том же смысле, что байт-код JVM или CLR.
>>1980600
У LLVM есть программные апи для построения IR и его компиляции прямо во времени исполнения (кажется его, например, RPCS3 использует), но это по сути только бэкенд компилятора. Фронтэнд и рантайм всё равно самому нужно будет писать, нельзя взять готовый LLVM язык и из коробки флагом подцепить к нему JIT-компиляцию.
Да что ты доебался. И схуяли IR является непереносимым, если сам смысл его существования в том чтобы создавать из него бинарники под любую поддерживаемую платформу?
Спасибо
Ну не знаю, первая Матрица прикольный фильм был. Думаю, это стоило того.
>LLVM
Говно ваш LLVM.
Не первом месте интеловский компилер.
Затем MSVC
Затем gcc/g++
И только затем LLVM
Ниже только С-компиляторы от Борланда или кто он там сейчас Embaradero?
И где-то на дне всякие tinyC и прочая поебень.
LLVM - распиаренное говно.
Да, это я сказал. Намедни вот видел старую тему на linux.org.ru, где один пятизвёздочный агрился на молодняк, за то, что тот хотел поставить gcc на Андроид в termux, вместо идёщего по дефолту Clang.
И тут подумалось - а чего это "илита" так надрачивает на Clang? Дык, Эппл же его внезапно использовала как основной компилер. Вот вы и слились в экстазе.
>ти исе не родися кадя йя тям завестивався
пчел, конечно аппле использует шланг, ведь они в него уже много лет контрибьютят. Ничто не компилирует обжц лучше шланга
Мое приложение содержит id клиента и токен. С одной стороны, даже если злоумышленник узнает их - да и поебать - при помощи них на сайте авторизуется юзер, причем своим логином/паролем, токен только для oauth. С другой стороны - это в любом случае плохо, Кто-то может хуярить запросы и заблочат мой токен.
Так вот, как хранить это? Т.к. сам веду разработку и открытый проект на гитхабе. В коде - очень плохо. Внешнего сервиса, откуда можно запросить - нету. Бд - не вариант - это будет один бинарник. Можно конечно что-нибудь вроде файла конфига не под контроллем версии, а под контроль - пример файла и инструкцию где взять токен. Хз короче, нужна подсказка.
Я пробовал несколько лет назад, но тогда я ещё не понимал ничего - и увидев 43 ошибки с ужасом закрыл, при том что я специально сказал ту же версию визуалстудии, что и была указана в либе.
Сейчас то же самое. Открыл для сравнения другую либу для физики (newton dynamics), запустил cmake - всё работает тут же, в cmake понятное содержание - а демки создаются и редактируются. Cmake даже пишет, что либа собралась и объектные файлы вот там-то. Почти как на питоне.
Запускаю bullet, какие-то значения в cmake не прописаны, какие-то файлы питона и луа там ещё, а в дополнительных папках странные уже скомпилированные екзешники. Ни в одном readme ни слова о том, как этим пользоваться. Мол просто запусти батник. Эм, а дальше?
Это не либа, а бред шизофреника - как будто кто-то несколько лет писал код "для себя" и в нём ориентируется, а потом прямо так и выложил его.
Вот я хочу скопировать код из демки с одним кубом и запустить её - какие мои действия?
Сначала cmake пишет "Cannot find source file" - я исправляю cmake (кое-как по смыслу там понятно какой файл ему нужен - но почему-то путь в cmake прописан неверно) - ошибка в нём исчезает, но появляется ошибка в самих хедерах, потому что они раскиданы по разным папкам, но в самих хедерах названия этих папок никак не указаны (а некоторые указаны). Ну и так далее. Пятый час пытаюсь этот мусор хоть как-то запустить.
17 стандарт и другие обновления языка это круто конечно, но нельзя было бы как-то в стандарт занести системы сборки, модули или ещё что-то? Это намного, мать его, важнее и полезнее для языка, чем template guides, которые в каком-то месте позволят записать шаблон не в три строчки, а в две с половиной. По назначению как pip в питоне. И более юзабельный аналог cmake само собой.
Уже не надо помогать, я просто сгорел и хочу выговориться, чтобы уснуть без дёргающихся конечностей. Я куду и torch быстрее настроил под кресты, чем этот мусор.
Уже решил попробовать поставить нвидиевский физикс - и почему-то я уверен, что за 30 минут снова всё заработает как надо, потому что я уже на странице загрузки вижу больше инфы по установке и настройке, а по первой же ссылке сразу же увидел смысл значений в cmake-файлах.
Я пробовал несколько лет назад, но тогда я ещё не понимал ничего - и увидев 43 ошибки с ужасом закрыл, при том что я специально сказал ту же версию визуалстудии, что и была указана в либе.
Сейчас то же самое. Открыл для сравнения другую либу для физики (newton dynamics), запустил cmake - всё работает тут же, в cmake понятное содержание - а демки создаются и редактируются. Cmake даже пишет, что либа собралась и объектные файлы вот там-то. Почти как на питоне.
Запускаю bullet, какие-то значения в cmake не прописаны, какие-то файлы питона и луа там ещё, а в дополнительных папках странные уже скомпилированные екзешники. Ни в одном readme ни слова о том, как этим пользоваться. Мол просто запусти батник. Эм, а дальше?
Это не либа, а бред шизофреника - как будто кто-то несколько лет писал код "для себя" и в нём ориентируется, а потом прямо так и выложил его.
Вот я хочу скопировать код из демки с одним кубом и запустить её - какие мои действия?
Сначала cmake пишет "Cannot find source file" - я исправляю cmake (кое-как по смыслу там понятно какой файл ему нужен - но почему-то путь в cmake прописан неверно) - ошибка в нём исчезает, но появляется ошибка в самих хедерах, потому что они раскиданы по разным папкам, но в самих хедерах названия этих папок никак не указаны (а некоторые указаны). Ну и так далее. Пятый час пытаюсь этот мусор хоть как-то запустить.
17 стандарт и другие обновления языка это круто конечно, но нельзя было бы как-то в стандарт занести системы сборки, модули или ещё что-то? Это намного, мать его, важнее и полезнее для языка, чем template guides, которые в каком-то месте позволят записать шаблон не в три строчки, а в две с половиной. По назначению как pip в питоне. И более юзабельный аналог cmake само собой.
Уже не надо помогать, я просто сгорел и хочу выговориться, чтобы уснуть без дёргающихся конечностей. Я куду и torch быстрее настроил под кресты, чем этот мусор.
Уже решил попробовать поставить нвидиевский физикс - и почему-то я уверен, что за 30 минут снова всё заработает как надо, потому что я уже на странице загрузки вижу больше инфы по установке и настройке, а по первой же ссылке сразу же увидел смысл значений в cmake-файлах.
А если пропихнуть их на этапе компиляции? 90% отпугнет что нет переменных открытыми текстом в репе.
Ну это типичный крупный попенсорс проект из начала 2000-х. У некоторых вся документация сделана через doxygen или прям в коде комментариями. Сама попенсорс концепция - это конструктор из говна и палок, которыми надо самостоятельно научиться жонглировать. Как ты это сделаешь - всем похуй.
>как pip в питоне
sudo apt-get install -y libbullet-dev
>более юзабельный аналог cmake
У yandex есть yamake, у google - gyp. Ещё можешь обмазаться maven или gradle как в питоне.
Мир не объект а пространство "открытого".
creat("token", 0600)
>Сама попенсорс концепция - это конструктор из говна и палок
Зачем так усложнять, есть же простая русская пословица: "Дареному коню в зубы не смотрят"
Ответ на любой вопрос криптографии
кстати github постоянно сканируют хакеры на наличие в выложенном коде паролей к аккаунтам или токенов.
че рили такие есть? Я помню как пиздюком был, тогда текстовые игры были в треде. И один лох написал аутоит скрипт для автоматизации) Я скрипт тогда декомпильнул, и там в исходниках, в комментах - был его логин и пароль) Тогда я себя хакером почувствовал, да)
разработчик для тестирования своего приложения вбивает пароль в код приложения, спецбот это обнаруживает. Слышал новости про утекшие пароли от amazon ws, тогда хакеры просто майнили крипту на сервере амазона
sfml используй
это C++, тут кнопок нет, тут консоль.
auto button = new QPushButton();
Window window1(WindowName, hInstance, nCmdShow, MAKEINTRESOURCE(IDR_MENU1));
HWND hButton = CreateWindow("BUTTON", "771", WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON, 100,100,20 ,20, window1._hMainWnd, (HMENU)ID_BUTTON, hInstance, NULL);
всегда улыбало кол-во кода, а так же кол-во параметров, передающихся в функцию, чтобы создать единственную сраную кнопку.
#include <Windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
MSG msg;
//if you add WS_CHILD flag,CreateWindow will fail because there is no parent window.
HWND hWnd = CreateWindow(TEXT("button"), TEXT("Easy"), WS_VISIBLE | WS_POPUP,
10, 10, 80, 25, NULL, NULL, NULL, NULL);
ShowWindow(hWnd, SW_SHOW);
UpdateWindow(hWnd);
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int) msg.wParam;
}
Кто говорил - что будет легко?
Пиши формочки на джаве, а логику на крестах
В маках какой-то свой порт, патчи от которого они иногда неохотно пихают в апстрим
Как на экскаваторе закрутить гайку?
Да, OpenCV написан на с/c++, местами на ассемблере и cuda. Для связки с другими языками сделаны бинды. Сам OCV всегда компилируется под целевую платформу и поэтому "чистый и быстрый". А обёртку вокруг него можно и на питоне писать, если нет других сложных вычислений и железка по типу raspberry pi. В остальных случаях делают на плюсах.
Мир это не объект а массив
Protected может пригодиться если свои библиотеки делать. В теории. На практике не знаю потому что не пишу библиотеки.
На вкат дается 3 года. Твои дейтсвия? Мои - читаю книги и литкодю. Получаю степень. Пробиваюсь на должность в шараге. Вроде ничего не забыл.
Protected иногда реально помогает, когда иерархия глубже двух. Но почти всегда лучше следовать принципу composition over inheritance, если можешь.
Стоит ли подписываться на ТехЛида за сто зеленых? Выглядит как разводка но по нему видно что он норм чел.
Какие киллер-фичи есть в 11/14 стандарте, без которых вам некомфортно писать?
А зачем оно тебе? У меня в одной из контор сидело 5 челиков, закончивших подобные курсы. Никто из них до сих пор ни лидом ни пмом не стал.
это тред писателей самодокументируемого кода
Да там не то чтобы безальтернативные ёбы. Просто писанины меньше выходит, а значит меньше шансов проебаться на ровном месте.
Так у него не про лидирование а про вкат.
стандартная библиотека с++
- Контейнеры (коллекции) и их итераторы
- Алгоритмы над коллекциями и их вычислительная сложность, гарантируемая стандартом O(...).
- Примитивы для многопоточности (thread, mutex, lock_guard ...)
- Умные указатели (shared_ptr, unique_ptr, ...)
- Операторы приведения типов (static_cast, dynamic_cast ...)
- Потоки ввода/вывода (fstream, ostream, ...)
- Строки
пчел похоже вообще даже о крестах не читал, раз задает такие вопросы) Только по вакансиях смотрел, куда податься
Крестовик всегда сначала гуглит если не знает. Ему перезвонят.
sf::View view(sf::FloatRect(0, 0, winSize.x, winSize.y));
view.setCenter(sf::Vector2f(0, 0));
Какие от этого профиты в сравнении с
sf::View view({0.0f, 0.0f, winSize.x, winSize.y});
view.setCenter(0, 0);
?
А в физиксе только под говностудию код, да что такое то...
Может кто-то с настроенной студией скачать 4.1 физикз и написать мне как много времени он потратил чтобы запустить одну любую демку?
Я не понимаю что делать, пристрелите меня пожалуйста.
Правил cmake, дошёл до "evaluating generator expression: $<NOT:> $<NOT> parameter must resolve to exactly one '0' or '1' value" - оно никак не подсвечивает где ошибка произошла и приходится самому искать этот NOT через поиск, потому что там много раз значение одной переменной перезаписывается в другую, а ошибка только в самой последней строчке отображается.
Потом пришлось вычищать всякие /d2Zi+.
В итоге cmake сработал нормально, и компилятору доставил нормальные флаги. После чего там какой-то rc-файл инклюдится с мусором вместо кода.
Я таким уродом-говночистом себя чувствую занимаясь этим, что просто капец. Ну не newton же в самом деле использовать. И мне верёвки нужны, который newton не потянет.
Упёрся в итоге в simd, который видимо сильно иначе записывается в студии.
Хочется скачать студию, написать dll-враппер на студии, чтобы код физикса не взаимодействовал с моим, и закрыть студию навсегда. Но это снова рутина, к тому же не факт что всё будет работать, если там какой-то кастомный join делать с каллбеком, или как там это организовано.
>>1981053
>У yandex есть yamake, у google - gyp
Анекдот про шестнадцать конкурирующих форматов помнишь?
Нет никакой проблемы, пока сам что-то делаешь - я бы использовал во всех своих проектах cmake на 10-20 строк с одним и тем же компилятором, и горя бы не знал. Проблема возникает, когда ты делаешь что-то используя условный yamake, а потом скачиваешь три либы - и одна из них это проект визуал-студии, вторая cmake, а третья вообще что-то безымянное - и нужно эту хуету вручную переписывать.
>>1982924
Не пиши. Там же вроде бы есть перегрузки, а если нету - можно добавить за пять минут.
Ты ненормальный, если на серьёзных щщах используешь sf::View, лол. Дико неудобная же штука (кажется, там setScale не устанавливал новые масштаб, а перемножал уже имеющуюся матрицу, так что правильнее было бы назвать функцию addScale - и в документации тоже как-то хреново про это написано), gluOrtho2D (или что-то поактуальнее на glm) в разы удобнее.
А в физиксе только под говностудию код, да что такое то...
Может кто-то с настроенной студией скачать 4.1 физикз и написать мне как много времени он потратил чтобы запустить одну любую демку?
Я не понимаю что делать, пристрелите меня пожалуйста.
Правил cmake, дошёл до "evaluating generator expression: $<NOT:> $<NOT> parameter must resolve to exactly one '0' or '1' value" - оно никак не подсвечивает где ошибка произошла и приходится самому искать этот NOT через поиск, потому что там много раз значение одной переменной перезаписывается в другую, а ошибка только в самой последней строчке отображается.
Потом пришлось вычищать всякие /d2Zi+.
В итоге cmake сработал нормально, и компилятору доставил нормальные флаги. После чего там какой-то rc-файл инклюдится с мусором вместо кода.
Я таким уродом-говночистом себя чувствую занимаясь этим, что просто капец. Ну не newton же в самом деле использовать. И мне верёвки нужны, который newton не потянет.
Упёрся в итоге в simd, который видимо сильно иначе записывается в студии.
Хочется скачать студию, написать dll-враппер на студии, чтобы код физикса не взаимодействовал с моим, и закрыть студию навсегда. Но это снова рутина, к тому же не факт что всё будет работать, если там какой-то кастомный join делать с каллбеком, или как там это организовано.
>>1981053
>У yandex есть yamake, у google - gyp
Анекдот про шестнадцать конкурирующих форматов помнишь?
Нет никакой проблемы, пока сам что-то делаешь - я бы использовал во всех своих проектах cmake на 10-20 строк с одним и тем же компилятором, и горя бы не знал. Проблема возникает, когда ты делаешь что-то используя условный yamake, а потом скачиваешь три либы - и одна из них это проект визуал-студии, вторая cmake, а третья вообще что-то безымянное - и нужно эту хуету вручную переписывать.
>>1982924
Не пиши. Там же вроде бы есть перегрузки, а если нету - можно добавить за пять минут.
Ты ненормальный, если на серьёзных щщах используешь sf::View, лол. Дико неудобная же штука (кажется, там setScale не устанавливал новые масштаб, а перемножал уже имеющуюся матрицу, так что правильнее было бы назвать функцию addScale - и в документации тоже как-то хреново про это написано), gluOrtho2D (или что-то поактуальнее на glm) в разы удобнее.
Понятность кода и исключение неоднозначных трактовок при его чтении. Видно, что куда и какого типа передается, без вот этого вот питон-стайла.
Так видно и без типов. Мой опыт 2 года программирования с нуля и моя позиция такая - если код нормально написан, он будет нормально работать. Типизация чисто для проверки - сомнительная вещь. К слову видел чуваков которые "кодят 10 лет" и ничего не умеют.
Вся твоя проблема в отсутствии опыта. У меня в крупном проекте (под студию) был bullet и с ним всё норм было. Даже июни на нём код писали.
>Проблема возникает
Когда ты собираешь проект из кучи thirdparty компонент. Так было всегда. Собственно поэтому все крупные конторы сидят на своих велосипедах.
Верно. И я горю от того, что не знаю как его получить, нет точки приложения сил - я не понимаю что мне сделать, чтобы разобраться в этом.
Сложный код можно разбирать и разделять на фрагменты, понимая как он работает. Можно прочитать книгу. Можно посмотреть другие примеры на похожую тему. Да что угодно можно, но трата времени приводит к пониманию рано или поздно.
Здесь же я могу пытаться нагуглить похожие ошибки в cmake/компиляторе и ... - и ничего из этого не приближает меня к понимаю как сделать правильно. Я нахожусь там же, где три дня назад. И книг по примерам настройки чужих либ на различных компиляторах и системах сборки я тоже не видел, на форумах на такие вопросы не отвечают, так как это не с++ код, которые касается всех с++ программистов, а какие-то конфиги или строки в cmake, которые касаются лишь ту часть программистов, которые используют тот же компилятор и систему сборки.
Вот сегодня вечером у меня будет ещё несколько часов - чем мне заняться, какое действия я должен сделать? Я не понимаю, это бесит и раздражает, и у меня возникают вопросы к "кому-то" и желание никогда с этим не разбираться, а вместо чужих либ писать свой велосипед - за это время я бы уже наговнокодил хоть что-то, пусть там бы и проваливались иногда одни фигуры сквозь другие, а башенка из кубов начинала бы дёргаться и дрожать - но даже это было бы лучше, чем ничего.
Я скомпилил демку bullet. Случайно. И горит от того, зачем я сидел ночью последние несколько дней и если "проблема была в этом!?" (нужно было исправить две строки в cmake и проблема решалась за пять минут - после которых 20 минут оно компилировалось) - то почему мать его гори оно в аду синем пламенем нельзя было сразу на своём говносайте написать, что нужно с вашим cmake сделать? Или хотя бы cmake так написать, чтобы ошибка происходила в этом месте - а не где-то совсем в другом.
Ну это часть нашей работы. На bullet хотя бы есть документация, а на проекты, которыми тебе придётся заниматься в реале, её нет и писали их редкостные мудаки. Считай что ты сейчас заглянул в горлышко бутылки, а приседания ещё впереди.
Почитал твой многострадальный дневник. Конечно же расплакался. А что это за куча насрана из кубиков?
То что мертво - умереть не может!
Нету её нихуя. В расте и D нет инфраструктуры, обжектив С только в эпплолегаси, в Go сборщик мусора и примитивный синтаксис.
не знаю что ты имеешь ввиду, но мы все проекты новые сейчас пишем только на шарпе. И разработка в разы быстрее, и писать приятнее. А по сравнению с девелоперской зарплатой - ну будем мы на 100 бачей в месяц больше за амазон платить ну и хуй с ним.
>В расте и D нет инфраструктуры
Зато в плюсах, бля, инфраструктуры хоть отбавляй. в каждом проекте свои строки
Проиграл. В расте в 3 раза более развитая инфраструктура, чем в плюсах. Все сейчас на раст поголовно переходят, на нем уже даже начинают писать драйверы в Линуксе, чтобы избавиться от сиподобного дырявого говна с UB. Бумер, плез.
>В расте в 3 раза более развитая инфраструктура, чем в плюсах.
Интересные маняфантазии. Пруфов, конечно, не будет.
Стандартная библиотека раста в несколько раз богаче стандартной библиотеки плюсов. И не забывай про crates, плюс не забывай про карго, который ссыт всем убогим симейкам и мейсонам на ебло. Дедуль, пиздуй реализовывать свои строки и split, это удел плюсодебилов-пердунов. Это же каким надо быть некрофилом, чтобы на сиплюс говне писать код в 2к21 году. Ладно там уже существующие проекты, их переписывать невыгодно, и разрабом приходится анально терпеть эту парашу, но новые проекты на плюсах ни одна уважающая компания пилить не будет. Гугл свою новую ОС на расте пишет с нуля, дабы выкинуть в помойку сраный ведроид, где линуксовое ядро, написанное на сиговне, изобилующее дырами в безопасности. Всех уже заебало это говно, от сиговна идёт активное избавление, что не может не радовать.
В питоне нет литералов, 2 - это тоже объект, поэтому у него и есть идентификатор.
почему на раст такой уебишный синтаксис? Как будто на какую-то скриптовую парашу типа питона пересел.
Просто ты привык к сиговну.
Лучше бы спросил какая жопоболь заставляет фанбоев других языков бегать сюда ;)
лишний раз напомнить сиплюскопрофагу, что он сиплюскопрофаг, это просто забавно. Занимательно наблюдать как у некрофилов рвутся попки :3
потому что асм нужен как минимум реверсерам, про разработку на нем никто и не заикается, разве что в рамках lab.asm
А плюсоговно и сиговно тоже уже сейчас полностью заменимы Растом, засим новые проекты пилят как раз на Расте, а не на допотопном дерьме. Пример я уже приводил - новая ОС от гугла пишется на Расте. Даже красноглазики, пилящие прыщеблядикс, осознали насколько Раст охуенен, и пулят фичи, позволяющие писать драйверы на Линукс на Расте, тем самым спасая свои жёппы от уязвимостей наилучшим образом. Всем адекватным людям, живущим в СОВРЕМЕННОМ мире, давно ясно, что с/с++ - это бесполезная отрыжка прошлого. Легаси на нём ещё очень долго будет гнить, распространяя зловоние на весь белый свет, но всё новое в лоу-лвл системщине УЖЕ пишут на Расте, это факт. И со временем будут писать на нём только больше, ну а сиплюсговно будет уже сейчас является нямкой для некрокопрофила, который любит обмазываться смердящим легаси и дрочить, заглатывая сегфолты и сея UB по всей кодовой базе, юзая допотопную парашу. Sad but true.
>С++ живее всех живых
>широко используется только в легаси проектах, которые начали писать ещё в 90ых
Ору с копрофага
>новая ОС от гугла пишется на Расте.
Но если человек не знает c/c++, то это означает, что он никогда не видел, как пишутся ОС.
сиплюсоговно можно использовать в обучающих целях, но никак не в серьезном продакшене (опять же, не считая легаси), поэтому мимо.
Написал клоун из браузера, написанном на С++, под операционной системой со всем юзерспейсом на С++ и ядром на С. Так держать.
Про то, что сиплюсоговно хоть чего-то стоит в 2к21 году. Я по факту привёл несколько факторов почему Раст лучше сиплюсговна, и это неоспоримо. Безопасность, инфраструктура, стандартная библиотека, система сборки - в Расте всё это лучше, чем в плюсоговне. Любой твой высер в защиту говна мамонта будет в 100% случаев затрагивать легаси софт, но никак не новые крупные системные проекты, которые предпочитают писать на современных ЯПах, а не на окаменелом говне мамонта из 80ых, где весь код - это UB.
Которые начали писать в 90ых, лол. Ну, как я и говорил, плюсодебил всегда будет приводить в пример софт, написанный 25 миллионов лет назад. Тупая ты башка, это произошло только потому, что раньше не было альтернатив. Все НОВЫЕ проекты предпочитают писать на Расте по очевидным причинам. И я с самого начала говорил именно о новых проектах, так что ты сам себе нассал на хрюльник.
Только не говори мне, что мобилка с тик-токами/инстаграмами - это серьезный продакшон.
Алсо, разговоры о безопасности звучат откровенным издевательством, когда речь идет о мобилках, напичканных анальными зондами уже с конвеера.
Fuchsia - новая ОС от гугла, где почти всё ядро написано на Расте.
Примерно весь современный финтех. Блокчейн стартапы пишут ТОЛЬКО на расте. Драйвера на Линукс скоро можно будет полноценно писать на Расте. Мелкософт переписывает много чего на Раст, включая винду. Мозилла переписывает движок лисы на Раст. Все чураются от сиплюсговна, как от прокаженного, и это недаром.
300кк/наносекунду blockchain developer в перспективном старт-апе в Германии
А на плюсоговне разве есть работа, кроме парашного легаси? Вряд ли. Эмбедщину, кстати, тоже на Расте писать начинают.
300кк/наносекунду blockchain developer в перспективном старт-апе. Не в пределах стран СНГ, естественно. В СНГ параше с Растом точно туговато. Он пока выстрелил только в развитых государствах, но через лет 10-15 дойдет и до сраши/еблорусии/копроины. Наверное.
А на плюсоговне разве есть работа, кроме парашного легаси? Вряд ли. Эмбедщину, кстати, тоже на Расте писать начинают.
qt какой-то хуевый, на баги забивают по несколько лет. Не знаю как там в коммерческой версии.
Ответ прост - ты привык к сиподобному говну. Он для тебя просто непривычен.
Смешной зеленый пидараха вылез, браво.
Сейчас тебе два местных шизанутых долбоёба посоветуют электрон и шарп.
Вообще, если даже в Qt не сделали что-то хорошо, то в других либах всё намного хуже.
>Какие есть фреймворки, помимо qt, чтоб кроме интерфейса еще была работа с сетью и бд?
MFC XDDD
Всё, что ты пишешь, не просто не "неоспоримо", а по факту вообще имеет никаких оснований.
Мало того что зачем-то переписали контейнеры, так еще и их интерфейсные методы по другому назвали (не говоря о введении очередного markup языка, подпертого костылями со всех сторон и неочевидного как ориентация любителей потаскать пару десятков метров куты либ в дистре).
Браво, браво! Это гениально!
очередной пук плюсодебила, неподкрепленный аргументами, в отличие от моего. Ничего необычного.
Это чтобы была активность, скучно же, никто не постит ничего.
>весь современный финтех
Пруфов опять не будет, конечно
>блокчейн
Ну это серьезная область, конечно, тут твоя взяла
>все пишут много чего
Много чего неизвестно чего. Прямо как servo. Плавали, знаем.
У тебя нет никаких аргументов.
Жопоболь - твой единственный аргумент, мань.
если смотреть по доходу, то там веб, джава и питон. Иди туда, и не еби мозги, если тебе это важно)
Пиши интерфейс на шарпе, не еби отвратительное qt
Так что кидаться говном можно сколько угодно, но толку-то. Захоти я борщи хлебать, насаживал бы какой-нибудь Идрис на Кок.
Собстно, все, что надо знать о растошизиках блокчейнерах из-за бугра
Люди, у которых каждый час стоит денег, работу не ищут так-то.
ИМХО, гораздо лучше запилить тестовое задание и на собеседовании вести предметный разговор по существу, чем отвечать на дебильные вопросы, взятые с потолка.
Схуяли тебе платить, если тут общий интерес?
Работодатель тоже тратит время на собеседования. Что ему теперь тоже деньги брать с каждого соискателя?
Чувак кидай сюда всем двачом тебе поможем. Или кидай мне хотя у меня опыта кодинга маловато. Чем смогу помогу.
>оптимальную выработку месторождения придумать
Придумывание это работа. Тебя похоже просят им работу за бесплатно сделать. Я не спец в собесах, но да. Нормальный собес по-моему выглядит так что тебя справишваю что-нибудь теоретически отвлеченное. Но бля, лол ты можешь реально придумать модель но потом все перевернуть чтобы если они её примени все пошло по такой пизде что они бы там знатно прихуели.
А может они меня к нефтяной трубе подпустят? Дадут сопутствующего газку понюхать.
Я тут глянул.
https://neftegaz.ru/science/booty/331857-geologicheskaya-model-mestorozhdeniya/
>Сейсмическая инверсия - наиболее популярная на сегодняшний день технология прогноза эффективных толщин и пористости будет неэффективной.
>Ее применение может привести лишь к недостоверным результатам.
>Крупные нефтяные и газовые компании решают эти проблемы через создание собственных научно-аналитических центров.
>Но и это не дает гарантию качественной оценки проекта.
https://neftegaz.ru/tech-library/geologorazvedka-i-geologorazvedochnoe-oborudovanie/142375-geologo-gidrodinamicheskaya-model-gdm/
Тут читать только на пару дней.
Вот еще.
Общая структура процесса создания трехмерных геологических моделей приведена на рис. 1. Он состоит из следующих этапов:
разработка структуры базы данных для хранения первичной информации по данным геологической разведки;
наполнение базы информацией геологического и геофизического опробования;
статистический анализ первичных геологических данных, исправление ошибок, группировка данных, заверка базы, выявление закономерностей;
построение скважин в пространстве модели, группировка по профилям;
выделение и оконтуривание рудных и нерудных интервалов по стратиграфическому принципу, уточнение интервалов по значениям бортового содержания (интерпретация геологических данных);
уточнение границ пространственного размещения пород, с учетом тектонических нарушений, а также за данными геофизических исследований (сейсмика, гравиметрия, электроразведка);
каркасное моделирование месторождения (выделение рудных тел и пород сопутствующей вскрыши, моделирование пластов, аномалий, ловушек и пр.);
создание пустых блочных моделей;
геостатистический анализ данных разведки, вариография, определение законов пространственной изменчивости геологических характеристик компонентов;
моделирование содержания компонентов математическими методами: ближайшего соседа (полигональный метод), обратных расстояний в степени (IDW), крайгинга (в модификациях) и др.;
моделирование гидродинамических систем, расчет массопереноса, загрязненности, химического состава и пр.
уточнение контуров распространения пород в месторождении по заданным кондициям.
С сайта http://www.mrwolf.ru/
Не, ну там касается только истощающихся месторождений. В описании есть кое-какие формулы, даже пара законов упомянута. Но один фиг исследовательская задача. Сам я вообще не в теме, как там нефть сосут по науке.
>В описании есть кое-какие формулы
Хуе мое, берешь переменные и оборачиваешь их своей кростовой магией, в рамках закона. На коленке сделать.
Ну тогда ладно. Вот как сделаю, так в ДС2 поеду, буду там в башне магов работать (когда её достроят).
Ты с чем вообще пришел сюда? То ему вакансия покоя не дает, то ему наебалово мерещится.
Наебалово - проходи мимо. Ну или одевай костюм супермена и борись.
>вот для этого 1985219 (You) лошка.
Ты зачем блатную музыку включаешь, дурень?
Всяк, кто работает на дядю, блатным уже никогда не станет.
>>1985274
>Тебя похоже просят им работу за бесплатно сделать.
Классная бизнес-модель.
Сидеть ждать неопределенное время, разгребать предложенные варианты решения.
И все это ради того, чтобы запилить таску объемом в пару рабочих дней с ценой вопроса в пару сотен долларов?
да блять, уебки
пишу вам из ебучего сан-хосе из жырной компании
пишем новую хуйню кто на расте кто на с++17-20
говном не кидаемся друг в друга
и то и то - ок
Милости прошу к нашему шалашу. Как ты получил интервью? У тебя крутая вышка или портфолио/опыт?
Я вообще параноик. Везде вижу подвох. Иногда доходит до абсурда и Я переху на обвинения. Потом приходится извиняться.
>ради того, чтобы запилить таску объемом в пару рабочих дней
Ты свои таски на круды не путай с тем, чем нормальные люди занимаются.
Да хз. Такое впечатление что сейчас все бегают как в жопу ужаленные и пытаются хоть каких-то разрабов набрать.
Фига какой крутой. Ответь для проверки как вызвать оператор присвоения для базового класса из произодного. Чел не может быть таким злым если ему хорошо платят.
Нехорошего человека ответ. Расскажи как вышел на них. По знакомству, hh linkedin, и еще как. Я тоже хочу.
Мне позвонили.
Не уходи от ответа.
Если у них месторождение уже того значит нормальные. В смысле оплаты.
Яндекс бекендер в треде задавайте свои ответы.
Чувак если ты курьер то надо бросать и сосредотачиваться на кодинге.
Есть один вопрос. Как перестать считать себя программистом? Я просто чмоха которая ковыряет код для того чтобы поднять ЧСВ и опустить в треде пару анонов.
Перед тем как вкатиться в Мейерса во что вкатываться после Эккеля+Липпмана. Есть ли промежуточный этап или смело идти вперед?
Я, например, тоже ничего против Раста не имею - только против растошизиков, срущих в C++ треде.
Настоящие мужики на машинных кодах кодят, что ты тут делаешь, петушок?
Да, многие так говорят. Но вот лет через 5 на колени будем вставать за то что когда-то там угнетали всяких убийц сиплюсов.
>Код пиши, а не книги читай
Ебать дебил. Я вот за ночь прочитал почти половину Яцека по STL и ща весь день переписываю свои костыли в петах потому что там где можно было обойтись структурами и их методами из стли я везде хуярил векторы и велосипеды для них.
боюсь представить, что у тебя там за говно-код
а как данные хранились в vector, вместо структур, не интересно? Какие там костыли)
Спасибо за ответ. Шаришь.
Ну что гоустнули тебя анон или ты их послал?
Да в растротреде они такие же: чуть что - а зато в плюха еще хуже, а вот плюсы... и т.д. Язык то хороший, но со своими недостатками, которые шизики упорно не видят, но обильно срут в сторону других языков, особенно плюсов
Всегда найдутся неформалы, самоутверждающиеся только самим фактом своего существования.
Сколько сейчас получает мидл плюсовик?
Миддл плюсовик в 2к21 - это все равно что ученый студент второго курса. То бишь, не бывает такого. Ты либо синьор-помидор, либо хуй сосёшь.
Сеньёр - это тот, кто в состоянии ставить задачи мидлам.
То бишь, не бывает такого, как ты скозал. Ты либо синьор-помидор в некоторой команде, занятой некоторым проектом, либо хуй сосёшь без команды и без проекта.
Пишет 1.5к. Думаю затребовать 2к. Меня не пошлют нахуй? Вообще как относятся к тем, кто требует больше чем компания может предложить? Я могу затребовать 2к, но потом получить оффер на 1.5 и сказать: "ну лан, давайте 1.5к" ?
У нас в конторе это работает по принципу - "Можем дать не больше чем N" в оффере.
Кекнул
Вот этот чудик правду стелит. Пидорские языки для выебонов по типу растра собственно и людей (если к ним применимо это слово) соответствующих притягивают.
Кресты - удел IT-альфачей.
Циркон? Он на С++.
Читать порциями кратными размеру блока файловой системы, конкретный размер находи экспериментально.
Два чаю. В народе ещё говорят, что POSIX_FADV_SEQUENTIAL может помочь, но я никогда не мерил.
Есть вообще в принципе только два варианта чтения файлов: mmap и read (замени на аналоги из винапи, если у тебя венда). По идее mmap должен проигрывать в чистой скорости: ему нужно маппинги страниц настроить, TLB зафлашить, все дела, прежде чем ты начнёшь читать. Да ещё page fault будешь хватать на каждой странице если I/O подсистема не успеет запрефетчить их. А последовательный read в один буфер и его обработка - самое то.
В любом случае тебе придётся самому мерить производительность. На дваче тебе могут лишь сказать "обычно вот это быстрее" без каких-либо конкретных цифр, потому что они от слишком многих факторов зависят.
Ладно, пошёл курить. Спасибо всем.
У меня С++ latest, студия знает об static inline variable. Так почему компилятор ругается? И почему он пишет про какой-то там конструктор? Ведь конструктор по умолчанию есть (выше)
ты наверное неправильно инициализируешь, раз у тебя незавершенный тип получается.
Меньше кода писать. Смотри - раньше ты должен был объявить имя статической переменной внутри класса, а потом где-то еще в каком-нибудь cpp написать ее реализацию... (а что делать если cpp нет, так как класс шаблон и полностью описан в h?)
В с++ 17 ввели вот эти static inline variable которые позволяют все это сделать одной строчкой внутри класса как на пикче (width/height/frame/visible - раньше ты так не мог написать)
Да все там правильно - должен быть дефолтный конструктор, выше он есть. если убрать инлайновость то все компилируется (код рабочий)
>>1989670
Тогда та хуйня выглядит как баг или фича, абсолютная логичность и неизбежность которой становится понятна только после прочтения всего стандарта три раза.
Попробуй дефолтный конструктор тоже инлайнить.
Вообще же для объявлений внутри класса этот самый класс никогда не считался неполным типом?
>для объявлений внутри класса этот самый класс никогда не считался неполным типом?
Только для статических членов.
Иначе че ты в конструкторе будешь делать с этим членом, если у него конструктор еще не определен?
Не, я не про это. Очевидно что нельзя вставить в класс С поле типа С.
Но можно делать так
class C {
int x;
inline void f(C c) // в этой точке C - уже полный тип, иначе хуй бы скомпилилось
{
cout << c.x;
}
};
>в этой точке C - уже полный тип, иначе хуй бы скомпилилось
Нет, тут он еще неполный. Компилируется потому что в объявлении функции полный тип и не нужен. Для указателя тоже не нужен полный тип.
А для объявления data-члена уже нужен будет конструктор. Фокус со статическим data-членом прокатывает потому что он инициализируется не в конструкторе.
Я хотел написать BGL, да
Кста меня наебали в чате. Я думал надо просто самый главный файл инклуднуть, а он все поднтянет, но оказывается надо было все 7 и все заработало. А я думал там с cmake возиться надо
Что скажете в своё оправдание, плюсодебилы? Раст начинает вытеснять легаси говно из мира системщины семимильными шагами. В гугле мимокроки явно не работают, и они понимают, что перед ними будущее системщины - Раст.
Ок.
>Что скажете в своё оправдание, плюсодебилы?
Плюсы и раст это язык для бэк энд богов бумеров которые вкатились 20 лет назад. Остальным остается приминять софт скилы (отсос бибы) чтобы получить должность html макаки. Но это чисто мое личное мнение.
Хороший программист это не тот у кого много знаний, а тот у кого много лапшечасов.
1 True
2 False
3 Call friend
4 Ask JS fags
Кто съел больше инстант размена?
https://pastebin.com/R1FV4uWh
Когда сундук находится на освящении то обводка рисуется нормально и её прекрасно видно. Но почему-то когда сундук без освящения (закрыт блоками например) обводка становится темной. Почему? Как фиксить?
В /b/ никто не помог(
const moiHui={
len:300,
ebat(mamkaObj){
mamkaObj["pleausure"]=100.0;
console.log("Horosha su4ka");
},
};
const tvoyaMamka=Object.create({shluha:true});
new Promise(function(resolve,reject){Object.assign({},moiHui)?.ebat(tvoyaMamka);resolve(1);}).then(()=>console.log("Ti hui"))
Недавно был в треде, говорили стажировки говно и лучше сразу на джуна тянуть лямку.
Или стажировки не говно?
>освящение
г-споди, спаси и помилуй
А может GL_LIGHTING не отключать? И насколько легитимно вызывать glDepthRange с 0,0 ?
Все как и было, это не десктопа стало меньше, это веба и мобилок стало больше.
Пишу свои велосипеды, сейчас пишу аналог optional, и хочу чтобы было возможно писать что то типо return null_opt, в функции которая возвращает option<T>, где null_opt - какая нибудь константа от моего типа пустышки
Ну и хотелось бы чтобы T в Option<T> сам преобразовывал
чото ничего найти не могу в гугле, а как в стандарте это реализовано тоже непонятно
>чтобы один пользовательский тип приводился ко второму автоматически
шапка
https://en.cppreference.com/w/cpp/language/cast_operator
Блять.
Пет проджект - он от слова "pet" - домашнее животное, любимец; то, на что тратят свободное время. Часто эта возня может длится годами.
Что тут тебе можно посоветовать, кроме совета заниматься тем, что доставляет?
Как тебе выше ответили - пет это то, что нравится писать. Так что тут есть два варика - либо пишешь что-то по твоей любимой предметной области, либо пишешь что-то базовое из той, которую не знаешь, но хотел бы освоить. (СУБД, сервер, движок..). Второе позволяет объединить приятное с полезным.
Так же интересны аноны которые уже вкатились(надеюсь они тут есть):
Какая зп, чем занимаетесь?
Решил вспомнить как на С++ писать спустя 3 года как закончил вузик и соответственно 4 лет работы на жаве и код не компилируется. Пиздос.
Скажите хоть что я не так делаю.
бывает и такое...
пс ибо так в жаве делают
Ни модулями, ни концептами...
по крайней мере в моем окружении
Модули нихуя не работают. А концепты мало где нужны, кроме буста и прочего.
Я, лично очень дрочу на модули, но перманение ICE заебали, да и подсветка нихуя не работала в решарпере когда я последний раз пробовал.
Короче, жду Вижуал студию 21 (или уже 22 лул) - и переезжаем на работе.
Еще телеком. Но чтоб нормально получать, надо выучить не только стандарт крестов, но и стандарты LTE, 3/4/5G, SIP, SCTP, SNMP, AMPQ, XCAP и хуй знает что еще.
1) Первое издение охватывает только С++ 11, второе ещё и 14 и 17. Много ли потеряю, если куплю первое издание?
2) Если не много, то стоит ли брать русскую версию? То бишь как там с качеством первода?
В проде выше 14 вообще редко где встречается. 17 и 20 нужны только чтобы на собесах выглядеть бодрее.
Иногда банально нет нормального компилятора под устаревшее железо. Иногда ведущим прогерам не особо всралось чё там опять навыдумывали. Ещё есть чехарда типа before c++14 так, since c++14 сяк, after c++14 хуяк (зачем использовать инструмент, если он раз в 3 года меняется, а порой улетает в deprecated). Ну и основное, что в плюсах любой хуйнёй можно ногу прострелить себе, ему и вон тому парню, поэтому вменяемые кодеры молодых и шутливых с с++20 сразу шлют нахуй.
>В проде выше 14 вообще редко где встречается
лул, везде уже. Старики, дрочащие на хуйню - не нужны
Именно вкатываться - нет. Сейчас проекты пишутся сразу на нескольких языках, поэтому в одну и ту же тематику можно через любое место заехать, а потом переобуться. Вкатывайся в пихон или джаву - там банально больше платят. Работа на пихоне часто соседствует с работой на плюсах.
Ну да, ну да в 2018 году c++17 вышел, а с++20 в середине 20-го. Что там у тебя за прод такой, что ты его менее 2 лет писал? Или вы там навалились и всю кодовую базу на новый стандарт перекатили?
>Или вы там навалились и всю кодовую базу на новый стандарт перекатили?
Заменить -std=c++14 на -std=c++17 и в паре мест сделать s/auto_ptr/unique_ptr/ - не то что бы очень сложно или долго.
auto_ptr ещё в c++11 в deprecated улетел 10 лет назад. Тебе говорят про код на 17 стандарте, а ты мне про директивы компилятора.
Ну тут по настроению. Обычно к концу вузика очень нужны деньги. Хату снять, тянку заинтересовать, поехать мир посмотреть. С плюсами ты тоже будешь иметь денежку, но сильно не разгуляешься.
Ну допустим вы все системные пердоли с файлами заменили на std::filesystem. А потом нормально протестили и задавили все баги.
Пс и если да, то что тогда выбрать, если мне прям сильно вставляют алгоритмы со структурами данных и прочая залупа. Я так понимаю жабу?
На данный момент да. Вообще деньги там, где есть работа с иностранцами (до короны ещё командировки были). На плюсах тоже такое бывает, но это чаще топ тир типа nvidia, huawei, intel и прочих.
Депрекейтили да, а перестать компилироваться код с 17-ого стандарта начал. Или для тебя "писать на 17-м стандарте" значит сразу весь код переделать с новыми фичами, иначе не то?
Алгоритмы на питоне пишут (и иногда потом портируют на с++ чтобы быстрее работало). Всякий ML, нейронки и прочее на питоне сейчас.
Java это enterprise - всякая корпоративная хуйня по управлению ресурсами компаний (документооборот, ERP системы, складское по...). Там нужно писать всякую заумную логику, которая нужна заказчику. Алгоритмов там мало. Есть ещё мобилки на java/kotlin - там поинтереснее.
Мобилки интересное направление? Под алгоритмами я кстати имел ввиду всякие сортировки, обходы графа и прочую красоту. А что сейчас с мобилками? Хорошее направление для вкатыша в плане тасков и денег?
У меня были недавно траблы, когда коллеги накатали на 17 стандарте, а тулчейн одной из целевых железок его не вывозит. Сидел ковырял ебучий стандарт, в котором оказалось, что фича не компилится из-за before 17 and since 17.
Писать на 17 стандарте, это когда у тебя активно используются наиболее полезные нововведения (filesystem, string_view и from_char/to_char, распараллеленные алгоритмы, std::any ...).
Спроси в android треде. На плюсах обычно оптимизацией под мобилки занимаются (допустим когда игры портируют и там больше не алгоритмы, а возня на границе структур данных и аппаратной части).
Хорошо, спасибо тебе большое анонче
std::map<std::sting, std::function>
https://en.cppreference.com/w/cpp/utility/functional/function
>И возможно ли это вообще?
Берёшь и делаешь, ничего невозможного.
https://godbolt.org/z/a63dfbMK4
#include <functional>
std::map<std::string, std::function<int(int)>> m;
m["foo"] = [](int x) { return x; };
int y = m["foo"](123);
И да, сигнатуры функций должны быть одинаковыми, это не джаваскрипт и не питон.
>сигнатуры функций должны быть одинаковыми
А можно делать type erasure то есть, как говорят в народе, кастовать к void*
Ты сам-то не заебешься пыль глотать потом разбираться, что у тебя когда должно вызываться?
Ладно, изложу задачу: программа должна парсить строки, в которых даются команды.
Например, имеем файл:
get
pet
play
take
Каждая подразумевает определенный уникальный алгоритм. Я решил написать n методов с такими же названиями, т.е. методы get(), pet(), play(), take() и загнать их в мапу вида <string, функция>. Таким образом, если мы получили строку pet, то будет вызываться функция pet() и т.д.
Можно сделать через свитчи, но код получится хуево масштабируемым и медленным. Методов может быть сотня. Однако вариант с мапой походу нерабочий, так как сигнатура у каждой функции разная. Какие еще могут быть варианты для решения такой задачи?
>какие еще могут быть варианты для решения такой задачи?
Если общее решение, то это стейт-машина.
Возможно, у конкретно тебя, прокатит что-то попроще.
В любом случае расслабь булки: за один вечер не осилишь.
Сорри, не дописал и случайно нажал отправить. Можно пойти путём Джависта и сделать класс Function, который принимает массив объектов Parameter. И каждая твоя функция будет обёрнута в этот класс и сама проверять и разворачивать параметры. Но вообще
>Можно сделать через свитчи, но код получится хуево масштабируемым и медленным
Через свитчи все виртуальные машины работают, не должно быть долго. Читал недавно, что threaded-code (оптимизация над такой структурой) даёт всего несколько процентов на текущих системах, поэтому не должно быть медленно.
>это делать enum команд и через свитчи вызывать нужную функцию?
Да (в минус-первом приближении).
>через свитчи
Тебе ничто не мешает запилить мапу map<Command, Action>.
Ну всмысле ничто, кроме отсутствия у тебя классов Command и Action.
Если ты прям так бескоишься за лишние такты ЦПУ, то посмотри, как делают стейт-машины сишники. Они-то уж точно хуйни не посоветуют.
Ну тут дело не в лишних тактах цпу, а в том, что если у тебя будет 1000 методов, а потребуется самый последний, то тебе придется проходить через тысячу кейсов. В то время как unordered мапа даст O(1)
Когда мы писали прод в 2017, у нас был experimental filesystem и костыли вместо structured bindings, Когда мы переехали на 17 стандарт - мы просто все TODO починили, убрали эксперимент фс, и активно начали пользоваться ништяками типа if constexpr, structured bindings, и прочей милости.
Как переедем на 20 - сразу же весь проект переведем на модули (проебем прилично времени, но нам разрешают), и активно будем юзать std::format.
Проду - 6 лет. Я лично его переводил с 11 на 14, и с 14 на 17.
>Как будет выглядеть класс Action?
Как пожелаешь, так и будет.
Главное, что ты все сумел обобщить в одну сущность и Страуструп тебе больше не ебет мозг со своей проверкой типов.
>если у тебя будет 1000 методов, а потребуется самый последний, то тебе придется проходить через тысячу кейсов
Свитчи, в которых выбор делается по набору интов в каком-либо непрерывном диапазоне, компилируются в jump table, что есть O(1) и очень и очень быстро.
>Например, имеем файл:
>get
>pet
>play
>take
>Каждая подразумевает определенный уникальный алгоритм.
Подразумевает где? У тебя в голове?
Свич и есть goto. Как думаешь, почему после кейсов двоеточие как после меток?
https://en.wikipedia.org/wiki/Duff's_device
Ты конечно знатный сиделец, что 6++ лет на одном месте продержался. Это и дало тебе возможность портировать проект, потому что ты знал в нём все входы и выходы. В реальной жизни часть кодовой базы тебе не известна и даже тестами не обложена. Не говоря о том, что кто-то что-то там закладывал в виде experimental. Ещё надо обосновать переезд, выбив под это время и деньги.
Ну, те части, которые я не знал, просто С++17 включали - не трогали функционально, т.к. работало до нас - пусть работает.
А так - куа есть, е2е тесты есть, пусть ебутся.
Пример:
class A
{
public:
int m = 5;
int& getM() const { return m; } // 1
const int& getM() const { return m; } // 2
};
Вариант 1 не сработает, будет ошибка пикрил, мол, нельзя const int передавать в неконстантную ссылку. Хотя m у нас константой не является. Выходит, мы помечаем метод словом const, то компилятор делает (или расценивает?) возвращаемое значение из этого метода как const? И где про это можно почитать?
потому-что ссылку возвращаешь.
`return m;` заменяется на `return (this).m;` (https://timsong-cpp.github.io/cppwp/n4861/class.mfct.non-static#3.sentence-1)
а если метод `const`, то тип у `this` это `const A` (https://timsong-cpp.github.io/cppwp/n4861/class.this#1.sentence-2).
У выражения `(this).m` тип `const int`, т.к. квалификаторы `(*this)` и `A::m` «объединяются» (https://timsong-cpp.github.io/cppwp/n4861/expr.ref#6.2)
cyka blyat.
`return m;` заменяется на `return (⚹this).m;` https://timsong-cpp.github.io/cppwp/n4861/class.mfct.non-static#3.sentence-1
если метод const, то тип у `this` это `const A` https://timsong-cpp.github.io/cppwp/n4861/class.this#1.sentence-2
У выражения `(⚹this).m` тип `const int`, т.к. квалификаторы `(*this)` и `A::m` «объединяются» https://timsong-cpp.github.io/cppwp/n4861/expr.ref#6.2
можно использовать деревья из функций
Может просто не класть pdb рядом с бинарём (альтернативно, стрипать символы в юниксах)?
Страуструп(Бьярне Страуструп - Программирование. Принципы и практика с использованием C++ (2016)) или Липпман(Стенли Б. Липпман, Жози Лажойе, Барбара Э. Му - Язык программирования C++. Базовый курс - 2014)?
рядом с бинарем ничего нет
Студия в дебаге всегда подключает .pdb который она генерирует.
В самом экзешнике (если это скомпилирован в Release) - нихуя нету
да я юзаю x64dbg, заебали.
Точно. Ведь экзешник содержит путь к локальному файлу pdb, и отладчик его подтягивает, куда не перемещай бинарник, хоть в жопу себе запихни.
>В самом экзешнике (если это скомпилирован в Release) - нихуя нету
Что, даже rtti-именов нет?
Помню, видел на хх подходящую тебе вакансию - математик-программист для онлайн казино. Рофлы рофлами, но там скорее всего минимум проги и максимум матеши - теорвер, матстат, дискретка. Мб и оптимизации тоже, т.к. стек был c++/жаба
Унижения крестоёбов бесконечны:
>C++ developer
>Локация: Санкт-Петербург
>Высшее техническое или математическое образование (магистратура), существенным плюсом будет обучение в аспирантуре или наличие PhD.
>10+ опыт работы в проектах, связанных с разработкой высоконагруженных сервисов
>Зарплатная вилка: 150-350 т.р.
>10+ опыт работы в проектах, связанных с разработкой высоконагруженных сервисов
>существенным плюсом будет обучение в аспирантуре или наличие PhD.
Стоило того
Если ты их не используешь - то нет
cherry picking as is. Ты можешь таких же вакансий на любой язык понадёргать. Плюс это ДС2, там зп ниже на 20-25%, чем в московии.
За 150к на такую позицию никто не пойдёт, даже нахуй слать будут (сам порой отбиваюсь от таких "работодателей").
Чёт не припомню чтоб в дс2 был офис
Есть целый пласт вакансий на удалёнку, где ушлые масквичи ищут лошков подешевле. Не обязательно на плюсы. А ещё залётные из всяких НиНо и Новосибирсков на fullstack за 120к.
"name: xxx dob: 23.09.1235 time: +12:34:45 up: never kdd: P1D->324 tdd: n g 1/3 и т.д. + мусор в конце"
Имена перед символом ":" могут быть совершенно любые.
Для одного значения я написал такую "\\s\\:\\s(.\\S+)", а как сделать для нескольких я вообще не знаю.
Я б заебенил цикл по char* как деды воевали. А то сам потом охуеешь в собственной регулярке разбираться.
Не нужны регулярки.
Разделить по двоеточие пробел, потом кроме первого и последнего разделить по первому пробелу с конца.
Бля лол, устроился в украинском ДС2 за 1к евро джуном без опыта спустя 5 месяцев вката.
[a-zA-Z]:(.?).\s
#include <iostream>
using namespace std;
int main()
{
string str = "name: xxx dob: 23.09.1235 time: +12:34:45 up: never kdd: P1D->324 tdd: n g 1/3";
regex r("xxx");
cout << regex_match(str,r);
return 0;
}
регулярки на ++ не ищут подстроку в строке?
Если документацию не читать, то не ищут.
https://en.cppreference.com/w/cpp/regex/regex_search
на шарпах оно по дефолту все
Да пожалуйста
https://doc.qt.io/qt-5/qregexp.html
Кто на этом бабло делает, у тех и подсветка кода с финтифлюшками.
Есть экземпляр класса Hero, ссылка на который передается в класс города City(пик 1). Он передается в метод EnterTheCity(пик 2), где после передается в метод EnterTheMarketPlace(Пик 3).
Баг заключается в следующем: Все действия по изменению полеё к воспроизводимые над экземпляром hero в EnterTheMarketPlace пропадают, после возвращения в метод, которым он вызывался.
Соррян за такой вопрос, понимаю что нужно знать код, чтобы фиксить баги, спрашиваю тут затем, что думаю, что ошибка возможна в передаче объекта класса в параметрах методов(хз как)
В энтерсити нужно передавать указатель или ссылку, а у тебя передается по значению, т.е. внутри этой функции действия выполняются над внутренней копией.
Большое спасибо, анончек, теперь я умею больше
Ты выражения "Expand embrace extinguish" и "вендор лок" не знаешь? Они же не от всего сердца язык и экосистему делают.
>смайлики
Тебе тут не контактик
Конечно можно сказать что ты там нахуевертил, но чисто со стороны - охуел. У меня все тестовые были максимум на 2 часа кодинга и строк на 500. Правда я шарпоеб.
Я вот хочу побаловаться с сиплюсплюсом и сделать простенький платформер. Ну так вот, я не совсем понимаю, как должна структура выглядить.
А еще, что произойдет страшного если я в hpp файле буду сразу в классе хреначить реализацию? На других языках же вроде так делают.
Я пока что вот такое вот решил использовать. Но думаю что надо бы делать правильно и как у вас принято, раз уж решил сиплюсплюс использовать. Потому - поясните за ваши бест практис по организации структуры прокета. Как отделяются клссы что должны быть доступны только в рамках проекта от тех что должны быть публичны ну и вообще, если не сложно.
Препроцессор c++ подставляет текст hpp файла в те места, где он включается. Соответственно если ты что-то в hpp меняешь, то все cpp, в которых есть include, нужно перекомпилировать. Поэтому в hpp обычно реализацию не пишут (кроме шаблонов, где по-другому нельзя).
Единственное, зачем мелкософты создали шарпы - чтобы ты не перешёл к Sun (ну или к Ораклу сейчас) и, Господи прости, на какой-нибудь Solaris.
это заговор вселенского масштаба
Когда как. Один раз в тот же день позвонили (хотя сказали, что нужно посовещаться с каким-то челом, который из отпуска только через неделю выйдет - наверное так он и не вышел), один раз ~через 5 рабочих дней.
В стабильном Дебиане всё древнее в целях стабильности (а testing для экстремалов), поставь лучше производные убунты, например Xubuntu (хоть в виртуалку) или Mint. Самый простой и привычный дистрибутив, в котором всё есть и довольно свежих версий. В Дебиане компилятор будет как говно мамонта, где древние глюки давно исправлены. А какие-нибудь библиотеки с гитхаба заебёшься им собирать. В Ubuntu можно через ppa поставить белое свежие компиляторы и библиотеки, если уж совсем припрёт.
Уже много лет Debian Testing - брат жив, полёт нормальный. А вот Unstable я бы не решился ставить, да.
Есть метод,возвращающий маршрут между городами
vector<City> getRoute(City&, City&);
В него как-то вложен метод, возвращающий путь в графе:
vector<Vertex> getPath(Vertex, Vertex);
находящий путь между 2мя вершинами.
Если пути нет, оба этих метода должны сообщить клиенту
(в разной форме) причину
Как это лучше всего сделать?
Завести две структуры вроде PathSearchResult и RouteSearchResult? Кажется громоздко.
Кидать исключения? Но ситуация вроде бы не тянет на ошибку.
void func(int i){
char c= 's';
cout << "i = " << i << endl << (int)c << endl;
c += i;
cout << (int)c << endl << "===========" << endl;
}
int main()
{
func(12);
func(13);
func(14);
return 0;
}
https://ideone.com/QK4GqE
что за говно?
к символу char добавляю int = 12 - все хорошо.
к символу char добавляю int = 13 - все пошло по пизде, и char становится минусовым значением
Возвращать вектор нулевой длины, или optional, или кортеж из вектора и результата поиска.
Возврат кода результата, возврат структур, эксепщоны - Choose your poison, как говорится. Делай как покажется удобным. Если есть доступ к 17му стандарту, то можно посимпатичнее сделать со structured binding.
На моей рабочей кодовой базе очень часто встречаются функции, возвращающие буль и дергающие пачку не-конст референсов. Мне это не очень любо, сам предпочитаю для простых наборов данных вернуть простую структуру с флагом успешности операции. 17ых плюсов нет, потому не так симпатяво как хотелось бы.
Это то самое ub-но-работает, от которого тут уже кто-то горел.
https://ru.wikipedia.org/wiki/Дополнительный_код
>E:/dev/libcxx/src/support/win32/thread_win32.cpp:20:50: error: static assertion failed
>static_assert(sizeof(__libcpp_recursive_mutex_t) == sizeof(CRITICAL_SECTION), "");
Ссылка на файл: https://github.com/llvm/llvm-project/blob/llvmorg-11.0.0/libcxx/src/support/win32/thread_win32.cpp
А все потому что __libcpp_recursive_mutex_t (которая определяется в #include <__threading_support>; путь libcxx/include/__threading_support) имеет размер 8 байт, а размер CRITICAL_SECTION (которая в windows.h где-то, и является надстройкой typedef _RTL_CRITICAL_SECTION CRITICAL_SECTION) имеет размер 40 байт.
Ссылка на файл: https://github.com/llvm/llvm-project/blob/llvmorg-11.0.0/libcxx/include/__threading_support
Далее, смотрю содержимое файла __threading_support, внутри которого есть конструкция из директив #if / #elif / #ifndef и макроса defined(), выглядит это так: https://pastebin.com/N2QgtQ5h Здесь самое интересное то, что происходит внутри _LIBCPP_HAS_THREAD_API_EXTERNAL, где для каждой архитектуры (моя должна быть __x86_64__) объявляется нужный размер для той самой __libcpp_recursive_mutex_t. В данном случае это переопределение типа указатель на массив размером 5 типа void, что как-бы намекает на тот самый ассерт, где сравниваются размеры __libcpp_recursive_mutex_t и CRITICAL_SECTION, и на то, что в этом случае ассерт должен пройти, т.к. размер void равен 8 байт, а т.к. это еще и массив из 5 элементов, то 40 байт, что равно sizeof(CRITICAL_SECTION).
Но! Проблема в том, что я в эту область при компиляции не попадаю и мой sizeof(__libcpp_recursive_mutex_t) == 8. Я начал проверять конфигурацию в cmake gui, вот список моих настроек: https://pastebin.com/19ZN610p В нем есть шесть переменных с моими настройками потоков:
1. LIBCXX_BUILD_EXTERNAL_THREAD_LIBRARY:BOOL=OFF
2. LIBCXX_ENABLE_THREADS:BOOL=ON
3. LIBCXX_ENABLE_THREAD_UNSAFE_C_FUNCTIONS:BOOL=ON
4. LIBCXX_HAS_EXTERNAL_THREAD_API:BOOL=OFF
5. LIBCXX_HAS_PTHREAD_API:BOOL=OFF
6. LIBCXX_HAS_WIN32_THREAD_API:BOOL=OFF
Теперь, возвращаясь к файлу __threading_support и имея вышеупомянутый набор переменных, я пытаюсь поймать момент, когда я смогу попасть в необходимый _LIBCPP_HAS_THREAD_API_EXTERNAL. Работоспособность и реакцию на различные настройки этих переменных я проверял с помощью добавления ассерта_static(0, "") в интересующую меня область. По порядку:
1. LIBCXX_ENABLE_THREADS влияет на работу условия #if !defined(_LIBCPP_HAS_NO_THREADS)
2. далее, первым должно проверяться условие #if defined(_LIBCPP_HAS_THREAD_API_PTHREAD) и оно выполняется почему-то всегда, даже если LIBCXX_HAS_PTHREAD_API:BOOL=OFF
3. следующее условие #elif defined(_LIBCPP_HAS_THREAD_API_C11), оно наоборот, не срабатывает никогда (честно, я даже не знаю, связано оно как-то с переменной LIBCXX_ENABLE_THREAD_UNSAFE_C_FUNCTIONS или нет)
4. наконец, условие #elif !defined(_LIBCPP_HAS_THREAD_API_EXTERNAL), тут все не совсем ясно, если я отключаю все, кроме LIBCXX_ENABLE_THREADS и LIBCXX_HAS_EXTERNAL_THREAD_API, то появляется уже новая ошибка на 180/219 исходнике во время компиляции:
>E:/dev/libcxx/build/include/c++/v1/__threading_support:23:11: fatal error: __external_threading: No such file or directory
>#include <__external_threading>
Я пытался найти этот файл, но его нигде нет, даже в исходниках директории libcxx/src/src/..., тут замечу, что файла нет уже в директории, где библиотека собирается - libcxx/build/include/c++/v1/__threading_support
В общем, я пытался жонглировать разными настройками перемнных для потоков в cmake, но ничего из этого не вышло.
Моя конфигурация:
OS: Windows
Arch: x64
Compiler: gcc, g++ (порт под винду mingw-w64 с posix потоками <pthread.h>, целевые сборки которого i686-w64-mingw32 (32-bit) и x86_64-w64-mingw32 (64-bit))
LLVM ver: 11.0.0 (от туда же и библиотека libcxx https://github.com/llvm/llvm-project/tree/llvmorg-11.0.0)
П.С. Казалось бы, раз порт mingw настроен под posix потоки, достаточно просто включить LIBCXX_HAS_PTHREAD_API:BOOL=ON, но нет. Нельзя просто так взять и собрать библиотеку, хотя llvm и clang были собраны успешно.
>E:/dev/libcxx/src/support/win32/thread_win32.cpp:20:50: error: static assertion failed
>static_assert(sizeof(__libcpp_recursive_mutex_t) == sizeof(CRITICAL_SECTION), "");
Ссылка на файл: https://github.com/llvm/llvm-project/blob/llvmorg-11.0.0/libcxx/src/support/win32/thread_win32.cpp
А все потому что __libcpp_recursive_mutex_t (которая определяется в #include <__threading_support>; путь libcxx/include/__threading_support) имеет размер 8 байт, а размер CRITICAL_SECTION (которая в windows.h где-то, и является надстройкой typedef _RTL_CRITICAL_SECTION CRITICAL_SECTION) имеет размер 40 байт.
Ссылка на файл: https://github.com/llvm/llvm-project/blob/llvmorg-11.0.0/libcxx/include/__threading_support
Далее, смотрю содержимое файла __threading_support, внутри которого есть конструкция из директив #if / #elif / #ifndef и макроса defined(), выглядит это так: https://pastebin.com/N2QgtQ5h Здесь самое интересное то, что происходит внутри _LIBCPP_HAS_THREAD_API_EXTERNAL, где для каждой архитектуры (моя должна быть __x86_64__) объявляется нужный размер для той самой __libcpp_recursive_mutex_t. В данном случае это переопределение типа указатель на массив размером 5 типа void, что как-бы намекает на тот самый ассерт, где сравниваются размеры __libcpp_recursive_mutex_t и CRITICAL_SECTION, и на то, что в этом случае ассерт должен пройти, т.к. размер void равен 8 байт, а т.к. это еще и массив из 5 элементов, то 40 байт, что равно sizeof(CRITICAL_SECTION).
Но! Проблема в том, что я в эту область при компиляции не попадаю и мой sizeof(__libcpp_recursive_mutex_t) == 8. Я начал проверять конфигурацию в cmake gui, вот список моих настроек: https://pastebin.com/19ZN610p В нем есть шесть переменных с моими настройками потоков:
1. LIBCXX_BUILD_EXTERNAL_THREAD_LIBRARY:BOOL=OFF
2. LIBCXX_ENABLE_THREADS:BOOL=ON
3. LIBCXX_ENABLE_THREAD_UNSAFE_C_FUNCTIONS:BOOL=ON
4. LIBCXX_HAS_EXTERNAL_THREAD_API:BOOL=OFF
5. LIBCXX_HAS_PTHREAD_API:BOOL=OFF
6. LIBCXX_HAS_WIN32_THREAD_API:BOOL=OFF
Теперь, возвращаясь к файлу __threading_support и имея вышеупомянутый набор переменных, я пытаюсь поймать момент, когда я смогу попасть в необходимый _LIBCPP_HAS_THREAD_API_EXTERNAL. Работоспособность и реакцию на различные настройки этих переменных я проверял с помощью добавления ассерта_static(0, "") в интересующую меня область. По порядку:
1. LIBCXX_ENABLE_THREADS влияет на работу условия #if !defined(_LIBCPP_HAS_NO_THREADS)
2. далее, первым должно проверяться условие #if defined(_LIBCPP_HAS_THREAD_API_PTHREAD) и оно выполняется почему-то всегда, даже если LIBCXX_HAS_PTHREAD_API:BOOL=OFF
3. следующее условие #elif defined(_LIBCPP_HAS_THREAD_API_C11), оно наоборот, не срабатывает никогда (честно, я даже не знаю, связано оно как-то с переменной LIBCXX_ENABLE_THREAD_UNSAFE_C_FUNCTIONS или нет)
4. наконец, условие #elif !defined(_LIBCPP_HAS_THREAD_API_EXTERNAL), тут все не совсем ясно, если я отключаю все, кроме LIBCXX_ENABLE_THREADS и LIBCXX_HAS_EXTERNAL_THREAD_API, то появляется уже новая ошибка на 180/219 исходнике во время компиляции:
>E:/dev/libcxx/build/include/c++/v1/__threading_support:23:11: fatal error: __external_threading: No such file or directory
>#include <__external_threading>
Я пытался найти этот файл, но его нигде нет, даже в исходниках директории libcxx/src/src/..., тут замечу, что файла нет уже в директории, где библиотека собирается - libcxx/build/include/c++/v1/__threading_support
В общем, я пытался жонглировать разными настройками перемнных для потоков в cmake, но ничего из этого не вышло.
Моя конфигурация:
OS: Windows
Arch: x64
Compiler: gcc, g++ (порт под винду mingw-w64 с posix потоками <pthread.h>, целевые сборки которого i686-w64-mingw32 (32-bit) и x86_64-w64-mingw32 (64-bit))
LLVM ver: 11.0.0 (от туда же и библиотека libcxx https://github.com/llvm/llvm-project/tree/llvmorg-11.0.0)
П.С. Казалось бы, раз порт mingw настроен под posix потоки, достаточно просто включить LIBCXX_HAS_PTHREAD_API:BOOL=ON, но нет. Нельзя просто так взять и собрать библиотеку, хотя llvm и clang были собраны успешно.
>https://github.com/llvm/llvm-project/tree/llvmorg-11.0.0) <---
Скобка в конце лишняя захватилась в ссылку.
>я проверял с помощью добавления ассерта_static(0, "")
я проверял с помощью добавления ассерта static_assert(0, "")
фикс
Оверфлоу - это ub.
А, ну ок.
Что только додики не будут делать, лишь бы в Студии не нажать 2 кнопки и спокойно работать.
на анус себе нажми 2 раза, псина
юзай C#
зато есть чем заняться
Посмотрите пожалуйста на данный пример говнокода. Прогга должна возвращать вектор объектов класса, чтобы использовать их в другом классе, однако return mercenaries вызывает Segmentation fault. Подскажите пожалуйста, в чем может быть ошибка?
Я не крестовик, но надо mercenaries = new что-то.
Ты возвращаешь ссылку на вектор, создаваемый функцией на стеке и уничтожаемый после выхода из нее. Возвращай по значению, после 17 стандарта это оптимизируется.
Кстати, ты никогда не заходишь внутрь второго цикла. mercenaries.empty() всегда будет true в самом начале.
Это он будет пустым только первую итерацию, последующие он будет запргивать, не?
А, да. Но у тебя немного криво отформатировано, я думал if дальше ещё продолжается.
говно код написанный мной под трипом, вообще стремно что выкладываю такое, если бы увидел такое на шарпе посмеялся бы
Что значит пикрил? Если я С++ дев, то я дед инсайд?
У меня есть два года опыта плюсов. Сейчас есть компании, которым нужны такие спецы? Я типа уже мидл, кста? А то думаю свалить из своей компании нахуй.
На проекте бекендом занимался. Логикой всякой там продуктовой. Иногда АПИ писал, иногда просто в коре чето делал.
Ну, допустим, если сильный джун. Могу я расчитывать в другой компании на зарплату выше 1к$? Чтобы я понимал имеет ли смысл вообще рыпаться.
В ДС2 в общем-то тоже, но не зелёный, а с розовыми щёчками.
Ты не туда с вопросом своим зашел
Я вот только таненбаума читал, впринципе почти на все вопросы могу ответить
какая то дибильная идея олимпиадка по осям
при закачке этих файлов и ручной установке их программа грит, что необходимо переустановка, при переустановке повторяется та же история.
Там же написано, что надо либа, кинуть ее рядом с экзешником
ага, пускай таблицу импорта через hex редактор чекнет, и все либы скачает)
Ну или пусть сразу научится пользоваться depends/dependencies/любой другой программой для просмотра зависимостей.
Эээ
Найти внутри папок компилятора где эти библиотеки, и добавить путь к ним в переменную окружения PATH.
Потому что нельзя вне метода/функции выполнять операции, которые не являются инициализацией. Ты же не можешь вне метода/функции написать cout<< "[eq"<<endl? Вот здесь та же морковь.
но ты можешь ее инициализировать нужным значением вне блока кода, например так - int a = 15;
>Я правильно понимаю, что буквально всё, что мы можем сделать вне блоков кода, это только объявлять и определять объекты?
по сути - да
>И я так и не увидел ответа на вопрос почему, вернее сказать, для меня ответ нельзя это неполный ответ.
такой синтаксис, стандарт языка. Ты всегда можешь написать свой компилятор, с блэкджеком и шлюхами
Код в функции выполняется когда вызывается функция.
А когда должен исполнятся твой код? А если его много в разных местах файла? А если много цпп файлов с таким кодом и работают они с одними и те же данными? А если это вообще код в статически или динамически подключаемой библиотеке?
Столяр - это говно. Только время потеряешь. К тому же этот чудик зашифровал свои книги так, что из них никакой текст скопировать нельзя. Т.е. хочешь пример кода из книги скопировать к себе в IDE, а хуя - на выходе будет не код, а мусор.
Я об этом думал, и мне как раз было интересно узнать, как это работает. Оказывается, такие стейтменты тупа не работают.
всё правильно. Код надо писать руками, для лучшего запоминания.
Сейчас через Wininet выходит около ~0,8-1 сек. на страницу...
не очень хочется распараллеливать выгрузку
libcurl
Начал писать на крестах скетчи для ардуино, для управления шаговыми двигателями @ час не мог понять, почему, когда я задаю больше колличество импульсов, двигатель делает меньшее количество оборотов @ в результате проблема оказалась в типе int, в который указывал количество импульсов и умножал это на микрошаг, а моём случае на 16 @ в результате на выходе получалось обрезанное число, и не возникало никаких ошибок, просто число обрезалось, чтобы уместится в тип int @ мне страшно представить, если подобная ситуация возникнет на каком-нибудь ядерном реакторе, короче типизация может быть опасной
>типе int, в который указывал количество импульсов и умножал это на микрошаг, а моём случае на 16
>типизация может быть опасной
Зато мы нашли причину проблем! Чертов инт, убрать его везде.
кек ну тогда получается, что на каждый пук нужно создать новую переменную которая будет принимать произведение двух чисел, а просто подставит как в моём случае микрошаг к переменной в которой указано кол-во импульсов нельзя, и в итоге мы получим лапшу из сотен переменных, нормально наверное писать такой код, когда ЗП почасовая
Просто софт для реакторов пишут люди немного поумнее пердуинщика.
>new Type[1]
Если у Type нет дефолтного конструктора, ты идешь нахуй.
>memcpy(...)
Если Type не POD, ты идешь нахуй.
>delete temp[]
К моменту выполнения этой строчки ты уже пошел нахуй.
создал в функци тип, удалил его, и еще пишешь - что нихуя не работает, что за пиздец?
>Если у Type нет дефолтного конструктора
У строк есть.
>Если Type не POD
Вот по этому поводу у меня было предположение, что со сложными структурами memcpy() не работает. В таком случае использовать std::copy? Или как в таком случае вообще копировать данные из одного участка памяти в другой?
>К моменту выполнения этой строчки ты уже пошел нахуй.
Ну это понятно, иначе бы ошибки с памятью не повалились бы. Просто не совсем понятно, как фиксить.
>>1999413
>создал в функци тип, удалил его
Удалил динамический массив объектов в данном случае же. Почему это не должно работать? В противном случае будут утечки памяти или я опять пидорас и что-то перепутал?
По нормальному, твой контейнер должен хранить не массив Type, а массив байт, в частности std::aligned_storage или его самописный аналог. (да, я же еще к memory alignment забыл доебаться)
И не копировать туда, а вызывать конструктор копирования/перемещения на нужном участке с помощью placement new.
А перед освобождением вызвать у каждого элемента деструкторы. То есть контейнер управляет временем жизни своих элементов.
Не проще Type тогда в vector хранить, чтобы не городить велосипед? Просто то, что ты предлагаешь в качестве решения, слишком сложно и муторно лично для меня, а сделать с этими ёбаными деками надо ещё кучу всего.
Проще, но есть один нюанс в лабе написано, что классы стека и дека надо реализовать самому)))0)))0) и при этом они должны хранить строки))))0000))))0)))0))))0000
(a,b) => {};
C++:
[](int a,int b) => {};
Почему тут лямбда такие убогие?
А ты ренжами.
вот скрин проблемы
лол и разрешить это не так просто как кажется, нужно прямо вот так:
long stepsToGo = 2500L * MICROSTEP;
>2500L
L там для левого числа, что бы показать компилятору, что это тоже long
что удивительно, код отрабатывает без выброса ошибки и как в случае на скрине, и так же в случае попытки типизации, но без L после числа @ это такие особенности крестов, или конкретно среды ардуино?
>[]
вот эта хуитка, как я понял, может в себе содержать инструкции, которые указывают на переменные из родительской области видимости, как я понял, лямбда в крестах по умолчанию нихуя не видит переменные из своего контекста, их нужно указывать в этой хуитке вроде как
Дефолтные размеры типов платформо зависимы, например лонг инт на винде 32 бита, а на линуксе 64, на ардуине хз сколько.
Если пишешь для ядерного реактора - указывай везде явные размеры.
>>1999675
ё, Анон, я сейчас поговорил с одним коллегой, который тоже угорает по крестам, и у меня возникли вопросы
почему ардуино выдает при умножения двух чисел, которые не вошли в границы типа int отрицательное число, конкретно в моём примере, если 2500*16 получается -25536 @ что это за число, как оно получается? Архитектура чипа 8бит, если это как-то поможет найти ответ.
Ок, я тут вроде как понял суть @ https://www.arduino.cc/reference/en/language/variables/data-types/int/
там указаны для типа int границы -32,768 до 32,767
вот, если ожидаемый результат в 40000 отнять 32767, то остаётся 7233
и если теперь -32,768 прибавить 7233, то мы получим -25536
ок, всем спасибо @ лол я боюсь спросить, а почему именно остаток прибавляется к нижней границе типа? @ это просто как типо чтобы всё пошло по кругу, без всяких там проблем и заморочек, где это прописано в спецификации крестов, можно ссылочку?
>мы получим -25536
-25535 на самом деле если считать как я, но алгоритм работы компиляции я понял похоже верно, и единица уходит на округление или ещё куда-то, вангую это не существенно
>пок пок пок
>For example, an unhandled arithmetic overflow in the engine steering software was the primary cause of the crash of the maiden flight of the Ariane 5 rocket
всё эпичнее чем ты думаешь Маня...
это кстати из спеки языка, которую я искал тут >>2000440
спека: http://www.cplusplus.com/articles/DE18T05o/
спасибо, теперь я знаю вроде особенности типа данных int в крестах
кек на очереди узнать как работает массив
Такой вопрос, а в крестах есть что-то похожее на объекты как в жс? @ Чтобы я мог декларировать объект например с именем stepperMotor и использовать его для хранения состояний без всяких заморочек, или тут всё по хардкору, нужно пилить класс stepperMotor, и потом наследовать в класс, например extruder?
И я же правильно понимаю, что в крестах нет мульти наследования, т.е. каждый класс можно делать extend одним, и только одним классом?
Эээ
Возможно мы говорим про разное, но кресты это вроде единственный мейнстрим язык с множественным наследованием (не интерфейсов, а вообще всего)
Да, это оно @ https://www.google.com/amp/s/www.geeksforgeeks.org/multiple-inheritance-in-c/amp/
Ок, тут кресты меня приятно удивили, лойс
По факту это очень очень редко нужно, в более новых ООП языках типа жавы и Шарпа от этого отказались, там только множественные интерфейсы.
> Ariane 5 rocket
Еще расскажи про рентгеновский аппарат, который сжигал каждого 255 пациента.
MISRA и ей подобные стандарты не просто так появились.
> спека
Не спека а статья.
Вот спека: https://www.iso.org/standard/79358.html
Искал плохо кстати. Переполнение signed int по стандарту - UB.
https://en.cppreference.com/w/cpp/language/operator_arithmetic#Overflows
Также это сказано и по твоей ссылке:
> When signed variables are made to exceed their maximum or minimum capacity they overflow. The result of an overflow is unpredictable so this should be avoided. A typical symptom of an overflow is the variable "rolling over" from its maximum capacity to its minimum or vice versa, but this is not always the case. If you want this behavior, use unsigned int.
Сосчаеры, помогите нубу оценить сложность моего решения!
https://ideone.com/RtRcXD
она n^2 из-за вложенного цикла?
>По факту это очень очень редко нужно
планирую писать код согласно принципу из жс экосистемы, ако "composition over inheritance" @ https://en.m.wikipedia.org/wiki/Composition_over_inheritance
как по мне, это овер гибкая и понятная архитектура приложения
как я вижу ситуацию в своем проекте с шаговыми двигателями и крестами @ в общем у каждого шаговика есть концевики, которые нужно опрашивать беспрерывно на фоне работы двигателей и есть ещё некоторое оборудование, которое тоже нужно опрашивать беспрерывно, чтобы когда сработает какой-то концевик, то основной цикл микроконтроллера loop должен продолжить выполняться, и эти статусы от концевиков должны быть переданы инстанциям, которые являются абстракциями шаговиков @ эти инстанции полученные из соответствующего класса будут содержать в себе поля для записи статусов и некую логику, которая будет реагировать на статус и затем влиять на работу других инстанций @ влиять в плане, я думаю запилить некий messages layer, куда логика инстанций будет скидывать команды или статусы, которые будут "слушать" другие инстанции и как-то реагировать согласно своей логики
Получается, что мне нужно запилить один класс для концевика и один класс для двигателя, потом нужно один класс для оборудования, но у нас в сумме 5 концевиков и 3 шаговика, как наследовать от трёх классов для 8 физических объектов инстанции, я это смутно представляю, а вот как сделать композицию из этого всего я вижу вполне чётко
Если тебе не нужны деньги, то можешь попробовать.
>овер гибкая
Всегда проигрываю с "гибкости". Типичная ситуация, когда писатели не видят дальше своего носа, поэтому делают "гибко". В итоге получается безликое нагромождение абстракций, которое еле-еле держится на ногах.
согласен, может ты и прав, я ещё ничего не начал кодить @ вижу в крестах есть много шаблонов проектирования @ https://refactoring.guru/design-patterns/cpp
Ок и какой шаблон выбрать для станка чем-то похожего на 3д принтер?
Эти все шаблоны - дедовская хуйня, и так уже никто в проде не пишет эдак лет 10
Бэк далеко не всегда на плюсах делается. Порой только критические секции. UI тоже не про qt - там вообще полный рандом.
Шаблоны действительно ушли в прошлое. Хайп пришёлся на 2007, потом пошёл на спад. Сейчас можно увидеть конструкции отдалённо похожие на, но в чистом виде уже шишек набили. Одна из проблем - слишком вязкая система получается, чтобы её нормально дебажить, рефакторить и расширять. Другая - в большинстве случаев шаблон костылями подпирается под текущие реалии, что вызывает анальные боли у тех, кто потом его использует или пытается осмыслить. За тот же синглтон с фабриками можно нынче и по ебалу получить.
Ок, а что тогда на плюсах делается востребованное у нас в Москве? Ну и чтобы студент не шибко вумный смог вкатиться курсе на 3-4?
>спека
кек вижу кстати для моего региона она платная
>The result of an overflow is unpredictable
если что, уже выяснили, что при переполнении работает релейт принцип @ https://en.wikipedia.org/wiki/Two's_complement
>>2000912
>все шаблоны - дедовская хуйня
>прод у нас в нормальном околофункциональном стиле
можно подробнее, что это за такой стиль?
>>2001381
как тогда структурировать код? @ где можно глянуть примеры четко структурированного кода в 2к21?
Именно стандарт на c++ (официальная документация) для всех платный. Поэтому существуют сайты подобные cppreference с бесплатной выжимкой из стандарта.
Чел, ты вообще непонятно что хочешь. Начинаешь про шаговые двигатели и управление железом, потом перескакиваешь на бэкенд, а потом уже на sdk ко всему этому. Все эти три штуки пишутся абсолютно по-разному.
Попробуй применить sizeof к массиву, выделенному динамически.
sizeof статический и вычисляется во время компиляции. Буферы выделяются в рантайме динамически.
Нет, не путаю.
>шаговики, двигатели, микроконтроллеры
это С с классами без виртуализации, наследования и ексепшенов
>один класс для концевика и один класс для двигателя
это объектный бэк, скрывающий работу с железом в C++ классах. делается в виде смеси функционалщины и ооп.
>как тогда структурировать код
это уже про sdk. тут либо на чистых функциях и структурах либо на шаблонах и опп с паттернами (то, что ты привык видеть в Java)
Ну и наконец
>чем-то похожего на 3д принтер
подобные железки работают на базе g-code и ты видимо вообще не в ту сторону воюешь.
Для совместимости с си при передаче массива в функцию он декеится до указателя, и его сайзоф внутри функции всегда будет размером указателя. Чтобы избежать этого используют стд аррай или обертки вокруг массива типа спан.
Почему найти работу с++ программистом сложнее чем С#. Я 2 года прогаю на плюсах, вроде хорошо и глубоко знаю, а на собеседованиях спрашивают ебанутые впоросы на которые хуй ответишь. Когда на Шарпе простые вопросы по спрашивали, спросили про паттерны и работу предложили с ЗП выше чем у плюсистов. Почему?
Потому что долбаные вузы учат плюсам искусственно создавая переизбыток крестопрогеров, снижая их стоимость и повышая планки требования.
Потому что рыночек.
1. Существенная часть вакансий это российское производство. Денег там как не было так и нет. Ждать, что оно на самоподдуве начнёт выходить на внешние рынки и расти без адекватного государственного участия просто наивно.
2. Плюсы долгое время теряли позиции по целому ряду направлений в пользу других языков. Соответственно предложение сократилось, а конкуренция среди работяг выросла.
3. На плюсах нынче важна специализация (по которой задают ебанутые вопросы), что мешает перекатываться между вакансиями. Вы знаете фильтры калмана, алгебру и стат моделирование? Нет - идите нахуй, у нас тут сигналы обрабатывают, а сетевое взаимодействие и микроконтроллеры ваши нам нахуй не всрались.
4. C# это часто энтерпрайз - там в принципе нельзя изучить предметную область. Ты приходишь на проект и месяц вникаешь в ебанутую логику очередной десктопной ERP системы. Собственно знание языка и паттернов это всё что надо знать.
Вузы работают на госзаказ, а госзаказ нацелен на убогое и нищее отечественное производство.
Ну то есть получается замкнутый круг. Предприятия вузу - нам надо столько-то молодых спецов. Вузик - обучил, люди пришли поработали годик за 30к с дедами, клептократами и прочими в проперженом офисе по графику с 9 до 18 и съебали в ужасе. Предприятие снова - нам не хватает кадров. И так из года в год строится учебная программа.
C++20 компиляторы пока толком не поддерживают.
По С++17 на русском есть краткий курс Страуструпа (но это не учебник, а беглый обзор) и пара книжек по STL 17 (но это только про STL, а не про язык в целом).
Короче, нет на русском.
Есть какой-то способ это сделать, чтоб на всех компиляторах/ИДЕ срабатывало, а не только в Студии?
лол могу тебе лишь посоветовать не натягивать свою сову на чужой глобус к месту и не к месту
я использую для своего проекта создания мини производства пикрелейт, и внезапно там чистый с++ и местами вставки из ассемблера
так что не зачёт, мы вам перезвоним
cmake
Сова не моя, такие тенденции. Ты можешь писать всё на С++, но задача определяет набор инструментов, а не наоборот.
https://devblogs.microsoft.com/visualstudio/visual-studio-2022/
А если искать работу за границей? Типо удаленно? У них же там все норм должно быть.
Радости уровня айфоней. Элитарии выше таких предрассудков.
А где ты опыт возьмёшь, чтоб тебя на удалёнку взяли? Сначала тебе придётся пробиться в какой-то местный топ тир и набить репутацию.
Пердуинка слабая, так что от пердолей язык высокого уровня тебя не спасёт (ассемблер там у тебя не просто так).
Не знаю, зависит от конторы. Но лучший вариант - поработать в филиале западной компании.
>Ты можешь писать всё на С++
лол что значит можешь? @ кресты по умолчанию стандартный ЯП в экосистеме ардуино, вот это поворот, да?
>>2001788
началось, слабая, конкретно этой нано-пердуинки хватает для управления тремя осями станка и ещё останется несколько свободных пинов, куда можно подключить оборудование @ у неё минимальное временное разрешение в основном цикле 4 микросекунды, это хватит для управления даже ядерной ракетой, которая будет лететь на гиперзвуковой скорости @ насчёт языка, смотри ответ чуть выше в этом посте
Так это типичное розовощёкое начало. Пок пок пок, у нас ещё пины есть и микросекунды. А потом под лупой код будешь колупать, чтобы ещё где-нить ресурсов наскрести (оптимизация на ассемблере, виртуализация - удоляем, ексепшены удоляем, стандарт кода сползает до с++11, оказывается что есть годные либы на С, которые вы сами навелосипедили на С++).
с++ в экосистеме ардуино стандартный, в плане по дефолту, под который есть сразу IDE с коробки, но есть возможность сделать так, что бы можно было писать код на любом языке, но я не хочу даже пытаться это сделать, так как на крестах для ардуины есть уже все либы и куча гайдов на ютюбе @ пример, ЖС на ардуино вместо крестов: https://flaviocopes.com/johnny-five/
>>2001873
спок, если мне буден мало этой нано-ардуинки, там ещё есть мега, у неё достаточно ресурсов и пинов для постройки целого робота, а не просто станка с 3 шаговиками @ такая ситуация как ты там себе нафантазировал, может возникнуть, если в дальнейшем я решу допилить туда дисплей, но это вроде как и не нужно
>есть уже все либы
кекнул
>я не хочу даже пытаться это сделать
откуда тогда вставки на ассемблере? или это умные люди писали вместо тебя?
>если мне буден мало этой нано-ардуинки, там ещё есть мега
Стоимость твой поделки вырастает в 2 раза или больше?
С гусями на обложке - норм, с горой - не очень норм.
устройся в МЦСТ
Лучше бы php учил, вёрстку, js. Здесь денег нет. А если и есть - то уже давно заняты дедами.
Обычная порча памяти. Проверяй memcpy, индексы и размеры буферов.
Не вчитывался, но у тебя WSAStartup нет. Это к проблеме не относится, но мало ли.
Лол, не заметил. Решил проблема, спасибо
гугли chocolate
значит я проебал 4-5 месяцев впустую, хотя мог бы уже сидеть в офисе макакой получать шеккели и съехать от мамки? ощущаю фрустрацию пиздец
переориентируюсь в гей-шлюху. мне реально в пхп и этот весь стек веб параши идти выгоднее всего?
Посмотри, какая в твоем городе есть работа (вряд ли там вообще будет с++) , и выбери сам.
Напиши свои, на макросах и шаблонах. Чтобы везде auto поставлялось, лол
class MyClass {
bool flag1 : 1;
bool flag2 : 1;
// ...
}
? Или является? Экономия памяти же налицо, почему всегда не писать так?
Чем больше ты сэкономишь на памяти - тем меньше сэкономишь на процессоре. Проц быстрее всего работает с байтами, а не кучей побитовых операций. Ну и это экономия на спичках, обычно у тебя не насколько булов, а куча указателей, строк, массивов и прочего.
Реализация битовых полей зависит от компилятора и может быть проблемой для совместимости. И нельзя взять их адрес или сделать нормальную ссылку.
Память ты так не сэкономишь. Структура будет выровнена на размер машинного слова. Даже если и нет, то минимальный размер объекта будет 1 байт - минимальный адресуемый объём памяти. У твоих полей нельзя взять адрес и сделать на них указатель.
С++ относится к семейству C-family. Из этого семейства я писал код на 6 языках. Python туда не входит в принципе, хотя и был "создан под влиянием".
Быстрее всего процессор работает с машинным словом.
т.е. struct zalupa{
size_t flag1;
size_t flag2;
}
будет ощутимо быстрее, чем твои байтики.
Приходится иногда писать на C# и сложно перейти с плюсовой модели памяти на модель памяти .net, не привык вызывать конструктор вместе с оператором new.
Прямых путей мало, или через winapi получаешь размер экрана консоли и отлавливаешь символы через cin, обновляешь экран консоли путем полного засирания его новой картинкой, либо юзаешь getch (который вообще POSIX насколько я знаю, Windows не POSIX совместима).
То и дело работаю с метапрограммированием, в c++14 очень не хватает if consexpr
Невозможно присвоить массиву initializer_list. Для C-style массивов не определены конструкторы копирования перемещения и вообще любые RAII фичи, потому вторая строка вообще недопустима. Если хочешь юзать C++11 фичи переходи на std::array.
QML это фича Qt Quick
В debug mode код собирается без каких либо оптимизаций.
return a < b ? a : b;
проверяет если а меньше, чем b - то возвращает а, иначе - возвращает b. Это тернарный оператор.
Можно заинклюдить, можно объявить разницы нет
>Невозможно присвоить массиву initializer_list.
{ 1, 2, 3, 4... } это не initializer_list, а initializer list.
C# неплох
Чтобы .hpp файлы не раздувались. Если от инклюд необязателен, как в случае, когда нужна только ссылка на объект, то лучше его не делать, так как это может привести к большим заголовочным файлам и медленной компиляции больших проектов.
Это копия, сохраненная 25 мая 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.