>>1758847 Можно упороться в variadic templates по приколу, но не стоит усложнять, благо в плюсах есть дефолтные аргументы, которые для таких целей подходят тютелька в тютельку.
Поясните, если я буду работать прогером, то у меня будут задачи, над которыми нужно подумать? Типо как в школе с олимпиадными задачами. Или это почти всегда тупа загуглил, написал.
Хочу вкатиться на плюсы. До этого писал лабы на чистой сишке и теперь стоит вопрос с выбором технической литературы. Что посоветуете читать из нее? Хочу написать календарь дел для практики, может есть какие-то советы по библиотекам или чему-то?(я нуфаг)
Ну там хотя бы можно понять - задумка была в том что бы дать самый низкий уровень абстракции не раскрывая при этом аппаратную архитектуру видеокарты. Отсюда и пердоль с девайсами очередями очередей и прочим этим.
>>1759160 Ты character literal имеешь в виду, например char ⚹c = &('q') ? Потому что это просто промежуточное числовое значение, у него нет адреса. Это то же, что и int ⚹n = &(10). А строковые литералы обрабатываются компилятором отдельно и сохраняются в памяти в явном виде, то есть адрес у них будет.
Сап! Интересно я один такой или есть такие же, когда у вас появляется проблема, которую вы должны решить, не пугает вас то что вы не справитесь или еще что-то в этом духе, как боритесь с этим, контролируете себя
>>1759205 Никак. Фейлы неизбежны, чел, а твои способности имеют свой предел. Относись ко всему с долей здравого похуизма и решай свою задачу, если тебе это действительно надо
>>1759166 Я просто сейчас пытаюсь разобраться с указателями и константами. Вот почему, например, пик работает? Ссылка это же просто замена разыменованного указателя. Можешь подробно рассказать как вообще работают указатели на rvalue?
>>1759321 Ссылки - это не просто сахарок для указателей, в них куда больше магии. Lvalue-ссылке можно присвоить временный объект (rvalue), но при этом ссылка должна быть константная. Например, const int &x = 123 тоже будет работать, будто это обычная константная переменная. Если это не примитив, деструктор не вызовется до окончания области видимости ссылки. А у примитива и деструктора не будет.
в апи при регистрации класс окна в поле соответствующей структуры записывается указатель на процедуру-обработчик
в своем классе-обертке я попытался в эту структуру скормить лямбду которая захватила this
но стейтфул лямбды к указателю не приводится
какие есть способы достичь желаемого эффекта (доступ к this в обработчике) например через промежуточную функцию или передав указатель на оператор() у лямбды
>>1759392 > но стейтфул лямбды к указателю не приводится Потому что лямбда - это не функция. Ты не можешь вызывать лямбду по указателю как функцию. Забудь про лямбды. > какие есть способы достичь желаемого эффекта (доступ к this в обработчике) Передавай ссылку на свой экземпляр объекта. А вообще завязывал бы ты с ООП, видно же что не шаришь, пытаешься функциональщину лямбду пришить к жопе классу.
>>1759392 Windows позволяет сохранить пользователь ский указатель в окне, что то типа setwindowlong . Юзай простую сишную функцию как обработчик, в ней извлекая указатель и дальше форвард вызов в свой класс
>>1759410 >Windows позволяет сохранить пользователь ский указатель в окне, что то типа setwindowlong. Вот только на этот long может оказаться несколько желающих. Лучше хэш hWnd => this. Ну как вариант.
>>1759497 Делал тест, типа недогуй. Единственный layout - табличный grid, единственный widget - rectangle. Под виндой можно вообще когда хочешь эти ректы рисовать, вне события WM_PAINT или WM_ERASEBKGND, вне Begin/EndPaind, все автоматически завязывается с vsync, ничего не бликает. Попытался повторить на XLib и охуел. Сразу тащи OpenGL, ну ок, но синхронизация у него работает натурально через ЖОПАэль. Нужна правильная видюха и драйвер.
>>1759518 Это в Си-тред лучше. Массив из 20 указателей на функции, которые возвращают int ✱, а аргументы у них int и еще какие-то ебнутые указатели на указатели на указатели. Кстати, сколько помню, по сишному стандарту, массив в аргументах считается как указатель.
>>1759527 Вопрос с подвохом, и суть в том, что если ты решил на него ответить, то скорее всего ты хикка-задрот-языков, который ничего не смыслит в программировании
>>1759527 Нет, неправильно. Ваще не массив. Там ваще нет массивов, только указатели на них. В данном случае 7.2 вообще ни при чем, он применен не будет.
>>1759509 С таким подходом и электрон быстрый. Куда спешить, можно нагружать систему по полной всяким говном, таскать с собой комбайн на все случаи жизни и рисовать только на ЦП. Пока не тормозит на ш5 - гуй быстрый.
>>1759595 Да тебе неделю чистого времени дай - и ты разве что методом тыка угадаешь. Лол, а еще кудахчут, что силечка - илиминтарна. Простейшую строку не могут распарсить!
>>1759600 Парсить строки - есть специальный инструмент - парсер. Если ты за него - вот и распарсь эту строку, чтобы я понял, если нет противоположной задачи.
Аноны, condition variable юзается только в unique_lock, насколько я понял. Что делать, если у меня в отдельном потоке функция с бесконечным циклом, где я хочу оставаться, не выходя из нее, и ждать оповещения от другого треда о событии Х, чтобы сделать действие Y и пойти на следующую итерацию бесконечного цикла, опять ударившись в wait? Заранее спасибо.
Как же горит у тупорылых студентишек и вайтибыдла от простейшей строчки на Си, ору в голос. Ебать сука бля обоссанки тупорылые. Как же вы будете на шаблонах куролесить, маньки )))
>>1759518 Поскольку такая вещь (✱const ✱) не является объявлением параметра функции (типа то нету), вангую пример на знание того что (int)smth ≡ int(smth)
>>1759518 Указатель на массив из 20 указателей на функции, возвращающих int, и принимающих инт и массив из 10 указателей на константный указатель на константный указатель на чар
Я задам тупой вопрос но всё таки я это правда не понимаю, я новичок в С++. Есть такая штука "Vcpkg" - кросс-платформенный менеджер пакетов с открытым исходным кодом от Microsoft. Но я не до конца понимаю что он делает, то есть к примеру если я установлю библиотеку через него то у gcc не будет проблем с линоковкой либ?
>>1759875 :( А есть какой нибудь удобный и понятный способ/гайд по линковке либ для gcc? Пробовал я у gcc -L -l -I как-то вообще игнорит указанный путь. Не хочется IDE ставить, меня возбуждает мысль о писании кода в блокнотах.
>>1759854 Заставить vcpkg работать на винде с чем-то, кроме вижуалки, у меня не вышло, при сборке всегда была простыня в духе "undefined reference to X". В самой вижуалке работает охуенно.
>>1759891 Удобного способа подключать либы на C++ не существует. Кроме vcpkg есть ещё conan и ещё десяток менеджеров пакетов, но одни работают криво, а в других не хватает либ. Так что и по сей день самый удобный способ - вручную качать архивы с сайтов либ и подключать, и ещё повезёт, если есть билд хотя бы для x86_32.
>>1759911 Он же для СMake? И ещё дебильный вопрос про CMake - это же не компилятор а хрень которая указывает компилятору на либы и как вообще компилировать?
>>1759919 CMake - это генератор файлов для разных систем сборок. Например, make-файлов, проекта visual studio (ms build) и ещё куча никому неизвестных. В теории, создаёшь CMakeLists.txt, пишешь в нём пару десяток строчек с указанием путей до либ, запускаешь, и у тебя получится готовый make-файл на несколько сотен строчек, где уже всё учитывается и прописано. На практике всё так себе.
Что можно почитать об указателях, умею из них делать всякие йобы, по типу списков, двусвязных списков и т.д. Но ведь на этом же их применения 100% не заканчиваются, не понимаю, какое применение есть указателю на функции. В общем, реквестирую хорошую литературу по указателям и работе с памятью.
В чьих-то каментах вступил в дискуссию о недостатке программистов в Америке и тут Линкедин подбросил "работу которая может вас заинтересовать", я октрыл только из за идиотского названия компании...
Job Type: Full-time Salary: $120,000.00 to $130,000.00 /year Интересно, кого в конце-концов наймут на эту работу?
... я не часто объявления о работе читаю). Да и зарплата редко бывает, все хотят пропустить народ через 100 часов интервью, а потому предложить 100 штук, типа шестизначная зарплата, чувак и ты уже столько времени на нас потратил - соглашайся быстрее!
То, что они указали зарплату, говорит о том, что они думают что это много и выделяет их среди остальных.
> А чо, норм зарплата, для мидвеста )
Это ЛА ... и зависит от Мидуэста, в Чикаго на такую зарплату народ тоже не набежит.
Крестоаноны, почему такие собесы стали сложные? Либо сразу берут в какую-нибудь шарагу после базаров за жизнь либо блять часа по два-три бесед по си++ и разным многопоточностям с алгоритмами. Я после последних двух трехчасовых собесов к которым я готовился пару месяцев решил вообще в джаву перекатиться, что-то блять с рынком в ДС не то.
>>1760079 Знакомые из джавы тупо на похуй приходят со знаниями Spring сразу на 120к без всяких исключений в списках инициализации и реализаций хеш таблицы на бумажке.
>>1760080 >>1760079 Ну так джавистам нужно будет тупо пилить бизнес-логику, забив хуй на перфоманс. Не как в плюсах, где экономить и оптимизировать нужно всегда, когда есть хоть малейшая теоретическая возможность. На то это и плюсы.
>>1760079 (You) По стилистике уже понятно, что ты довольно истеричный парень, у тебя проблемы с логикой и восприятием этого мира. Ты типичный пидорахо-бизнесмен, который нихуя не понимает в бизнесе и нормальных отношениях "работодатель-работник". Думаю, программисты, которым ты писал, были того же мнения, поэтому им было похуй, сколько ты предложишь - работать с истеричкой никто не захочет. Мой совет- выкатись нахуй из айти. Продавай щебень, лес, уголь. Но не трогай айти - это явно не твоё.
>>1759891 >Пробовал я у gcc -L -l -I Если указываешь нестандартный путь (например, в папке экзешки) к динамической SO-либе через -L, то экзешка не запустится. Там надо через переменную LD_LIBRARY_PATH указывать эти специальные пути, либо линкеру ld при сборке флагом -rpath.
>>1759891 Может быть ты пишешь \ вместо / ? Или у тебя пробелы в названиях папок. Пиши -I"C:/My Include Folder" если на винде. Кроме того линкеру нужно название либы без префикса. Т.е. если либа называется libSDL2, то линковать надо -lSDL2
Аноны, я ебусь с одной адской хуйней, даже не поверите. Нужно портировать старый код чтобы он на 2019 собирался, у них есть STL map и зачем-то им нужно напрямую манипулировать внутренним представлением map как red/black tree. Они там устанавливают _Myhead = ... и потом _Myhead->_Left, _Myhead->_Parent и тд. Видимо в старых версиях stl этот _Myhead был public, а сейчас его не видно. Вернее он типа есть но в другом, внутреннем классе _Tree_val. Я вообще не понимаю как эта хуйня устроена так как мне в страшном сне бы не приснилось туда руки сувать. Кто-нибудь знает как при помощи наебок и кастов или итераторов до _Myhead добраться?? Эта вся хуйня в <xtree>
>>1760096 вообще последние годы я ++ брал только из-за того, что знаю более менее этот язык и можно было делать кроссплатформенное по, которое сразу и на линукс и на винду шлу и на некоторых одноплатниках.
Как вообще с зависимостями бороться в ебучем cmake? В либе с гитхаба конфиг на 1000 строк и не хочет собираться в статическую либу. Гугл выдает хуйню, которая сыпет ещё больше ошибок. Нихуя не линкуется, cmake до перезапуска IDE начинает видеть несуществующие строки в конфиге. Нахуя эту парашу придумали, если нужен отладчик для конфига этой дрисни чтоб понять что происходит? И ведь самый пиздец что ничего не пишет конкретного, ошибка линковки и соси хуй. Аж трясёт. Может есть для людей варианты? Чтоб не ебаться со сборщиком дольше чем пишешь код. Я бы уж на MSBUILD даже залез, если бы эта хуйня выдавала рабочую статическую либу. Генерирую проект под студию, собираю и пиздец - MSBUILD не хочет это говно принимать, тоже высерает ошибки линковки и гадай что ему не нравится.
>>1761097 столкнулся с ситуацией, где при использовании двух разных мьютексов в двух разных тредах (в связке c unique_lock и condition variable) у меня происходит дедлок. Используя при этом глобальный общий мьютекс, все шло как по маслу (оба метода принадлежали разным классам, если что). Вот и навеяло вопрос...
Есть один .exe и две .dll. Как написать в одной dll функцию, которая будет грузить ресурсы из другой dll (или exe), с указанием ID этих самых ресурсов? Основная проблема заключается в том, чтобы получить HINSTANCE одной dll из другой. Была идея сделать параметр по умолчанию, но, например, GetModuleHandle(0) возвращает HINSTANCE exe, а не вызывающей его dll.
>>1761185 Когда не было RAII и прочего, можно было случайно проебать очистку ресурса, сделав return посреди функции. Поэтому некоторое время людей учили, что return должен быть только один, в самом конце.
>>1761429 Но ведь push x; ret медленнее jmp. При return тебе надо в стек писать. Вызов процедуры - это вообще пиздос какой оверхэд по сравнению с простым переходом.
>>1761435 >Но ведь push x; ret медленнее jmp. Гомпилятор сгенерирует тебе jmp из ветки if на тот же эпилог функции, потому что возвращаться-то надо. Кстати, сейчас clang/gcc умеют делают эпилог на месте каждого return, чтобы обойтись без перехода. >При return тебе надо в стек писать. В С не надо, результат возвращается на регистрах.
>>1761442 Проклятый интерфейс двача. Нажал не написав пост, и удалить-то его даже нельзя
>>1761435 >Но ведь push x; ret медленнее jmp. При return тебе надо в стек писать Тебе в любом случае где-то нужно будет сделать return. Ты либо его делаешь сейчас, либо делаешь джамп на return.
>Вызов процедуры - это вообще пиздос какой оверхэд по сравнению с простым переходом Если листовые функции, то вообще нет. Да и в других случаях тоже, потому что сегодняшние соглашения о вызовах достаточно вменяемые в этом плане. ЕМНИП в какой-то статье из серии Lambda the Ultimate упоминался пиздец, который творился при вызове функций в древних компиляторах. Оттуда, наверное, и пошло, что вызов функции очень тяжёлая вещь.
>>1761441 > эпилог на месте каждого return Что за шиза? У тебя всегда выход из функции через ret, в EIP из стека кладётся адрес возврата. И то что у тебя в регистрах 4 аргумента ещё ничего хорошего не значит, их ещё компилятору надо туда запихать. fastcall от мягких успешно был обоссан и в 32-битном коде до сих пор stdcall или cdecl в либах. На x64 вынуждено перешли на аргументы в регистрах, т.к. только rax жрёт imm64. >>1761448 > соглашения о вызовах достаточно вменяемые в этом плане У тебя в любом случае будет пролог, эпилог на мелких функциях компиляторы успешно режут. И call всё ещё медленнее jmp, хотя оба сосут. Если у тебя функция уровня пары арифметических операций, то оверхэд на вызов займет больше времени, чем выполнение полезного кода. > Оттуда, наверное, и пошло, что вызов функции очень тяжёлая вещь. Это пошло и продолжается от архитектуры х86, где переход в 5-25 раз медленнее других инструкций. Медленнее перехода только деление. Именно поэтому функциональщина всегда сосёт по производительности у Си-портянок. Так же как и кресты с ООПом сосут у голого Си.
Я надеюсь, что тут в курсе, что то о чем вы спорите (соглашения о вызовах) относится исключительно к библиотечным функциям с явным их экспортом. В рамках того что не экспортируется оптимизатор может спокойно делать всё что угодно, хоть лапшу из джампов, ХОТЬ ИНЛАЙНИТЬ?
>>1761509 > В рамках того что не экспортируется оптимизатор может спокойно делать всё что угодно, хоть лапшу из джампов, ХОТЬ ИНЛАЙНИТЬ? Это скорее к GCC относится, это там компилятор делает что хочет. А у майков в этом плане всё более строго, надо явно указывать что делать можно, по дефолту он не станет наглеть. Но полностью функциональные кишки всё равно никто не вычищает.
>>1761490 >переход в 5-25 раз медленнее других инструкций Посмотрел Агнера, по нему долгий только RETF (но мы ведь все в длинном режиме, так что он не нужен). Обычный RET (он же RETN) в процах 1-4 опсов занимает. Судя по https://blog.stuffedcow.net/2018/04/ras-microbenchmarks/ это действительно так.
>>1761554 > Обычный RET (он же RETN) в процах 1-4 опсов занимает Ну д, выполнение инструкции. А теперь плюсуй запись в стек адреса, чтение адреса из стека, переход после записи по этому адресу. Вот и имеем 20-30 циклов если предсказание совпало, по твоей ссылке столько и есть, примерно. За это время даже пару раз поделить успеем. Или около 50 операций сложения сделать. А если промахивается, то там пиздец за 100 циклов уходит.
>>1761490 >Что за шиза? Просто погугли, что такое эпилог функции. Так вот, их в функции может быть несколько при наличии ветвлений. >у тебя в регистрах 4 аргумента ещё ничего хорошего не значит Я тоже считаю, что интел = кал.
>>1761562 Я, может, не то прочитал, но по ссылке указывается, что вся машинерия для call+return занимает в среднем 5 циклов (таблица 1, колонка CALL+RET). Не вижу, откуда ты взял 20-30.
>запись в стек адреса, чтение адреса из стека, переход после записи по этому адресу Return Address Stack так и предназначен, чтобы не читать из стека который в памяти и удачно предсказывать направление перехода. А запись в стек адреса возврата в самой процедуре невидима, потому что не порождает зависимости по данным и последующие инструкции спокойно выполняются out-of-order.
>>1761577 > вся машинерия для call+return занимает в среднем 5 циклов Внимательнее смотри что там меряют. Это бенчмарк в вакууме. Там только выполнение голых инструкций последовательно. > удачно предсказывать направление перехода Это только в таком абстрактном бенчмарке всё так просто. Миллион описаний есть как это работает в реальных условиях, почитай. > последующие инструкции спокойно выполняются out-of-order Чел, плиз. Открой в отладчике любую функцию и посмотри чем там занят проц на ближайшие инструкции. Нам запись тут вообще поебать. Важнее как быстро в больших процедурах его забирать обратно.
>>1761490 >Это пошло и продолжается от архитектуры х86 >Именно поэтому функциональщина всегда сосёт по производительности у Си-портянок. Этому надо читать AIМ-443
>>1761588 >Миллион описаний есть как это работает в реальных условиях, почитай. Приведи одно-два описение с замерами тогда. Желательно на современном процессоре (хотя бы core 2). И всё-таки, откуда ты взял 20-30 циклов?
>Открой в отладчике любую функцию и посмотри чем там занят проц на ближайшие инструкции Лолшто. Как ты мне предлагаешь внутренние (не архитектурные) регистры через отладчик посмотреть?
>Важнее как быстро в больших процедурах его забирать обратно. Совсем нет. Как-нибудь потом загрузка со стека реально выполнится, процессор сверит с предсказанным, скажет "ок" и поедет дальше. Спекулятивное исполнение уже далеко впереди будет.
Вы не забывайте что то что у вас по цифиркам тактов выходит, не то же самое что будет в микрокоде самого процессора. Не могу найти статью, вроде на хабре была, примерно про то, как в гипертрединге два потока выполнялось медленнее, чем один, потому что конвеерам требовался один и тот же модуль чипа и они начинали тротлить чтобы дождаться его освобождения.
>>1761667 >Вы не забывайте что то что у вас по цифиркам тактов выходит, не то же самое что будет в микрокоде самого процессора. Надо просто в голове совместить циферки throughput/latency команд и знание микроархитектуры. Сразу будет неплохая оценка производительности. И это не 20-30 циклов. Это около 5 циклов на весь эпилог.
>>1761843 Никто не умеет понимать код буста. Дело не в умении и не в желании понимать код буста, и вообще ни в чём. Дело лишь в самом запихивании буста во все проекты подряд.
>>1761906 >>1761885 Разве это не причина в будущем писать хуйню тяп-ляп? Правда я иногда просто не понимаю, зачем они на самых первых страницах показывают примерный как я понял код по идее встроенных функций, ну да ладно . В любом случае чтение такого кода как на пикриле для меня пытка и я синтаксически мало его понимаю.
>>1761910 Пчел, тебе не надо понимать, как написана библиотека, читая ее код - ты должен понимать библиотеку по документации и примерам. То, что ты пишешь хуйню тяп ляп и то, что ты не можешь читать код буста - это вещи никак не связанные.
У нас вон вообще правило, что буст тягать нельзя ни в один проект, и я, пожалуй, с этим правилом солидарен в текущий момент. Есть небольшие отдельные либы, которые вполне решают нужные проблемы, а не завозят буст. В случае, если бы я писал сетевое что-либо - я бы наверное пошел искать отдельную сетевую либу, а не тянул буст асио (без проблем переживу просадку в перфе кек)
>>1761921 > Пчел, тебе не надо понимать, как написана библиотека Так это в доке написано. Хз чему тогда верить.
> В случае, если бы я писал сетевое что-либо - я бы наверное пошел искать отдельную сетевую либу, а не тянул буст асио (без проблем переживу просадку в перфе кек) Ну мне посоветовали здесь взять boost beast, ну я и взял.
>>1761910 Ну конкретно на твоем скрине ничего такого нет, обычный код. Боюсь представить что будет если ты зайдешь посмотреть их заголовок с препроцессором
>>1761921 >Пчел, тебе не надо понимать, как написана библиотека Не слушай этого слабоумного зумерка. Смотреть код популяреых библиотек, в том числе из стандартного набора, должен каждый уважающий себя программист, только так ты научишься писать грамотный код и делать всё по уму. Это отличная возможность быстро развиваться, а не приходить к этому самому сквозь ошибки через n лет. Можно сравнить с человеком, которого научили сложению, но ничего про умножение не рассказали, да когда то он поймет, что 2+2+2+2+2 можно выражать как 2×5, но дойдет ли он до возведения в степень? Дойдет ли он до умножения столбиком?
>>1762030 Учи принципы проектирования, ооп и солид. Главное не паниковать и не бояться перечитывать код по сто раз, до тех пор пока ней поймешь почему сделали именно так. После осознаеия приходит озарение и ты начинаешь не паниковать, а думать о том как всё хорошо устроено и логично, а также о том почему у тебя изначально понимание этого когда вызвало затруднение .
>>1762087 >язык, единственная цель которого добавить ООП в сишечку >сам труп страуса постоянно кичится тем, что на с++ можно писать хороший ооп код с зиро оверхед >неостлятор-корзина с двача: нинужна яскозал, вот на си я всё одним полотном хуячид и на с++ такжи нужна!!! Проиграл с дебила
>>1762058 хз, лично я не пишу вообще в процедурном стиле на крестах, зачем? Если я хочу упороться в процедурщину (или если хочу написать какой-нибудь драйвер на Линукс), то да, Сишка - лучший вариант. А если плюсы - чистый ООП. ООП удобен тем, что используя эту парадигму, удобнее: а) Скейлить большие проекты, б) Представлять оверолл архитектуру кода. Плюсы позволяют писать чистый ООП (причем для особо требовательных программ можно схитрить и юзать статический полиморфизм, который не трогает vtables и не замедляет программу в рантайме), грех это не эксплуатировать.
Речь про то, что возможность пердолить в процедурном стиле, наследие в виде долгого переходного периода, когда десктопная байтоебля переползала с С на кресты и общий объем легаси-кода вызывает рак кресторазработки, когда с соблюдение бестпрактисов ООП нужно еще днем с огнем поискать, а сеньеры разносят рак со старых проектов в новые.
>>1762207 Новые проекты все реже и реже пишутся на плюсах, я уж не говорю про Си, увы :( Клятый раст отбирает всю систем-левел кормушку. А все из-за ссаного левацкого маркетинга про коко-безопасность. Тьфу им в харю! Вот и пердолят легаси со всеми вытекающими... Красивые кресты с бестпрактисами ты скорее увидишь в репах у любителей-энтузиастов, но никак не в кодовой базе, которая тянется еще с девяностых.
>>1762291 2 конченные конторы, которые занимаются блокчейном, отказали мне из-за того, что, видите ли, они решили с крестов на раст перейти. Ублюдки ссаные. Я во второй спросил: "И что, многие сейчас на раст переходят?". Они сказали: "В лоу лвле или там, где нужен перформанс, если проект пишется полностью с нуля, то да, Раст предпочтительнее крестов для многих компаний". У меня аж ком в горле встал. Обидно за кресты, хоть и продолжаю писать на нем свои пет- проекты.
>>1762409 >Двухмерная игра "куб сьел квадрат" на SDL или SFML Что-то подобное уже есть, только на pygame, на плюсах смотрю в сторону 3d на openGL, создать что-то вроде простого майнкрафта, но может есть поинтереснее идеи/инструменты(например не opengl а Vulkan)
Как при выполнении операции int i = 5; i = ++i + ++i; получается не 13, а 14? А? Ученые, в говне моченые? Если я инкрементну i то в первый раз получится 6 а не 7, у меня не пропадут блядь яблоки все разом нахуй.
О каком первом разе ты говоришь, если, скажем, все инкременты и декременты выполнятся до вычисления выражения, и в обоих разах будет 7, например? А если вспомнить, что это UB, в результате хоть 100 будет, хоть сегфолт, хоть dwarf fortress запустится.
>>1758813 (OP) Мб тут сидят челы шарящие за qml, у меня есть stackview приложение, в хедере сделал label с названием текущей страницы, но проблема в том, что пользователь может пойти по такому пути (главная->настройки->темы) а потом возвращаться обратно, и вот чтобы написать сверху корректное название страницы, мне нужно знать какая именно сейчас страница, есть ли возможность это узнать?
>>1762412 Стыдно должно быть, когда такие вопросы задаешь. Ладно там макако-языки, которые с памятью не работают, но при работе с плюсами ты же должен понимать, что переменная i не продублируется в памяти и обращение всегда идет к одной области, далее достаточно знать приоритет операторов и всё становится ясно - увеличивантся i на 1, получаем i=6, увеличивается i на 1, получаем i=7, складывается значение i с значением i, т.е. 7+7, результат записывается в i
>>1762491 >>1762495 Бля чета ору делаем один инкремент и получаем результат ок а делаем два инкремента и все пиздец UNDEFINED BEHAVIOUR ГДЕ ТЫ Я БЕГУ ЗА ТОБОЮ тупа на отъебись исключение сделали и так пойдет
>>1762495 Ты не можешь полагаться на значение переменной, если в том же выражении ты ее инкрементируешь. Результат зависит от уровня оптимизации и чего угодно еше.
>>1762533 > ((5 + 1) + 1) Откуда второй инкремент? Плюсики перед переменной - инкремент до выполнения операции с ней. Как у тебя инкремент 5 даёт результат 7, шиз?
>>1762534 Вычисление не до операции, а до выражения шиз. Компилятор, полагаясь на то, что ты только один раз заинкрементишь, может поменять порядок вычисления. А ты его наебал, заинкресентил дважды, получил предсказуемое UB и жидко обосрался.
>>1762553 Массив из 20 указателей на функцию, возвращающих указатель на int, и принимающих инт и массив из 10 указателей на константный указатель на константный указатель на чар
>>1762594 И каково писать код в кернел-спейсе без STL? Понятно, что плюсы в лоу лвле дают жесткое преимущество в лице темплейтов, constexpr, ну и ООП, но все же...
И да, дрова же на винду пишите, я так понимаю? На Линукс писать дрова на плюсах - тот еще анальный секс.
>>1762535 > Компилятор, полагаясь на то, что ты только один раз заинкрементишь, может поменять порядок вычисления. А ты его наебал, заинкресентил дважды, получил предсказуемое UB и жидко обосрался. Только если в твоих фантазиях. Мой компилятор работает как надо и видит что там написано. Ты, блять, не в карты с компилятором играешь, чтоб наебать его, вытащив из рукава инкремент.
>>1762643 >>1762646 >>1762647 >>1762650 >>1762659 >>1762677 Хули вы тут нанаркоманили, довны? Вам заняться больше нехуй, дебилы великовозрастные? Слово "стандарт" не слышали? Всем насрать на ваши пердольки в соснольке, тестовые запуски и дизасм, канают только цитаты из стандарта. Ибо компилятор сегодня так компилит, а завтра хуяк — и новая версия вышла, которая диск форматирует. И то, и другое будет допустимо по стандарту, т.е. правильно, ибо для вашего примера по нему BEHAVIOR IS UNDEFINED.
>>1762695 Когда кто-то говорит "UB", всегда подразумевается стандарт. Но тот анон и слышать ничего не хочет и пытается применить логику других языков к плюсам.
Пытаюсь вкатиться на плюсы после обычного си. Но мог не желает воспринимать даже банальное std::cout cout<<"sosi pidor"<<endl; Если endl ещё понятно, то :: << что за хуита типа ассемблера блядь. Это пиздец даже хелловорлд по памяти не могу написать. Это пройдёт или мне не дано?
>>1762836 Дурачок, да ты будешь со своими дноклассниками в падике так базарить. Пруфца у конпилятора спроси (но ты не сумеешь, лол). >>1762777 Говно из жопы. Этот >>1762783 дело говорит. В принципе, конфиг-структурка тоже канает.
>>1762926 >Стандартные потоки говно. >Юзай fmt::print, к примеру -- https://github.com/fmtlib/fmt >вроде оно в стандарт должно скоро войти А можно просто printf
>>1762928 Если буст нашёлся, а автокомплит и прочее не работает, то это к Intellisense, гугли, хз чё за IDE у тебя. Ещё проверь, что ты линканул нужные таргеты буста со своим таргетом с помощью target_link_libraries
>>1762954 И что? Стд вообще лучше не пользоваться. Там обычно нечто раздутое и пытающееся угодить всем но по чуть чуть. Этакий средний вариант. Узкоспециализированные либы всегда лучше. Это же касается всяких контейнеров, строк и т.д.
>>1762968 Что не так, школьничек? Никто в здравом уме не будет использовать std::string для чего то сложнее laba2.cpp в текстовых редакторах нужны ropestring, в базах данных тоже свое.
>>1762991 А имена файлов в редакторах у тебя тоже роупстринги? А текст в менюшках, диалогах и прочем? А строки запросов в поиске и прочем? А в графических редакторах тоже роупы? Или графические — хуйня для школоты? А в играх? Короч хуйни-то не неси, дядь. То, что ты перечислил — узкие области.
Читаю книгу Страуструпа, нахожусь на главе 12.3, скачал установил fltk все работает , но не могу найти simple_window.h и т.д, на его сайте не нашел, где еще можно найти эти файлы? Подскажите пожалуйста.
>>1758847 Знаю, что слоу, но блядь, какого хера пихать объявление структуры в класс? Это же блядь неудобно, когда у тебя есть многоэтажная херня, тем более такая.
Как много интересных проектов пишется на плюсах? Под интересными подразумеваю разные алгоритмы, оптимизацию разную Или большая часть - это дрочево Qt, winAPI, MFC и прочем байтоебстве?
>>1763276 Ну деревья бабахаю я и так, просто интересно в каких местах нет дрочева каких-нибудь легаси технологий, под винду, да еще и за низкую зп?
Я сейчас в ДС нахожусь, из интересного видел только хуавей и яндекс. Еще смотрел на разработчиков софта для моделирования, сапры там разные, но работы уж сильно мало.
>>1763070 Сударь, вы не потеряли часом стыд требовать поддержку стандарта, который ещё не приняли? Так-то в GCC 10 из крупных изменений только модулей не хватает, но серьёзно применять всё это дело лет через пять, дай бог через три можно будет без опаски.
Задали задачку, не смогла решить. Есть функция на С++. Она принимает параметром указатель на функцию, принимающую параметром void☭ и возвращающую bool.И самая первая функция возвращает bool: true, если функция-параметр возвращает false при передаче ей параметром самой же себя. Вопрос: что вернет самая первая функция, если ей передать параметром саму себя?
Почему во многих, даже практически во всех, примерах/туториалах не используется "using namespace x", а просто везде пишется x::? Ведь вариант с using namespace удобней же.
>>1763509 Почему бы тебе не спросить это на парах у своего пердподавателя вместо того, чтобы засирать ламповый тредик на двощике? И почему бы тебе вместо того, чтобы считать себя самым умным и задавать "риторические" вопросы космического масштаба и космической же глупости, просто не взять бест практис на вооружение?
>>1763513 Спасиб, я думал может разница какая есть.
>>1763514 Я ничего не засираю. У какого преподавателя? Почему тут все думают если задаю вопросы по программированию то я учусь\работаю в этой сфере. Для меня это просто увлечение. И с чего ты взял что я считаю себя самым умным? Мне просто интересно было. Ёбнутый.
>>1763520 Вы стоите на самой низкой ступени развития, вы ещё только формирующееся, слабое в умственном отношении существо, все ваши поступки чисто звериные, и вы в присутствии анонов со знанием стандарта позволяете себе с развязностью совершенно невыносимой подавать какие-то советы космического масштаба и космической же глупости о том, как удобнее неймспейсы использовать. Вам нужно молчать и слушать, что вам говорят. Учиться и стараться стать хоть сколько-нибудь приемлемым членом социального общества.
g++ - надмножество компилятора gcc для компиляции плюсового кода. laba1.cpp - твоя лаба на плюсах, которую ты хочешь скомпилить, студентик -g - флаг, который добавляет символы отладки в бинарь, чтобы ты не отлаживал чистый асм в итоге -o - флаг спецификации имени исполняемого файла laba1 - имя исполняемого файла твоей лабы.
Запуск - ./laba1
Формат бинарных файлов в Линуксе - ELF (executable and linkable format), погугли его структуру, гораздо менее заебистая и костылированная, нежели у виндовых бинарей.
>>1763651 > Формат бинарных файлов в Линуксе - ELF (executable and linkable format), погугли его структуру, гораздо менее заебистая и костылированная, нежели у виндовых бинарей. Красноглазому дауну с комплексом неполноценности лишь бы на винду насрать
>>1763651 > менее заебистая и костылированная Именно поэтому надо под каждый дистр собирать эту дрисню или тащить с собой столько зависимостей, что электрон позавидует? Действительно всё для людей.
>>1763651 > g++ - надмножество компилятора gcc для компиляции плюсового кода. Нет, т.к. плюсы - это не надмножество сишки, а в лучшем случае надмножество некоторого её подмножества. Даже набор UB у них разный.
>>1763744 Найс пердак у виндауна улетел) >>1763781 Под какой каждый дистр, какие еще блять зависимости, шиндо-шиз? Ты Линукс хоть раз юзал или слушал рассказы неосиляторов, пытавшихся в 2000 году поставить дженту на камплютер?
>>1763861 > "Дерьмо", которое крутится на 90% серверов в мире, на 100% роутеров, на 100% суперкомпьютеров, на всем IoT, Андроид (там Линуксовое LTS ядро и подрубленный SELinux), клауды, вся эмбедщина, вся робототехника, автономные машины, а также все вменяемые RTOS тоже на основе Линукса. Линукс - literally костяк почти всех компьютерных технологий в мире и костяк всего Интернета. Нет Линукса - нет Интернета. > Винда, которая господствует только на десктоп сегменте благодаря агрессивному маркетингу и своевременному впариванию говна в хлебала потреблядей, проиграв во всех остальных сегментах рынка, жидко обосравшись в рейтузы, ибо они производят зондированное лагающее говно для типичных потреблядей с 1985 года.
>>1763881 Ебать ты клоун, иди хоть глянь актуальные статы. IoT - 30% винда, Server Os - более 50% винда, Desktop - 90% винда. ~60% тырпрайза за бугром - винда. И это еще даже Windows X не вышла. Через годика два винда будет преобладать вообще везде. Легаси линукс не нужен.
>>1763881 Дурачок не понимает, для чего нужна каждая операционная система, и искренне считает, что винда всем насильно засунута только благодаря маркетингу. Я в шоке.
Попиши код на роутере, полудурок. А я буду его писать в студии под виндой.
Для гуя надо отдельную прогу ставить, некоторые проги работают, некоторые срут в консоль и падают, ещё куча варнингов про непрааильную версию mesa. Чтобы починить, нужно хитро переименовывать либы в /usr. Докер просто так не работает, нужно гуглить "как установить докер на всл" и читать огромные статьи, где пишется, что для установки ещё и докер десктоп нужен. systemd как таковой есть, но через него ничего не сделать. Сервис не запустить, в автозапуск не добавить. Ну а с case insensitive ничего не сделать, пока это работает поверх NTFS, а не в виртуалке.
>>1763867 >Гуй Нахуй он на серваке? Запускать фотожоп под вайном? У тебя уже есть охуенный виндовый гуй в самой же винде, хули тебе еще надо? А ДЕ линуксовые один стыд, что планшетопараша гном, что убогая поебень в духе крысы или, боже упаси, лхде. КДЕ тока более-менее норм, но тоже не дотягивает. >с case insensitive пиздец Мак ни разу не видел? Кстати, макось - это, в отличие от прыщеоси, НАСТОЯЩИЙ юникс. >>1763881 >Винда, которая господствует только на десктоп сегменте благодаря агрессивному маркетингу Ох лол. Пердольное чмо, которое даже блокнот под три системы или ардуино-хуитку под несколько плат никогда не поддерживало, судит о качестве огромных систем вроде винды. Почему же тогда винда до сих пор не сдохла, если она такая нехорошая, а линукс такой хороший? Я тебе как яблочник могу сказать, что во многих аспектах винда как минимум не хуже яблока, не говоря уже о прыщепарашках (хотя вендо-ноуты и вендо-моники то еще говно. насчет surface не знаю.)
>>1763964 > Нахуй он на серваке? Какой нахуй сервер на винде? Это ты выше про 50% серверов писал? Можешь не отвечать.
> Мак ни разу не видел? Кстати, макось - это, в отличие от прыщеоси, НАСТОЯЩИЙ юникс. Это все знают, при чём тут мак вообще? Речь именно про лялех, а не юникс как таковой.
>>1763967 У мака файловая система по умолчанию кейс инсенситив, прыщедаун. >Какой нахуй сервер на винде? Ты тупой, блять? Зачем нахуй линуксовый гуй под WSL? Попердольки без перезагрузки устраивать? WSL ради докера пилят в первую очередь, чтобы отказаться от виртуалочки.
Аноны, подскажите, кто на с++ пишет разные многопоточные сервера, с чего блять вообще начать то? Вот нужно мне написать допустим сервер и как это? Есть какая-нибудь литература? Знаю только в с++ QT, немного STL. Какие разделы надо проработать? По вакансиям все более менее вменяемое в основном это.
>>1764081 > Visual Assist Кал говна, который показывает ошибку ещё до того, как ты закончил писать выражение и потом ещё несколько секунд подсвечивает корректный код красным.
>>1764068 Ооо. Я тоже такой целью задался. Начал с ученья плюсов. Мне целых 5 книг посоветовали. Думаю сначала Липпмана прочесть, потом многопоточность на плюсах, и затем буст учить.
>>1764068 Если ты реально ничего не знаешь и хочешь глубинных познаний, то почитай про обычные блокирующие сокеты (connect,bind,recv,send), сделай с ними обычный сервак типа 1 тред = 1 соединение. Туториалов полно. Потом сделай с неблокирующими, используя селект/полл/IOCP с пулом тредов/форками и всеми пирогами. После этого всякие асио, libevent и другие библиотеки станут очевидными и можно перейти к их изучению. Какой-нибудь отдельной книги про всё это не знаю, хотя наверняка такая есть.
Там хотя бы не заставляют писать бойлерплейт для тамошнего аналога BigDecimal, при том что могли бы основной рабочий тип (для бабла) в примитивы языка добавить, со всеми операторами.
>>1763998 Двачую. Они просто не видели как работает поддержка инфраструктуры в тысячи объектов и десятки тысяч ИТ-устройств. Когда не ты лично следишь за этим, а всякие подрядчики и хуй знает какие ещё дауны. Если нет гуя, то тебе либо сломают все нахуй, либо заебут вопросами.
>>1764366 Ошибки распознавания текста? Устаревшая версия чего либо? Примеры подразумевают что объясняется только какой то один аспект, а все остальное надо дописать самому/взять из предыдущего?
>>1764480 Тебе надо что-нибудь почитать про то, как работает мозг, почему человек может думать и откуда берутся мысли, чтобы подумать, что мне, может быть, читать эти твои мануалы нахуй не нужно, а нужно мне просто взять и пользоваться?
>>1764710 И скинь заодно скрин кода в книге. Не копию текста, а именно скрин. Вдруг в самой книге хуйня (такое бывает), а не просто криво распозналось.
>>1764952 По той же причине, почему можно использовать поля класса до их объявления. Компилятор сначала сканирует все имена в классе и затем только на втором проходе начинает обход по их определениям. А вне класса нельзя, потому что совместимость с сями.
>>1765016 > совместимость с сями А как бы это помешало совместимости с сями? Код, который нельзя было в сях, теперь можно было бы в плюсах. Не запретить же что-то сишное, а только сделать предварительные объявления необязательными.
>>1765077 Класс все равно нужно парсить целиком перед кодогенерацией, а файл--необязательно. Поэтому правильное поведение на уровне файла не стали делать.
>>1765217 Я не так выразился конечно, да. В смысле что происходит переопределение возвращаемого типа функции, и для указателей все почему то работает. Те ну это же разные типы A и B? Почему это все компилируется, а для A и B - уже нет?
NtQueryInformationProcess фейлится на защищенном процессе. Только не чекал lasterror, только лишь BasicInfo.PebBaseAddress на NULL. Есть идеи какие системные процессы могут эту хуйню вызывать, мож в них заинжектиться?
>>1765307 Не думаю, что это хорошая идея. Звучит чуть ли не как потенциальное UB, хотя не факт. Вот тут пишут, что на некоторых архитектурах такое вообще не будет работать (наверное, намёк на гарвардскую, где код и данные нельзя смешивать), хотя там про сишку: https://stackoverflow.com/questions/36645660
Почему я не могу написать это так? Это высосанное из пальца ограничение языка с невозможность агрегировать конструктор, или есть реальная причина, почему мне нужно отказаться от подобного синтаксического сахара и указать имя анонимной структуры?
>>1765326 Спасибо большое. Правильно ли я думаю, что такая хуйня могла использоваться для передачи управления в вредоносный код. Да и сейчас по идее можно так сделать, но нужно заранее в бинарник в часть с кодом записать нужный код
Прежде чем что-то пробовать, хочу узнать: не будет ли каких-то проблем, если я попытаюсь одновременно одной программой совершать запись в файл, а другой чтение из того же файла?
>>1765386 Например? Я под проблемами подразумеваю конфликты. У меня задача стоит сделать два таких параллельных процесса, которые создаются родительским процессом.
>>1765365 При открытии файла во втором процессе скорее всего будет ошибка доступа. Я так понимаю, тебе нужно подождать, пока кто-то пишет/читает? Для тебя уже всё придумали: boost::interprocess::file_lock QLockFile
>>1765422 Не будет ошибки, если не запрещать доступ к файлу при открытии. Можно даже одновременно в один файл писать, главное не закрывать к нему доступ со стороны других процессов.
как же я блюю с крестового синтаксиса комбинация снейк кейса, двойных двоеточий, круглых и угловых скобок это наверное самое мерзкое что можно было придумать
>>1764174 На кой хуй тебе весь BOOST, все равно не выучить, да и смысла не несет. Все что тебе нужно, это когда тебе будут давать задачу, ты будешь понимать что средства для её решения должны быть в boost, не более.
>>1765974 Я пока просто открыл доку beast. Понял, что знаний не хватает. Выстроил вот такой план >>1764174 Ну я вроде хоть что то по плюсам знал, поэтому липпман пока не сложно идет. 400 страниц за 1.5 дня. Хотя потом наверное тяжелее будет. Но мне кажется что многопоточность из этого всего самая сложная, хотя хз.
>>1766289 Я же говорю, с плюсами до этого кое как был знаком. Что то пролистывал, просто глазами сканируя, чтобы нового не пропустить. Где надо, я читал вдумчиво.
Анон, у меня вопрос. Почему-то многие умные дядьки (вроде включая Мейерса) пишут что такая вещь как на пикче не нужна и избыточна.
Почему? Ладно, if там точно не нужен, но вот присваивание nullptr после удаления очень даже нужно. Я лично с таким сталкивался в таком виде delete ptr; ...// много кода delete ptr; // critial error - попытка удалить чужую память
>>1767062 Зависит от реализации аллокатора памяти в куче, на это нет однозначного ответа. Ну и митигации вставляют палки в колеса.
Но общий примитив таков: двойное освобождение памяти при определенных обстоятельствах дает возможность получить указатель на ранее выделенный кусок памяти при последующих аллокациях.
Результат - у тебя есть 2 указателя (А и В), которые указывают на один и тот же адрес. Допустим, ты контролируешь указатель В и можешь писать по этому адресу произвольные данные. В самом плохом случае, указатель А, который ты контролируешь через указатель В, используется как указатель на функцию в программе. При перезаписи указателя на функцию ты можешь перенаправить поток исполнения в произвольный исполняемый участок памяти, когда атакуемая программа вызовет функцию по этому модифицированному указателю. Если этот участок памяти указывает на твою заранее подготовленную полезную нагрузку в виде, например, ROP чейна, то происходит произвольное исполнение кода (программа вместо того, чтобы вызвать функцию foo по указателю, прыгает в адрес, контролируемый взломщиком).
При возможности удаленно послать полезную нагрузку в программу можно открыть удаленный шелл и вуаля - ты внутри другой системы.
Но эксплуатация double free очень сильно зависит от аллокатора, которым пользуется программа (и даже от его версии порой), и считается одним из самых сложных багов для эксплуатации.
> Результат - у тебя есть 2 указателя (А и В), которые указывают на один и тот же адрес. Допустим, ты контролируешь указатель В и можешь писать по этому адресу произвольные данные. В самом плохом случае, указатель А, который ты контролируешь через указатель В, используется как указатель на функцию в программе. При перезаписи указателя на функцию ты можешь перенаправить поток исполнения в произвольный исполняемый участок памяти, когда атакуемая программа вызовет функцию по этому модифицированному указателю. Если этот участок памяти указывает на твою заранее подготовленную полезную нагрузку в виде, например, ROP чейна, то происходит произвольное исполнение кода (программа вместо того, чтобы вызвать функцию foo по указателю, прыгает в адрес, контролируемый взломщиком).
Всмыслке? Функции же помечены как исполняемый код. Туда же писать нельзя. Или я что то не понимаю
>>1767764 В примере привелся случай, когда в куче есть объект/структура, в которой есть указатель на функцию (что не такая уж и редкость, особенно в крупных программах на С++). В кучу можно писать и оттуда можно читать. В таком случае, в куче может храниться адрес на функцию, который можно переписать, если есть соответствующий баг, который позволяет это провернуть. Если ты можешь перехватить поток исполнения программы и направить ее в произвольный адрес - это уже минимум пол-победы.
В большинстве ОС по дефолту есть ASLR (рандомизация адресного пространства), но этот механизм можно обойти, если в программе есть баг на произвольное чтение (можно спиздить адрес из кучи/стэка/код сегмента, когда как, все очень зависит от ситуации). В тот момент, когда ты можешь писать данные в произвольные участки памяти и знаешь куда прыгать - можно надежно исполнить произвольный код в 98% случаев.
Так как стэк/куча давно неисполняемы, используются code reuse атаки, именно поэтому я упомянул про ROP chain, а не про тот же шеллкод (хотя в 2к20 и его можно исполнить, но нужно знать OS internals (подсказка для линуксоидов - mprotect syscall, дальше сами думаете)).
Сап, есть такой эмулятор для второй соньки: https://github.com/PCSX2/pcsx2 Но заточен он под 86 архитектуру, ну и собсно не понял я: а где эта зависимость? Может кто носом тыкнуть? было естественно предположить что где-то ассемблер спрятан, но чет не нашел. Мож либа какая х86 онли?
На каком IDE лучше сидеть Qt или codeblocks. Qt конечно легче настроить, но он похоже скурвится совсем, перейдёт полностью в коммерческую версию. По codeblocks подскажите: если мне надо приложению создать GUI то надо ставить wxWidgets ?