Это копия, сохраненная 30 августа 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
⚹ https://github.com/sosachbot/cppthreadhat
⚹ Для кусков кода: https://0bin.net/
Ответы на вопросы:
⚹ https://en.cppreference.com/w/
⚹ https://www.cplusplus.com/reference/
Для указателей: ⚹
Прошлый тред: >>2297529 (OP)
Что читать по win api 64 кроме Харта?
Есть у кого идеи, как починить точность? Или хотя бы определить, кто виноват, чтобы точечно отработать.
Может, я покажусь уёбком самоуверенным, но всё равно скажу-- если ты не понял, в чём там проблема, то вряд ли ты сможешь мне помочь.
А так, если просто интересно, я там кубическое уравнение решаю, и меня не устраивает точность в некоторых случаях.
С даблом там точно так же будет иногда выпадать, просто гораздо реже. На флоатах хорошо видно, что алгоритм не очень корректно с точностью обходится.
Думаю проблема в округлении.
У меня IDE дает ошибки компиляции в строке 68-71 и 74.
complex и norm без аргументов
auto const a = std::complex{dist(gen), dist(gen)};
auto const b = std::complex{dist(gen), dist(gen)};
auto const c = std::complex{dist(gen), dist(gen)};
for(auto const x : CubicEquation<float>::solve(std::array{a, b, c}))
{
auto const sum = x x x + a x x + b * x + c;
auto const d2 = std::norm(sum);
-std=c++20 или его аналоги
В ВУЗе на втором курсе у нас есть предмет по Системной Разработке но преподают джаву и поэтому хочу сам найти себе учебник по операционным системам. Нашел по мультиядерности но это для мне рано. Просто изучить процессы мультипоточность, память и всякое такое.
а, ты студентик
тогда совет единственно верный: НЕ учи системное программирование под винду
если даже и решил системщиком заделаться то учи сразу линукс
а еще лучше изучай явку
Парсер-комбинаторы на шаблонах С++ никто не писал? Есть примеры?
>сразу линукс
Как будто линукс это более продвинутая система. Она бесплатная - в этом я вижу единственный плюс. Ну а значит разработка на ней для тех кто готов жертвовать функционалом ради копеек.
Linux - конструктор в открытых кодах, мультиплатформенный, бесплатный.
Windows - готовое решение из коробки
Лично мне интересно изучать системы для того чтобы понимать как создавать инфраструктуру для энтерпрайза.
Windows - операционная система, среда для запуска приложений, оставляющая тебя на едине с самим собой и своими приложениями.
Linux - куча поломанных костылей, говорящих тебе: "чини нас, бесконечно".
Итого: Линукс это РАБота, от тебя не требуется самостоятельности, только делать что "говорят". Винда же наоборот, ничем не обязыкает, ты предоставлен сам себе. Отсюда проистекает разница. Ничтожества без личности любят линукс, т.к. за ним удобно прятаться, ну как рабы прячутся за своим хозяином. А винда наоборот, оставляет тебя одного самого перед собой, так что винду любят полноценные талантливые люди, у которых есть свои цели, которым они и следуют. Таким людяв кнешние чужие приказы только мешаю, отвлекая от своих целей.
Boost spirit например. Жопаболь от волшебного сочетания функциональных ошибок не соответствия типов аля окамл + крестовых простыней гарантирована, хотя бы на первых порах.
Неприятно? Линукс это как приусадебное хозяйство (огород) - штука, обеспечикающая бесконечной работой. Такие вещи любят никчемные люди, вроде выживших из ума стариков, которые изжили своё, но тем не менее, как любой человек. не могут пребывать в бездействии, вот и обожают ковыряться в огородах, обеспечивающих их работой. Когда самому делать нечего, только и остается, что подчиняться "кому-то", быть рабом в данном случае огорода. Рабство как оно есть, слетствие отсутствия самостоятельности, собственной личности и жизни.
Свободный же человек - самостоятелен, сам рулит своей жизнью куда ему надо, поэтому ему не нужны "дилеры обеспечивающие работой". Не нужна свободному человеку чужая работа, у него есть свои занятия. Это суть винды - свобода для свободных людей, которую так ненавидят рабы, ведь винда оставляет раба наедине со своей ничтожностью. Рабу в винде просто нечего делать, у ничтожества нет его собственных целей (разрабатывать какой-то свой софт), а значит и занятий своих нет, только чужие, и тут линукс для малолетних ничтожеств так же хорош как огород для престарелых ничтожеств, избавляя от необходимости иметь собственные цели и делать собственные выборы, давая уже готовую работу.
А может ты пидор?
Если кому интересно, то я починил.
Логика выбора корня квадратного уравнения писалась под действительные коэффициенты. Если выбрать корень, который по модулю длиннее, то всё получается шикарно.
Нагуглил идею, как шлёпать через корутины, может, поможет.
https://github.com/dpacbach/parsco
не ты таки путаешь
он спрашивает за парсер комбинаторы, а spirit парсер на основе EBNF грамматики
вроде бы boost:metaparse использует этот подход, но для парсеров в компайл-тайме
чел, на крестах никто уже не пишет для энтерпрайза по вполне понятной причине
выбирай шарпик или явку если хочешь в энтерпрайз
Энтерпрайз это фейспалм, чаще всего.
Какой же крутой язык.
Мог бы давно вкатиться в какой-нибудь PHP, но так впадлу.
Хочется просто сидеть и совершенствоваться в плюсах.
Он божественнен как минимум статической типизацией. Это уже выносит его на миллиард километров выше питона и пыхи.
Но среди именно статических языков - имхо далеко не самый крутой. Не один и не два статических языка круче крестов (среди которых даже внезапно есть сишка). Но с удовольствием пообсуждаю эту тему.
>Не один и не два статических языка круче крестов (среди которых даже внезапно есть сишка)
А можешь подробнее про такие языки рассказать? Я особо не знаю, какие яп есть, а это звучит интересно.
другойанона
ААААААААААА!
ПРИШЛО ВРЕМЯ ПЕРЕСОБИРАТЬ 9ENTOO!
9ENTOO САМ НЕ ПЕРЕСОБЕРЁТСЯ! ПЕРЕСОБЕРИ ЕГО ЕЩЁ РАЗ!
ЗАЧЕМ МНЕ НУЖЕН ШИНДОВС, У МЕНЯ НЕТ ВРЕМЕНИ, ЧТОБ ЕБАТЬСЯ С НИМ, ЛУЧШЕ ЕЩЁ РАЗ ПЕРЕСОБРАТЬ 9ENTOO!
Я ПЕРЕСОБИРАЮ 9ENTOO ПО ТРИ РАЗА В ДЕНЬ, КАЖДАЯ ПЕРЕСБОРКА ЗАНИМАЕТ ДВАДЦАТЬ МИНУТ!
Я ЖИВУ АКТИВНОЙ ПОЛНОЦЕННОЙ ЖИЗНЬЮ, Я УСПЕШЕН И ПОЭТОМУ ЦЕЛЫЙ ДЕНЬ ДОЛБЛЮСЬ В БАШ, А ПОСЛЕ ЭТОГО Я ПЕРЕУСОБИРАЮ 9ENTOO!
ТУПЫЕ ШИНДУЗЯТНИКИ, ОДЕРЖИМЫЕ ПЕРЕУСТАНОВКОЙ ВИНДЫ, А Я СВОБОДНЫЙ ОТ КРЯКОВ-КЕЙГЕНОВ ЧЕЛОВЕК!
СКАЧАТЬ ОПЕНСУРС ПАКЕТ ИЗ РЕПОЗИТОРИЯ МОКРЫЕ МОКРЫЕ ПИСЕЧКИ! SUDO APT-GET INSTALL, MAKE LOCALMODULESCONFIG, ЛУЧШЕ Я ПЕРЕСОБЕРУ 9ENTOO ЕЩЁ РАЗ!
Я ПЕРЕПИШУ ЯДРО, СТАБИЛЬНОСТЬ НЕ НУЖНА!
Я НЕ ПЕРЕСОБИРАЛ 9ENTOO НЕДЕЛЮ, ПОЙДУ ПЕРЕСОБЕРУ!
9ENTOO - ВСЁ ПРОСТО И ПОНЯТНО... А, ОШИБКА СТОП НОЛЬ НОЛЬ НОЛЬ НОЛЬ НОЛЬ А!
ЭТО ЖЕ ОЧЕВИДНО, КАК ЕЁ РЕШИТЬ! ПРИШЛО ВРЕМЯ ПЕРЕСОБИРАТЬ 9ENTOO!
КОКОКОКОКОКОКОКОКОКОКОКОКОКО! КОКОКОКОКОКОКОКОКОКОКОКОКОКО!
ЖМУ/ПИНУС, ШВАБОДКА, ПИТУХИ, КОКОКОКОКОКОКОКОКОКОКОКОКОКО!
ААААААААААА!
ПРИШЛО ВРЕМЯ ПЕРЕСОБИРАТЬ 9ENTOO!
9ENTOO САМ НЕ ПЕРЕСОБЕРЁТСЯ! ПЕРЕСОБЕРИ ЕГО ЕЩЁ РАЗ!
ЗАЧЕМ МНЕ НУЖЕН ШИНДОВС, У МЕНЯ НЕТ ВРЕМЕНИ, ЧТОБ ЕБАТЬСЯ С НИМ, ЛУЧШЕ ЕЩЁ РАЗ ПЕРЕСОБРАТЬ 9ENTOO!
Я ПЕРЕСОБИРАЮ 9ENTOO ПО ТРИ РАЗА В ДЕНЬ, КАЖДАЯ ПЕРЕСБОРКА ЗАНИМАЕТ ДВАДЦАТЬ МИНУТ!
Я ЖИВУ АКТИВНОЙ ПОЛНОЦЕННОЙ ЖИЗНЬЮ, Я УСПЕШЕН И ПОЭТОМУ ЦЕЛЫЙ ДЕНЬ ДОЛБЛЮСЬ В БАШ, А ПОСЛЕ ЭТОГО Я ПЕРЕУСОБИРАЮ 9ENTOO!
ТУПЫЕ ШИНДУЗЯТНИКИ, ОДЕРЖИМЫЕ ПЕРЕУСТАНОВКОЙ ВИНДЫ, А Я СВОБОДНЫЙ ОТ КРЯКОВ-КЕЙГЕНОВ ЧЕЛОВЕК!
СКАЧАТЬ ОПЕНСУРС ПАКЕТ ИЗ РЕПОЗИТОРИЯ МОКРЫЕ МОКРЫЕ ПИСЕЧКИ! SUDO APT-GET INSTALL, MAKE LOCALMODULESCONFIG, ЛУЧШЕ Я ПЕРЕСОБЕРУ 9ENTOO ЕЩЁ РАЗ!
Я ПЕРЕПИШУ ЯДРО, СТАБИЛЬНОСТЬ НЕ НУЖНА!
Я НЕ ПЕРЕСОБИРАЛ 9ENTOO НЕДЕЛЮ, ПОЙДУ ПЕРЕСОБЕРУ!
9ENTOO - ВСЁ ПРОСТО И ПОНЯТНО... А, ОШИБКА СТОП НОЛЬ НОЛЬ НОЛЬ НОЛЬ НОЛЬ А!
ЭТО ЖЕ ОЧЕВИДНО, КАК ЕЁ РЕШИТЬ! ПРИШЛО ВРЕМЯ ПЕРЕСОБИРАТЬ 9ENTOO!
КОКОКОКОКОКОКОКОКОКОКОКОКОКО! КОКОКОКОКОКОКОКОКОКОКОКОКОКО!
ЖМУ/ПИНУС, ШВАБОДКА, ПИТУХИ, КОКОКОКОКОКОКОКОКОКОКОКОКОКО!
Чел, поделись мудростью! Я питонист, и меня вкрай заебала динамическая типизация и отсутствие перегрузки.
Владельцы устройств на IOS и Android ссут тебе в еблет и передают привет. К ним присоединяются, водители BMW, Mercedes и Tesla, да и в общем-то все, у кого есть деньги на прогресс, IoT и личный комфорт.
Виндовс то активировал, чмонька?
Си тред. Тут люди пишут SoC платформу для линукс + миллион драйверов, читают даташит на китайском без переводчика там просто нечего переводить, даташит на 100% состоит из названия и адресов регистров.
Но для винды ты разве что сможешь написать драйвер для мышка-курсор-вжик-вжик, для чего-то другого винда бесполезна.. ну я понял какие у тебя хобби.
Если делать нехуй - managed effects, substructural types, dependent types, hott, session types etc; языки pony, agda, koka...
Если программы писать - haskell, rust
>линукс + миллион драйверов
Поэтому на линуксе нет драйверов, а они все на винде. Пиздеть - не мешки ворочать. На линуксе может и можно теоретически делать драйвера и т.д., но на практике никто не делает, все сидят и правят поломанные конфиги поломанной системы. Так же как на огороде - непаханое поле работы, потому что это огород, постоянно растут сорняки, надо полоть, червяки жрут, надо бороться, сарай разваливается, надо чинить. Вот вся суть линукса, бесконечная бессмысленная работа ради работы - пердолинг, самодроч, маструбация.
>>347031
У ничтожества кажется врёти.
Если твоя моргалка светодиодами настолько убога, что требует линукс, достаточно wsl. Убогая затычка для убогих огрызков, кроме затыкания таких дыр больше ни на что не годится.
Какой нахуй линукс блять? При чём тут вообще линукс?
> У ничтожества кажется врёти.
Проиграл. Да, конечно, я ничтожество, а ты охуенный. А теперь иди нахуй, долбоёб.
> реди которых даже внезапно есть сишка
Хорошо, вот ты говоришь круче. В чем-то круче, в остальном не хватает. Нет классов, а значит проблемы с поддержкой большого кода. Нет конструкторов, из этого следует отсутствие смарт поинтеров. А как без динамического полиморфизма реализовать фабричный метод и стратегию? Ссылок нет. А шаблоны где, я без них не могу уже? И недавно я узнал, что даже динамических массивов нет, тупа дается тебе указатель и все. Че там с поддержкой многопотока, мьютексами и лямбдами я вообще не знаю.
>А как без динамического полиморфизма
Ну это я думаю накостылять в сишке можно, хотя и неудобно и багоопасно. Думаю кресты в том числе и возникли, чтобы убирать эти костыли пол капот.
>В чем-то круче, в остальном не хватает.
Чего?
>Нет классов, а значит проблемы с поддержкой большого кода.
Почему?
>Нет конструкторов, из этого следует отсутствие смарт поинтеров.
Зачем?
>А как без динамического полиморфизма реализовать фабричный метод и стратегию?
Зачем?
>Ссылок нет.
Зачем?
>А шаблоны где, я без них не могу уже?
Зачем?
>даже динамических массивов нет
Есть.
>тупа дается тебе указатель и все
Что такое массив по-твоему?
>Че там с поддержкой многопотока, мьютексами
Есть.
>лямбдами я вообще не знаю
Зачем?
А тут на самом деле вопрос не к сям, а к крестам. Ведь в крестах нет ООП (на самом деле). Почему нет? Потому что без инкапсуляции нет ООП. А где инкапсуляция в крестах? Её нет. Когда у тебя код ломается, то все твои объекты РРАЗ и протекают, и вместо объектов ты дебажишь просто оперативную память (как в сях), потому что в сиплюсплюс ты можешь переписать оперативную память произвольно в любом месте и нет ни единого человека или машины во всей вселенной, кто мог бы тебе это запретить и соответственно ни в одном языке, где ты можешь так делать - нет инкапсуляции - нет ООП. И тут возникает вопрос - а где профит-то, если в языке по факту та же байда?
В сишке можно сделать всё, вопрос в целесообразности. Так как компилятор тупой и примитивный, все эти свистоперделки придется переносить в рантайм, а это доп расходы и доп проблемы (с безопасностью например)
Вообще, щас как я понимаю тренд на компиляторно-ориентированный код, чтобы самого машинного было минимум и он был очень простой см новые фичи стандартов по типу constexpr/consteval и философию раста как такового
Давай, когда начнём?
Не думаю что это раст. Это вообще для всех языков.
Всё так. Если тебе нужен низколевельный язык, а нужен он в двух случаях:
1. Не похуй на скорость
2. Нет доступа к управляемому окружению (драйвера, ОС, микроконтроллеры и тому подобное)
То юзаешь си
Во всех остальных случаях юзаешь управляемые языки - джавы, шарпы, пистоны, тысячи их.
Кресты это попытка скрестить ужа с ежом - ооп с неуправляемым языком. В итоге вобрало в себя худшее от обоих миров.
Да и линукс. Любая приблуда является файлом, полиморфизм во все поля.
Профит в структурировании кода, пчел. Инкапсуляция и вне ООП помогает не скатывать код в говно как в процедурных, так и в функциональных языках.
>потому что в сиплюсплюс ты можешь переписать оперативную память произвольно в любом месте и нет ни единого человека или машины во всей вселенной, кто мог бы тебе это запретить
Ты это можешь сделать в любом (даже managed) языке.
Но не делаешь — потому что даже со всем своим ебланским нигилизмом который вылечится как поработаешь хотя бы пол годика понимаешь что это отстрел своей же ноги.
>>347183
>Нет классов, а значит проблемы с поддержкой большого кода.
Вот тут с подливой проиграл.
>>347243
В том, чтобы переносить всё что можно по максимуму в компайлтайм. Куда и плюсы двигаются, тащемта.
>Инкапсуляция и вне ООП помогает
Причём тут инкапсуляция? Она в крестах как раз отсутствует, об этом и речь.
>Ты это можешь сделать в любом (даже managed) языке
Вопрос - какой ценой? Диких изъёбств? Ну ок, я согласен на такой расклад. Другое дело - когда ты можешь это делать постоянно, систематически, непреднамеренно, и компилятор тебе в этом никак не помешает.
>который вылечится как поработаешь хотя бы пол годика
Лучше не переходи на личности, иначе будешь обсираться в дальнейшем ещё сильнее, чем с этим детектом. Держись в лоне дискуссии.
На остальное возражений нет.
Вернее дело не в изъёбствах, в ряде управляемых языков это достаточно просто делается, короче если интересно я поясню в чём разница между подходами.
Gtkmm, из документации только официальная невменяемая, примеров и учебников нет даже на английском. Плохо ищу или не туда лезу?
>зачем же в си выражения существуют, с операторами всякими, если можно чисто тройками как в асме писать
Причем тут асм? Очередной крестовик не может в аргументирование своей точки зрения?
>игры, браузеры, рантаймы managed языков, hpc
Базара нет, во всех этих случаях юзаешь си, либо пишешь, что юзаешь кресты, чтобы нанять достаточно крестовиков (которых тупо больше), но заставляешь их писать си-стайл. Так многие те же геймдевы делают, потому что от протекающих абстракций крестов вреда нередко больше, чем пользы.
С++ используется для 2. С++ огромный яп, но почему не использовать только часть яп, которая пригодится в каком-то случае и не использовать если не нужно?
Как бы, удобно, что из С есть возможность перейти к заимствованию фич из С++.
Си + Ди хватит на все случаи.
Охуенно
в асме выражения пишутся не так как в си
т.к. асм близок к машинному коду, си очевидно компилируется в похожие инструкции
т.е. происходит некая трансформация выражений из смешанной записи, включающий в себя инфиксные, префиксные операторы, вызовы функций и т.п, в близкую к машинной
я упомянул асм чтобы указать, что даже компилятор си делает некоторые преобразования кода, целью которых является облегчение работы программиста
и многие вещи в спп, например шаблоны, так же упрощают жизнь программисту
конечно, можно сказать что в спп эти вещи излишни, а в си идеальный баланс между абстракциями на уровне языка, но
спп обрёл широчайшее применение, и появился после си, так что видно, что многие не согласны с такой позицией. просто отрицать пользу всех этих вещей. жизнь упрощают, вот "Зачем".
>>347396
Я в команде на плюсах не работал, вполне допускаю, что использование некоторых вещей в плюсах, реализуемых лишь как побочный эффект длительного нагромождения возможностей языка, может помешать взаимодействию программистов с разным уровнем опыта, разными используемыми подходами и ТД. Пример - использование мутабельных значений во время компиляции. Но как любые плохие практики это нужно контролировать. Почему-то популярные языки (и Си в том числе) не считают ошибкой компиляции неверно (грамматически или стилистически) названный идентификатор. Зато везде есть свои стили кода. Плюс спп это выразительность и низкоуровневость, тут он пока один из лучших, как минимум потому что не много соперников (Д, Раст, все? из более менее известных). Минус - легаси и долгое развитие. В си не такого нагромождения, но и нет таких возможностей. Писать игру на си себе дороже ибо придется иногда почти повторять код (шаблоны), писать ручками многие автоматизирующиеся компилятором вещи (раии, корутины) итд. При этом судя по cppreference в си есть к.с. _Generic например.
И managed императивные яп в основном довольно слабые (Шарп, жаба), а функциональные если выразительны, то неразвиты во всем кроме самих яп (хаскель, полупруверы). Лично я считаю что и си и спп надо и вполне возможно заменить (хотя бы просто дропнув легаси, задизайнив все с чистого листа, не делая нечто слишком радикальное, как проверятор боровов у раста, который видимо и мешает местами).
зачем приходить в тред по плюсам с хейтом и с
>Очередной крестовик не может в аргументирование своей точки зрения?
троллингом?
в асме выражения пишутся не так как в си
т.к. асм близок к машинному коду, си очевидно компилируется в похожие инструкции
т.е. происходит некая трансформация выражений из смешанной записи, включающий в себя инфиксные, префиксные операторы, вызовы функций и т.п, в близкую к машинной
я упомянул асм чтобы указать, что даже компилятор си делает некоторые преобразования кода, целью которых является облегчение работы программиста
и многие вещи в спп, например шаблоны, так же упрощают жизнь программисту
конечно, можно сказать что в спп эти вещи излишни, а в си идеальный баланс между абстракциями на уровне языка, но
спп обрёл широчайшее применение, и появился после си, так что видно, что многие не согласны с такой позицией. просто отрицать пользу всех этих вещей. жизнь упрощают, вот "Зачем".
>>347396
Я в команде на плюсах не работал, вполне допускаю, что использование некоторых вещей в плюсах, реализуемых лишь как побочный эффект длительного нагромождения возможностей языка, может помешать взаимодействию программистов с разным уровнем опыта, разными используемыми подходами и ТД. Пример - использование мутабельных значений во время компиляции. Но как любые плохие практики это нужно контролировать. Почему-то популярные языки (и Си в том числе) не считают ошибкой компиляции неверно (грамматически или стилистически) названный идентификатор. Зато везде есть свои стили кода. Плюс спп это выразительность и низкоуровневость, тут он пока один из лучших, как минимум потому что не много соперников (Д, Раст, все? из более менее известных). Минус - легаси и долгое развитие. В си не такого нагромождения, но и нет таких возможностей. Писать игру на си себе дороже ибо придется иногда почти повторять код (шаблоны), писать ручками многие автоматизирующиеся компилятором вещи (раии, корутины) итд. При этом судя по cppreference в си есть к.с. _Generic например.
И managed императивные яп в основном довольно слабые (Шарп, жаба), а функциональные если выразительны, то неразвиты во всем кроме самих яп (хаскель, полупруверы). Лично я считаю что и си и спп надо и вполне возможно заменить (хотя бы просто дропнув легаси, задизайнив все с чистого листа, не делая нечто слишком радикальное, как проверятор боровов у раста, который видимо и мешает местами).
зачем приходить в тред по плюсам с хейтом и с
>Очередной крестовик не может в аргументирование своей точки зрения?
троллингом?
Не пробовал, хотел ибо вроде много удобного метапрограммировпния сразу, а не как статич рефлексия в спп которую ещё хуй пойми когда завезут. Но что слышал, так это:
- нестабильный компилятор, стдлиба (2 шт?)
- gc / nogc
- тихое коммунити, из-за чего видится что и экосистема слабо развита
Это из жирных причин, вроде было чето по мелочи но мб пофиксил уже.
>Она в крестах как раз отсутствует, об этом и речь.
При том что она её не может быть в языке, маня. Это чисто концепция написания кода.
>ты можешь это делать постоянно, систематически, непреднамеренно, и компилятор тебе в этом никак не помешает.
А он должен указывать тебе, как правильно структурировать код? Скорую вызвать?
>>347361
Ну давай поясняй, чего томишь-то.
> Gtkmm
Хочешь плюсы — лучше возьми Qt.
>из документации только официальная невменяемая, примеров и учебников нет даже на английском. Плохо ищу или не туда лезу?
Да нет, линукс он весь такой. Все в рот ебали сидеть писать тебе доки, это не микрософт с армией технических писателей.
Да нет, там обычно только часть плюсов выкидывают, типо исключений. А вот на всякие RAII, шаблоны и иже с ними в той же разработке браузеров дрочат настолько, что прям усираются вымазывая всё смартпоинтерами.
Фанател от него лет 10+ назад, когда ещё был D1 и какие-то надежды на язык.
Потом авторы решили дропнуть нахуй весь софт на нём написанный и сделать D2 ради синтаксических плюшек, половина коммьюнити разбежалась. Я фанател ещё пару лет, а потом повзрослел и понял, что авторы — инфантилы ебаные, мне даже лень писать всю хуйню, которая накипела которые просто хотят ковыряться в компиляторе, а не развивать язык.
Сейчас он никому нахуй не нужен, даже в теории. RIP.
https://docs.gtk.org/
>>347440
>лучше возьми Qt.
Нихуя не лучше.
>>347430
>зачем приходить в тред по плюсам с хейтом и с
>>Очередной крестовик не может в аргументирование своей точки зрения?
>троллингом?
Это не троллинг, каждый тред начинается с этого.
>Нихуя не лучше.
Qt:
— Нормальная документация (не прям заебись, но всегда up to date и +- и есть на всё);
— Кроссплатформа (работает от мака и шиндовса до андроида и встроенной залупы в машинах);
— Фреймворк с решениями на все случаи жизни.
— Написан на плюсах и юзает современные фичи, а не куча обвязок с кривыми интерфейсами.
GTK:
Зачем писать на кьюте, когда система гткшная и наоборот? Фрейм выбирается не из-за удобства кодера, а из-за того, как он впишется в целевую платформу.
Electron:
— Нормальная документация (не прям заебись, но всегда up to date и +- и есть на всё);
— Кроссплатформа (работает от мака и шиндовса до андроида и встроенной залупы в машинах);
— Фреймворк с решениями на все случаи жизни.
— Написан на плюсах и юзает современные фичи, а не куча обвязок с кривыми интерфейсами.
>Фрейм выбирается не из-за удобства кодера, а из-за того, как он впишется в целевую платформу.
На линуксе "нативного" тулкита всё равно не существует, поэтому кьют туда вписывается точно так же как гтк. А если это не хэлловорд — то будет даже консистентнее, ибо фреймворк, лол.
>Qt к санкциям присоединился, да и не тру с его лицензиями что-то.
Ну ты же не собираешься коммерческий софт делать? Для линукса такое делать — быть ебланом.
Тогда для тебя всё ок, и на санкции похуй, и на лицензию.
>Предлагаешь исходный сишный gtk?
Предлагаю разграничить фронт и бек, чтобы в случае чего, можно было легко портировать на другой фрейм или вообще использовать программу без гуя.
бери open motif, смотри какой няшный:
вроде как zig щас хочет тоже "как сишка, только лучше"
А можешь подсказать, стоит вообще щас на Д смотреть как расширение кругозора, мб на нем че-нибудь запилить, вместо плюсов не хейчу плюсы, но легаси убивает
чё сказать хотел? в унике курсач делал по jit x86_64 машинный код руками генерировал. Потом некст семестр легчайше сдал все лабы по всему, не имея именно в асме никакого опыта, вплоть до графических.
лабы по асму*
>вроде как zig щас хочет тоже "как сишка, только лучше"
Ну сделать сишку но лучше — задача куда проще. Да и судя по сайту авторы там понимают что нужно делать, и заявляют что уже кросскомпиляция есть, выглядит интересно.
>А можешь подсказать, стоит вообще щас на Д смотреть как расширение кругозора
Для такого можешь и посмотреть вообще на что угодно, там много крутой фигни вроде миксинов. Просто он проебал все ниши куда его можно было засунуть и теперь годен только для такого вот досуга.
Чел ну херня у тебя в том, что асм близкий к машинному коду, хотя это машинный код всегда и есть
мимо другой чел
Не совсем, во первых асм это текст. Во-вторых в асме есть макросы, перегруженные мнемоники (mov в асме это и мув в память и в регистр), идентификаторы для меток итп
struct s{
int a, int b}
char ⚹ data - данный массив.
s ⚹x = (s⚹)(&data[8])
x->a=10
x->b=10
Код примерно такой.
Ну int32_t, окей. Это не так важно тут. Вопрос не в этом, я просто забыл дописать точный размер
Оно есть. Нельзя обращаться к массиву char'ов, как к объектам типа T. Это,вроде, нарушение strict aliasing rule.
Я помню, что так нельзя делать, потому что есть замечательный пример когда это стреляет, но сейчас писать немного лень. Вот я хз как фиксить это
>Как бы, удобно, что из С есть возможность перейти к заимствованию фич
Да, но там из фич есть ещё и сомнительные штуки уровня медленной компиляции. Не забываем, что интероперабельность между сями и крестами охуенная (внезапно лучше, чем между крестами и крестами), поэтому лучше, если уж нужно дорабатывать крестовый проект например - сишную часть писать на си, а не крестах (и ни в коем случае не компилировать её крестовым компайлером, хотя он это и может). Есть и другие причины держать сишный код в сях.
>>347425
Пошло нахуй от личности, говно.
>>347427
Норм язык, лучше и чище крестов, эдакие кресты-которые-сделаны-правильно.
>>347430
>Плюс спп это выразительность и низкоуровневость
Выбери одно. Ооп в крестах не работает, за ооп надо идти в другие языки. В итоге имеем всё тот же низкоуровневый язык, просто возмождностей выстрелить в ногу стало неизмеримо больше. Почему так - выше говорил.
Фичи фичами, а кор языка-то не работает.
>Очередной крестовик не может в аргументирование своей точки зрения?
Вопросы к тому, кто это написал, а не ко мне. Я не позволяю себе таких дерзостей первым.
>>347438
Пошло нахуй, говно х2. Либо разговариваешь как человек, либо теряешь право участвовать в дискуссии.
То что у тебя интересное представление об инкапсуляции, я уже заметил, но private и protected это не инкапсуляция, когда багованный код (заметь, в отличие от джавы - именно багованный код, а не сознательное залезание ручками) может переписать всю память.
У меня простой вопрос: если у меня есть указатель на объект - этот указатель может быть испорченным? Что случится, если я начну что-то с ним делать? Программа крашнется или может случиться кое-что похуже? Вот в целом и всё, что мимокроку нужно знать по теме "инкапсуляция в с++"
Размер структуры (в байтах) получай через sizeof(s). Фактический размер зависит от компилятора (он делает выравнивание, а также добавляет указатели на таблицу/ы виртуальных функций и указатели на виртуальных предков) и от размера типов (int не обязательно 4).
То есть надо так:
s x = reinterpret_cast<s>(data + sizeof(s) * element_id);
Кто тебе говорит, что там неопределенное поведение компилятор или анализатор, какие версии?
https://godbolt.org/z/8WT5he51M
>>Плюс спп это выразительность и низкоуровневость
>Выбери одно. Ооп в крестах не работает, за ооп надо идти в другие языки. В итоге имеем всё тот же низкоуровневый язык, просто возмождностей выстрелить в ногу стало неизмеримо больше.
Почему ооп не работает? Ну и ооп это не то, что отличает выразительные от невыразительных или низкоур от высокоур. В хаскеле нет ооп.
>>347554
Как связано наличие уб и отсутствие инкапсуляции? А если я шнур выдерну (оп пик), в жабе все дальше работать будет? private память на диск сохранит? или в облако сразу
>То что у тебя интересное представление об инкапсуляции, я уже заметил
Это не я, это уже второй анон прокекал с тебя.
>но private и protected это не инкапсуляция, когда
Без "когда", это просто не про инкапсуляцию, тупое.
>этот указатель может быть испорченным?
Может.
> Что случится, если я начну что-то с ним делать?
Зависит от окружения.
>Вот в целом и всё, что мимокроку нужно знать по теме "инкапсуляция в с++"
Где тут инкапсуляция? При чём она тут вообще?
>Пошло нахуй, говно х2. Либо разговариваешь как человек, либо теряешь право участвовать в дискуссии.
Жесть залётные нормисы ныне обидчивые.
Привыкай зайка, тут такие правила.
>Он божественнен как минимум статической типизацией.
https://sites.radford.edu/~ibarland/Manifestoes/whyC++isBad-example.cc
Если принять логику что "но так же ни кто не пишет", то с тем же успехом можно и с Си не слазить.
>Не совсем, во первых асм это текст.
Асм — это конкретно представление машинного кода.
>Во-вторых в асме есть макросы
fasm/nasm/yasm/etc — это хайлевел ассемблеры, предназначенные конкретно для написания кода, а не отображения hex кодов в человекочитаемом виде.
>fasm/nasm/yasm/etc — это хайлевел ассемблеры, предназначенные конкретно для написания кода, а не отображения hex кодов в человекочитаемом виде.
Да что такое ты, нахер, несёшь?
Зачем ты визжишь?
Я про это:
>конкретно для написания кода, а не отображения hex кодов в человекочитаемом виде
Что это должно значить, вообще?
>Асм — это конкретно представление машинного кода.
Ассемблер - это программа. Язык ассемблера - язык разметки для последующего составления (ассемблером) исполнимого образа. На языке пишут (исходный) текст, а не код.
C++ - это программа. Язык C++ - язык разметки для последующего составления (ассемблером) исполнимого образа. На языке пишут (исходный) текст, а не код.
>Язык C++ - язык разметки для последующего составления (ассемблером) исполнимого образа
C++, конечно.
>C++ - это программа.
Нет.
> Язык C++ - язык разметки для последующего составления (ассемблером) исполнимого образа.
Нет. Это ЯВУ.
>0х89 0х67 0хFF => mov rax -127
Нет. fasm/nasm/yasm и прочие "хайлевел ассемблеры" так не делают. Это делают дизассемблеры.
>> Язык ассемблер - язык разметки для последующего составления ( ассемблер) исполнимого образа.
фикс
у меня уже стек оверфлоувнулся
>ЯНУ
Нет такого понятия. Сам выдумал? И что же это такое? И зачем нужно?
>>Ассемблер - это программа.
>Нет.
А что же это?
>стрелочка просто поворачивается
Ну так, поверни и объясни, что там имелось в иду?
ВТРЕДЕ.
>Нет такого понятия. Сам выдумал? И что же это такое? И зачем нужно?
https://en.wikipedia.org/wiki/Low-level_programming_language
>А что же это?
Язык, блять. Если прям упарываться в терминологию — семейство языков как лишп.
>Ну так, поверни и объясни, что там имелось в иду?
То что ты обзываешь конкретные программы (nasm/fasm/etc) языком. Это всё равно, что назвать msvc/clang/gcc/etc С++-ом.
>>347644
Я/МЫСРЁМ.
>То что ты обзываешь конкретные программы (nasm/fasm/etc) языком
Я обзываю? Где?
>Язык, блять.
Это assembly. А assembler? Короче уточняй, когда говоришь, что имеется в виду: программа или язык.
>Low-level_programming_language
То есть ЯНУ - это все языки, которые не-ЯВУ. Т.е. это ассемблер. Т.е., ты хочешь сказать, что ассемблер - это ЯНУ, а ЯНУ - это ассемблер?
>Это assembly. А assembler?
Сорри, ват лангвич ду ви спикинг райт нау? Мэйби рашн?
У нас тут ассемблером называют всё это, и более приоритетный вариант интерпритации этого слова — язык.
>То есть ЯНУ - это все языки, которые не-ЯВУ. Т.е. это ассемблер. Т.е., ты хочешь сказать, что ассемблер - это ЯНУ, а ЯНУ - это ассемблер?
Ну ты ссылку-то открой.
>>347657
>Assembler - переведи.
Пчел, переведи bear. А теперь to bear.
Потом left и to left.
После — продолжай, пока не поймёшь что дословно вне контекста слова переводить смысла нет.
>Надо срать в тред?
Офк надо, это же суть всех срачей в интернете. Можно доебаться до пердежа и задоминировать его.
>bear
Медведь.
>to bear
Медведить.
>left
Левый.
>to left
Леветь.
>После — продолжай, пока не поймёшь что дословно вне контекста слова переводить смысла нет.
Нихуя не понял.
Я свое вкину: появилась надобность и не только у меня в том, чтобы во время компиляции пробежаться по полям структуры и сделать че-нить (допустим записать в компайл тайм массив sizeof этих полей для сериализации)
Так вот, индусы люди в интернете советуют макросы, ну это же пиздец. Есть у кого мысли по этому поводу?
>более приоритетный вариант
Нет никакого приоритета. Только контекст или уточнение.
>Ну ты ссылку-то открой.
Так сказать то ты что хотел? Для чего это всё?
>появилась надобность и не только у меня в том, чтобы во время компиляции пробежаться по полям структуры и сделать че-нить (допустим записать в компайл тайм массив sizeof этих полей для сериализации)
constexpr, примерно так
https://github.com/katursis/StringObfuscator
>Черти, заебали срать в тред, давайте че нить нормальное уже
Что еще делать на форумах? Нового ничего нет, все старое уже миллион раз обсосано на каждом из форумов и гуглиться за пару минут, что-то сложное решать за кого-то никто не хочет, максимум направить.
translate.google.com < сюда
статическая рефлексия, мб в спп23-26 завезут
есть на кланг расширение с этим
выше упоминали D, там это есть)
а так да, макросы. Еще вроде можно попытаться сыницилизировать объект с разным колвом полей пока не сработает
>чтобы во время компиляции пробежаться по полям структуры и сделать че-нить
Boost fusion какой нибудь?
Понял, грустно конечно, там выше по треду советовали costexpr и буст, но это походу не особо то (в клиентский код лезть не хочется)
Короче буду хуи сосать кодогенерировать constexpr мапу через шланговский индексер видимо
Вроде valgrind. Короче я хуй забил и просто байтики начал копировать, вместо объектов.
Cука, проиграл. Хороший тред.
Java божественен.
К примеру лежит какая нибудь тулза на гитхабе с инструкцями по сборке.Какого хуя программист до сих пор тратит время на еблю с настройкой окружения для сборки на пердоликсе и засирает свою систему ненужным говном, вместо того чтобы сам автор тулзы залил контейнер на докерхаб чтобы я одной командой его скачал запустил и оно само в своем уже настроенном, изолированном гадюшнике собралось и высрало мне исполняемый файл без мозгоебли для меня?
Заранее прошу не кидаться говном. Ведь сейчас же считай уже большинство перешло на docker driven.
Поясняю: плюсы мёртвый язык. На той же джаве уже лет 20 всё собирается через системы сборки типа мавена и никто ни с чем не пердолится, собирается всё 1 командой.
Вспомни биткоин
Если тебе просто либа нужна - скачай её пакетами. Если кастом - ебись сам. Откуда автору знать, под какую платформу и железку тебе надо. А если там докера не завезли, то педалить кросс компиляцию для либы и всех зависимосетй, необходимых для деплоя?
А перед этим поебись, чтобы работало на любой системе с любыми соглашениями, компиляторами, шеллами и форматами скриптов сборки.
Докеры для арм отличаются на бинарном уровне от докеров под амд64 и т.д. Это у всяких джав всегда все работает на одной виртуальной машине, си и крестам приходится работать на любом говне, которое высрут производители электроники.
Да.
>любой системе
Просто отправляем всех линуксойдов и мак питухов в газовую камеру и считай работает у всех.
У тебя какие-то детские представления об индустрии. Например на оборудование для гражданской авиации ты должен ставить только сертифицированные ОС реального времени, накиких Виндоус Линукс или макоси ты там не увидешь, как и компилятора раста.
Ну вот для ртос придется поебаться, но и мавен там не помог бы.
А так вот почему некоторые пользователи говорит что у них пека прям "летает". Основная масса ОС в индустрии это винда. Линукс - дл я бомжей либо извращенцев-нитакусиков-особо_одаренных. Мак - для мажориков-лохов которых системно наебывают на бабки.
Собственно оставим срач. У меня вопрос появился. В сети появились бинарники одной игры и мне охота узнать возможно ли получить профит. Бинарников несколько. Вот думаю это дает бонус для того кто захочет реверс инжениринг провести.
Да хоть для петпроектов
Чтобы можно было мои библиотечки собирать под Винду/юникс с любым компилятором гцц/кланг/мсвс
Пробовал провести реверс-инжениринг над одной готовой игрой с помощью Иды. Но там был какой-то tail и вообще я не разбираюсь в Иде толком. Теперь думаю будет проще. Мне надо ассемблер изучить? Чтобы смотреть по адресам и самому именовать их в классы и переменные? Это так работает?
>tail
Хвост.
>Мне надо ассемблер изучить?
Да.
>Чтобы смотреть по адресам и самому именовать их в классы и переменные?
Подрочи асм листинги, которые генерируют компиляторы для различных языков, чтобы иметь хотя бы какие-то паттерны в голове и тебе было бы легче ориентироваться в отладчике.
>Это так работает?
Спроси у красноглазых в асм треде.
Спасибо за инфу анон.
Visual Studio? не?
>листинги, которые генерируют компиляторы для различных языков
Лол, я как-то открыл дизассемблер одного говна на дельфи, так там буквально всё было переёбано через тройные указатели⚹⚹⚹ на код.
Исключение выбрасывает? Оберни в try catch и посмотри, что там
Не понимаю всего этого дроча вокруг чисто серверной операционки. Какой толк от его открытости, если он пилится корпорациями сугубо для своих вычислительных задач в огромных датацентрах? С таким же успехом можно пытаться ездить в магазин на гусеничном тракторе, мотивируя это тем, что крупнейшие в мире лесозаготовительные концерны используют их в своей работе.
>чисто серверной операционки
Почему ты так решил?
>если он пилится корпорациями
Не каждый.
>сугубо для своих вычислительных задач в огромных датацентрах
Почему ты так решил?
>С таким же успехом можно пытаться ездить в магазин на гусеничном тракторе, мотивируя это тем, что крупнейшие в мире лесозаготовительные концерны используют их в своей работе.
Из какой методички сравнение?
OpenSSL, боль в моя дырка задница.
А, ты просил красивого. Такого не видел, при столкновении с реальностью всегда появляются костыли, увы.
Но по возможностям, я конечно люблю boost и lua sol2
C++17?
Из сишных могу nginx посоветовать. Лучшее, что я читал на Си. ПЛюсы мне читать сложно, но считаю, что tensorflow и opencv более-менее
Ну не надо тут врать. А как же известная ide clang и msvc?
ну, я понимаю что это компилятор. Спасибо за совет.
Это не сарказм надеюсь? Я как ньюфаг ищу примеры кода, по образцу которого можно развить привычку писать хороший код.
1. Спрашивали про свап-идиому, SFINAE, ADL. Я охуел, потому что про это первый раз услышал. Почему в учебниках ничего нет?
2. Уже не первый раз спрашивают про ебаное ромбовидное наследование и виртуальное наследование. Почему дрочат эту хуйню, если в учебниках написано, что это плохой паттерн и лучше так не делать? Неужели это на практике используется?
3. То же самое про ебаный pure virtual call. Ну давай обманем компилятор, ну давай вызовем исключение. Только вот нахуя, чистые виртуальные методы ля того и нужны, чтобы создавать абстрактные классы, нахуя вызывать то, что вызывать не нужно?
4. Уже не первый раз вопрос про перемещение из вектора при реаллокации. И про noexept в мув-конструкторе. Претензия у меня не собеседованию, а к языку. Почему нельзя было сделать, чтобы при реаллокации по умолчанию вызывался мув-конструктор?
>Где найти работу с основным языком - английским?
Любая английская компания или работающая с ними.
А как и где такие искать? В hh только по запросу "c++ fluent english", но это явно не полный нужный мне список. А сидеть перебирать компании я не хочу.
По моей инфе разморозили недавно. Мне главное чтобы сам набор не был закрыт официально
Как же охуенно. Читаю все что ты написал и понимаю, что у меня все это было в вузе
мимо первокур
>Читаю все что ты написал и понимаю, что у меня все это было в вузе
Тебе говорили зачем это знать?
Для того чтобы писать хороший, удобный, быстрый код без ub, понимать как некоторые фишки языка работают под капотом. Ну и банально показывают примеры когда незнание чего то может привести к плохим последствиям. Иногда препод говорил, что ему это ни разу не понадобилось на практике (не про то что ты написал, а вообще на каких то лекциях), но знать нужно, чтобы понимать как язык работает
> знать нужно, чтобы понимать как язык работает
А я знал всю ту хуету раньше, но уже забыл, так как ещё ни разу не пригодилась
мимошёл
Значит охуенный у тебя был вуз. По слухам в вузах на паскале и фортране кодят. И дай бог ханойские башни на си сделают.
Кек, у меня тоже был современный с++ (тогда еще 17). Но кроме него и фортран, и паскаль, и башни на си. и какая-то функциональная залупа, которую похоже специально разрабатывали чтобы добиться максимальной уебищности
мимо другой
Чел, на том конце сидят такие же европейцы с диким акцентом и уровнем upper intermediate++. Если тебе надо fluent - ищи релокацию в англоговорящие страны.
Нет.
>В hh только
На hh с английским ты только аутсорс гелары можешь найти.
Хочешь работать с буржуями — ищи галеру на буржуйских сервисах (тот же linkedin), очевидно же.
1. Потому что это выходит за рамки среднего учебника;
2. Не используется, суть вопроса — как в пункте — просто доебаться до знания кишков;
3. Просто хотят доебаться;
4. Легоси.
Суть любого собеса — доебаться вопросами, не имеющими отношения к работе зачастую и сбить цену, так не только в плюсах, так вообще везде, привыкай.
1. Идиомы это просто идиомы. Сегодня они актуальны, а завтра тебя за них ногами пиздят (за паттерны синглтон, фабриаки, за блокировку с двойной проверкой и т.д.).
2. Просто забей.
3, 4. Увы, но знать надо. Язык про ручное управление ресурсами. Исключения в конструкторе/деструкторе, pwc, нехватка памяти - с этим придётся бороться на практике.
Нет, язык позволяет вполне красивые вещи. Проблема в том, что эти красивые вещи вполне делаются и на более удобных языках, а на плюсах делают то, особо по красоте и не сделаешь. Я так думаю. Всякие наивные вызовы, байтоёбство и прочий high performance, где красотой жертвуют.
Привет тред это сново я.
Существуют ли итераторы, которые возможно разименонвывать? При этом сначала надо выполнить find_if для массива.
std::array<B, 23>::iterator it = std::find_if(b[0]->arr.begin(), b[0]->arr.end(), [=](const B b) {
return b->is_something == true;
});
Нам препод рассказывал, что в 23 стандарте случайно подвезут новый язык во время компиляции, при этом невозможно понять остановится ли выполнение программы или нет. И компиляторы тупо костылят, что если глубина рекурсии выше 100, то компиляция прекращается
Прикольно, дожить бы.
Так уже.
PricewaterhouseCoopers, но имелось в виду pure Virtual call.
> ввести ключевое слово
Поэтому. Комитет боится вводить новые ключевые слова и придумывает синтаксические изъёбства. Туда же auto для вывода типов.
No god! Please no!
1. Значит ты читаешь хуевые учебники
2. Доебаться. На практике не видел, чтобы использовалось. Но иногда это может тебе встретиться (например при наследовании от чего-то std'шного), поэтому будет лучше - если ты знаешь.
3. Доебаться. И вопрос про понимание. На собесе можно дать понять, что ты выкупаешь и послать нахуй
4. А причем тут мув конструктор? Давай возьмем вектор. Давай возьмем указатель на его первый элемент. А потом дохуя раз вызовем push_back. Произойдет реаллокация и указатель уже не будет валидным. На уровне языка это довольно сложно поправить. И даже если это поправить - будет оверхед, который пользователь(тупой программист) будет не ожидать. Поэтому за скорость платит как программист, зная вот здесь может ебануть
Для изучения языка я пользуюсь Ютубом, purecode, cppstudio — но везде только элементарные задачки и их решения. Из-за этого я не могу сделать что-то даже незначительно сложнее них
Хотел написать программу, в которой между двумя автомобилями с разными характеристиками проводятся гонки. Нужно выполнить лабу, в которой будут проводиться гонки, а в классе "Результат" выводиться собственно результат, автомобиль-победитель, расстояние, добавление/удаление автомобиля... Из-за того, что во всех уроках по теме ограничиваются тем, чтобы задать класс с парочкой объектов и вывести какие-то из значений объекта, я не могу писать что-то сложнее этого. Подскажите пожалуйста, где можно углубленнее посмотреть? Уже давно раздражает, что везде простенькие примеры и задачки, а мне нужно выполнять лабы, в которых задачи значительно сложнее. И поэтому штудирование информации в интернете как-то не способствует выполнению лаб.
Уже кучу уроков по классам, кучу сайтов посмотрел — нигде что-то хитровыебаннее базы для чайников не предложили. А мне лабы делать надо, ебать их в сраку.
Долбоёбы. Вот в питоне норм люди - просто объявили, что устаревшее говно поддерживать не будут, и ебанули новую улучшенную версию.
Деды на плюсах просто будут на старой и не поддерживающей сидеть, лол
А с ними и вся индустрия
В динамикодрисне это хоть и больно, но терпимо. Можно по-быстрому раскидать костыли по коду, чтобы поддерживались обе версии петухона. А в крестах начинается адская ебля, когда тебе надо скомпилить проект, написанный кем-то в нулевых, и ты получаешь 100 мегабайт нечитаемых ошибок, сиди, ебись.
>чистые виртуальные методы ля того и нужны, чтобы создавать абстрактные классы, нахуя вызывать то, что вызывать не нужно?
не, чел, это полезная вещь вообще то
для определения поведения по умолчанию или для определения частичной функциональности
можно даже сказать что это такой мини-паттерн, которому уж 30 лет как
чел, в том и сила
ты берешь очен старую либу, пытаешься компильнуть ее новым компилятором, в новом окружении, присоединить к своему охуенному сверх современному коду и так далее
ты должен вообще радоваться что компилятор такой строгий и вываливает кучу ошибок, потому что так и должно же быть..
а то что динамикодрисня (без тысяч модульных тестов) может сожрать любой код ну дак это и понятно, и то что у тебя "запустилось" с первого раза, это лишь означает что ты пошел по минному полю
вот так
В жизни всякое бывает. При разработке с нуля эти проверки может и хороши, но потом при сопровождении, когда что-то, что всегда работало, вдруг работать перестало, тебе хочется только одну кнопку "запустить любой ценой", и не ебёт, что в одном из стандартов запретили какую-то залупу с енумами.
Питун до сих пор жепу не зашил после релиза v3. Ещё попадается залупа, которая работает только на 2.х. И обновлений не будет, так как автор давно перестал её поддерживать или вообще помер от геморроя..
Ты путаешь с паттерном template method, который не pure virtual, но virtual и определён в базовом классе.
Присоединяешь к сверхсовременному коду и потом начинаешь как сучка пилить адапторы, чтобы легаси говно не вытекло наружу и твои коллеги не растащили его по всему проекту. Охуенно, да.
Если касаемо только c++, то стандартная библиотека (без мозгоебства на шаблонах и виртуальных наследований), куте, буст и всякие мелкие библиотечки, немного шаблоны проектирования.
Не понял. Есть поподробнее статья? С другой стороны у меня была шизо идея о том как в процесоор загружаются инты и прочие типы. Возможно ли посмотреть как они туда будут попадать и как то оптимизировать чтобы как тетрисе они укладывались ровно в машинное слово? Или это нереально потому что помимо приложения еще и операцинная система работает?
Еще вопрос - реально ли может помочь замена интов на char если я использую очень малые числа. Не больше сотни. На стаковерфлоу сказали что процесоор работает на интах лучше чем на чарах. Это правда?
Так делай лабу. Вот и научишься. Когда будешь сталкиваться с проблемой - смотри конкретно по этой теме. А вообще тут Мейерса советовали почитать. Я лично его нашел но так и начал читать. Прочитал только что лучше везде использовать auto вместо типов.
>Хотел написать программу, в которой между двумя автомобилями с разными характеристиками проводятся гонки.
Напиши.
>>348888
>У плюсов и так 100500 компиляторов
5 или компиляторы g++SuperSpeedAndSmallSizeEditionByCoolVasyanExtentedV3.0.1beta тоже учитываются?
>было бы круто язык форкнуть, но понимаю почему это не делают
Какая корпорация за это будет платить?
>>349031
>Возможно ли посмотреть как они туда будут попадать
Через регистры.
>они укладывались ровно в машинное слово
Посмотри размеры и количество регистров на целовой архитектуре.
>реально ли может помочь
Кому?
>Это правда?
Посмотри инструкции, которые генерирует компилятор для чаров и интов.
>Посмотри инструкции, которые генерирует компилятор для чаров и интов.
Как это сделать? Юзаю VS.
Отладчики, генерация асм листинга и тд, миллион способов.
https://docs.microsoft.com/ru-ru/cpp/build/reference/fa-fa-listing-file
Помогите с кодом пожалуйста. Хочу научиться разименовывать итераторы. Если это возможно. Мне приходится передавать значение в указатель, но хочу сразу доступ к переменным осуществлять через итератор.
Код здесь:
https://pastebin.com/EgUBqeNC
Разобрался. Спасибо.
Попробовал и получит результат. Только не знаю что происходит. Слышал только про mov. Это вроде запись значения.
>5 или компиляторы g++SuperSpeedAndSmallSizeEditionByCoolVasyanExtentedV3.0.1beta тоже учитываются?
https://en.cppreference.com/w/cpp/compiler_support
Только из значимых — уже 12 штук.
А сколько их для всякого эмбедед говна... Ты молодой, шутливый, тебе все легко. Это не то. Это не Чикатило и даже не архивы спецслужб. Сюда лучше не лезть.
>>349048
>>349074
Палю годноту: https://gcc.godbolt.org/z/cex9WPMEa
За тебя прмерно матчит асм с строчками кода — открывай доку по x86 асму и изучай.
>Только из значимых — уже 12 штук.
3 вижу, а где еще 9?
>А сколько их для всякого эмбедед говна...
Гсс собранный для разных архитектур?
>3 вижу, а где еще 9?
А ещё 9 в глаза тебя ебут наверно.
>Гсс собранный для разных архитектур?
Ох зумерок... Если бы всё было так просто...
>Это троллинг?
Нет.
>А ещё 9 в глаза тебя ебут наверно.
Не угадал.
>Ох зумерок... Если бы всё было так просто...
Какие?
>>349043
>Напиши.
Логичный совет, я и начал писать, но быстро столкнулся с тем, что не знаю, как что-либо сделать. Гуглю — мне выдают ту же хуйню уровня хеллоу ворлд. Мне бы примеры решения готовых задач посмотреть, при чем задач посложнее, а не уровня "Создать класс с двумя объектами, вывести значения объектов"
Попробуй то же самое но с наследованием. Тут же станет сложно.
А, ну раз ты сказал, то с завтрашнего дня Intel, nvidia, oracle, IBM перестанут писать кимпиляторы и пересядут на gcc
Я не писал, что остальные не значимые, а написал, что вижу только 3 значимых компилятора. Где используются остальные? Какой софт собран с помощью них? В чем их преимущество? Почему нельзя было использовать гсс\шланг\студийный?
Как мне в определении метода внутри класса обратиться к перегруженному оператору?
Спасибо
(*this)(4)
> Я не писал, что остальные не значимые, а написал, что вижу только 3 значимых компилятора. Где используются остальные?
Я так подозреваю, что в сборке всяких внутренних прог или для лучшей оптимизации кода для своих продуктов. Может ител знают как лучше под свои процы собирать, чтобы работало быстрее
> Какой софт собран с помощью них?
Не изучал, не знаю
> В чем их преимущество? Почему нельзя было использовать гсс\шланг\студийный?
Я не работаю в интел, но могу предположить, что интеловчский собирает лучше для процов интел, а gcc просто не имеют ресурсов оптимизировать компилятор для разных процов
>а gcc просто не имеют ресурсов оптимизировать компилятор для разных процов
Тем не менее у них больше всего фич.
>Почему они значимые?
Потому что в компаниях типо интела/оракла/ибм гарантированно есть ебейшее количество кода завязанного на них, а так же куча корпоративных клиентов которые не особо афишируют что у них там происходит.
>>349310
Языковых фич. Потому что им не занимаются эффективные манагеры которым похуй на язык, лол.
Во всяких областях типо поддержки инструкций самых новых (либо редких/эксперементальных) фич процессоров (или сопроцесссоров, сейчас же модно сувать NPU в каждую щель), векторизации и прочим оптимизациям математики компиляторы вроде интеловского/амудешного ебали и скорее всего по прежнему ебут всех.
Скорей бы на работку.
>интела/оракла/ибм гарантированно есть ебейшее количество кода завязанного на них
Получается это корпоративный компилятор? Тогда зачем он обычным пользователям?
А значимость чего-то определяется количеством васянов собирающих дома линух?
Пиздуй тиктоки смотреть, не засирай тред.
>А значимость чего-то определяется количеством васянов собирающих дома линух?
Чем она определяется по-твоему?
долей на рынке. У интела 75% так что по идее (того анона) надо компилировать на нем.
другой анон
Востребованностью. Которая не различается по критериям вроде business-to-business, business-to-client или opensource-to-vasyan.
>>349347
>по идее (того анона) надо компилировать на нем.
Нет у меня такой идеи, пчел.
Если у тебя там не какая-то охуительная математика, 10-20% ускорения которой будут покрывать лицензию на компилятор и кучу самого современного железа, конечно.
Аргумент про "обычные юзеры не юзают" — говно уровня "C++ нинужин" в соседних чатах.
>Востребованностью.
Для кого? Если компилятор востребован 0.0001% программистов, тогда он становится значимым для всех?
Да
Всё просто — если не понимаешь зачем он тебе — он тебе не нужен, забей и сиди на самом распространённом у тебя на платформе.
Для индустрии в целом. Индустрия != программисты, а вот программисты без индустрии в целом никому нахуй не нужны.
>Для индустрии в целом.
Каким образом?
>Индустрия != программисты
Получается компиляторы и программисты не связаны? Кто тогда определяет какой компилятор использовать?
>Каким образом?
Позволяют выжимать из железа больше.
inb4: Рентабельнее что-то делать => больше проектов => нужно больше программистов (и не только).
>Получается компиляторы и программисты не связаны?
Как ты до этого дошёл? Вроде на сосаче пиздим а не на форуме дислексиков.
Программисты — составляющая индустрии, не вся индустрия.
Разговаривашь как гадалка. Мне кажется ты один лахтинцев Абу который поддреживат дискуссии чтобы траффик был.
Пок, пок, пок. Компилятор javac умеет создавать .h файлы для нэйтива. Он c++ компилятор или не компилятор? Или это другое?
>Не факт.
Когда
>компиляторы выбирают программисты
это работает именно так.
>тогда к чему ты притянул индустрию?
К тому, что выхлоп от компилятора который умеет юзать какие нибудь новые инструкции в новом проце получают не только программисты.
>>349378
Вполне конкретно написал — не нужон какой нибудь интеловский MKL — нахуй не нужон и их компилятор.
Пиздец, как же тяжко общаться с тиктокерами...
>К тому, что выхлоп от компилятора который умеет юзать какие нибудь новые инструкции в новом проце получают не только программисты.
Популярные компиляторы не умеют их использовать?
ничего я не путаю
pure virtual функция член может иметь определение, и это используется для определения реализации по умолчанию или для определения частичной реализации
>Попробовал и получит результат. Только не знаю что происходит.
вырубай флаги оптимизации все, когда только учишься читать сгенерированные ассемблерные листинги
без таких флагов машинный код будет проще и его будет легче понять
Зачем тогда её делать pure, если у неё есть член реализация и она не деструктор?
То что ты описываешь и есть template method.
Ну хуй знает.. Я асм тоже плохо знаю, и мне О0 читать сложнее чем О2, потому что там наоборот насрана куча лишних инструкций.
>Пиздец, как же тяжко общаться с тиктокерами...
clang + cmake + VS enterprise. На мой думерский взгяд выросшего без интернета, с игрушками прибитыми к подоконнику и загуглившего тему за 5 минут это самая нормальная комбинация. Поклонники gcc конечно не согласятся, но я жду факты и внятные аргументы.
Если в классах-потомках в реализации этой функции используется один и тот же код - сделайте в базовом классе отдельный protected метод, выполняющий этот код, а не пишите его в теле pure virtual.
Сделай ему абстрактный деструктор. Всё остальное = 0 без реализации и !=0, если реализация есть.
В плюсы завезли строки нормальные? Ну или нормальную асинхронность? Может быть кроссплатформенную работу с сокетами?
Дропнул это добро на втором курсе вуза сразу после того как написал компилятор паскаля на плюсах и перекатился на божественную жаву
Условие что базовый класс должен оставаться абстрактным.
>В плюсы завезли строки нормальные?
const char*, std::string и юникодные варианты
>Ну или нормальную асинхронность? Может быть кроссплатформенную работу с сокетами?
Или? бака
boost asio, давно хотят вроде и вероятно в след-послеслед стд его завезут в стдлибу
1st class поддержка корутин уже давно есть если что
>перекатился на "божественную" жаву
clown
Угу, а теперь сделай мне регистронезависимое сравнение юникодных строк ß и ss и ẞ, в utf-8 и utf-16. Печально всё со строками.
в стд есть функции конвертации, toupper, как я понимаю можно доставать из uNstring конвертером по символу в char32_t, делать toupper/tower и сравнивать (хотя описания этих функций с названиями аля qwerty cvt mcb просто ну их нахуй, благо мне что строки, что плюсы юзать пока что не придется) . Ебля, но однажды в функцию выделить и все нормально. Или все в стандарт тащить? Интересно, есть ли в жабе все фичи плюсов..
Не, я плюсокодер, просто эта фигня с юникодом (точнее, отсутствие вменяемых средств для работы со всем, выходящим за пределы Base Plane или имеющим культурные особенности) доебала уже. Обычно не сортирую, но вот потребовалось, и возник НЮАНС.
>>349665
Ты не шаришь. Эти символы в разных регистрах занимают разное количество code unit.
>в тот ли я тред попал?
Крестотред всегда привлекает шизоидов, пока не ушел в бамплимит. Поэтому все треды 1000+.
>перекатился на божественную жаву
Перекатился в смысле новую должность получил или просто поковырял литкод? Почему не C#? В СНГ вроде это и есть путь.
Мне кажется это тот студент который здесь вчера про операторы спрашивал
если считаешь иначе, то ты или семибитный динозавр или запихал себе в очько весь стандарт юникода который уже толще плюсового наху
это база
Проблема, если её так можно назвать в поверхностных знаниях и не(-знании/-понимании) всевозможных питфолов. Вот я например юзаю std::array чаров, на первый взгляд всё выглядит работающим но я хз, оптимально ли это на дистанции и мб тут есть более лучшая практика (С-массив, ага). Бтв я поначалу вообще пробовал в стрингу или вектор класть. Вот пишу я либу для архивирования файлов. Сделал RW, сейчас думаю как докинуть удаление => перезапись уже существующего файла. Идея такова, чтобы найти начало искомого файла, обнулить занимаемые им байты (скорее всего лишний шаг) и сдвинуть весь контент что шёл после него в позицию начала этого файла - це норм чи не норм? Это из основного и насущного, а так уверен, что есть ещё что-то с чем я не сталкивался.
>мб тут есть более лучшая практика
Используй объединения (union) для хранения бинарных заголовков (упростится работа с ними и RW) и контейнеры для бинарных данных, типа std::array.
>Вот пишу я либу для архивирования файлов.
Какие задачи у архиватора? Безопасность, скорость, размер, удобство?
>це норм чи не норм?
Алгоритм говно. Создай заголовок у архива, где будут расписаны смещения до файлов и прочие их данные, после через этот заголовок загрузи весь архив в оперативную память и через реализацию списка с массивами бинарных данных оперируй уже файлами, после всех операций сохраняй все данные в свой архив. Не самый лучший алгоритм, но первое, что пришло в голову.
>В плюсы завезли строки нормальные?
Нет и не завезут. Там хуиту вроде std::format мусолят годами, а тут ты такой — юникод!
> и перекатился на божественную жаву
Ну там строки тоже такое себе, не чтобы прям заебись и без ебли.
>Ну или нормальную асинхронность?
Только каркас для неё в виде корутин. А дальше как обычно — сам решай че хочешь.
>Может быть кроссплатформенную работу с сокетами?
Кек.
>Создай заголовок у архива, где будут расписаны смещения до файлов и прочие их данные, после через этот заголовок загрузи весь архив в оперативную память и через реализацию списка с массивами бинарных данных оперируй уже файлами, после всех операций сохраняй все данные в свой архив.
Полное говно алгоритм тоже. Без задачи сложно описать адекватный алгоритм. Если кратко, то примерные основы такие:
1) Минимизировать работу с дисками.
2) Минимизировать сдвиги и копирование памяти.
3) Многопоточность.
4) Фича почему твой архиватор, а не любой другой.
5) Расширяемость.
Зависит от того, чего ты хочешь.
>QML vs QtWidgets
Первый — даст хуёвенький перформанс на сложных гуях, на втором ты писать будешь минимум в 5 раз дольше.
>vs веб интерфейс через фреймворк JS`a
Если не нужны фичи которые дают десктопные приложения (нормальный персистенс, доступ к системным апи итд) то можно и так. Хоть сколько нибудь сложный гуй будет жрать ебические ресурсы.
>vs Электрон
Прошлый пункт только с доступностью фич десктопных приложений (но кучей ебли с бриджем итд).
>Какие задачи у архиватора?
Дла начала - примитивный CRUD без изъёбов. Я для того либу и пишу чтобы прохавать всю прелесть байтоебли.
>примитивный CRUD без изъёбов
Тогда просто реализуй адекватный алгоритм дефрагментации и используй резервирование памяти.
Препод дал задание за неделю написать эмуль 8086 с четырьмя что-ли командами. В общем обращаюсь к вам, сейчас чёткое условие писать на плюсах. У меня ноль теории по тому как устроен 8086, как начинать писать сам эмуль и знания в плюсах околонулевые. Читал статью на хабре, видел эмуль на гитхабе, но моих мозгов пока не хватает понять. Порекомендуйте источников, книжек, может ютаб канал чтобы хоть с чего-то начать.
Спасибо!
Пока для себя вижу такой фронт работ:
Разобраться с тем как устроена архитектура любого процессора
Разобраться с особенностями 8086
Попробовать написать эмуль какого-нибудь простого чипа
Переходить непосредственно к 8086
>У меня ноль теории по тому как устроен 8086
https://ru.wikipedia.org/wiki/Intel_8086
>как начинать писать сам эмуль
Читаешь команды, а потом выполняешь действия.
>Система команд процессора Intel 8086 состоит из 98 команд (и более 3800 их вариаций):
Удачи анон. Ты точно программирование изучаешь?
Считай это риторический. Изучать как работает процесоор это для каких-нибудь компьютерных инженеров если только. Препод наверно шиз и омега если такую шляпу задал.
>компьютерных инженеров
Системных программистов.
>такую шляпу задал
Там кода на 1к строк, в чем проблема?
Что выбрать тогда чтобы и шустро работало даже с большим кол-вом элементов, было не всрато и чтобы простую кнопочку 500 строками описывать не пришлось?
Так я же говорю мне не надо полный эмулятор писать, просто выбрать 4 команды
У меня проблема в том что не знаю с чего начать
>У меня проблема в том что не знаю с чего начать
Давай начнем с того, что узнаем, что ты умеешь.
Если про кресты, то их на начальном уровне я знаю, посидеть погуглить как какие конструкции пишутся в инете не сложно (лямбды, шаблоны их не трогал). Вот с архитектурой сложнее, я банально не знаю с чего начать (если что-то требуется, то беру ручку и блокнот и пишу), просто сижу перед листком и ничего в голову не лезет. Надо понять как вообще процессор работает, какие у него блоки, команды (это препод не дал). Ну и вообще что такое эмулятор и с чем его едят
>Надо понять как вообще процессор работает
Если тупое объяснение, то он читает команду, выполняет действие, изменяет состояние регистров. Думаю для процессора 80-ых годов достаточное объяснение. Более подробно в даташите.
https://html.alldatasheet.com/html-pdf/130012/INTEL/8086/147/1/8086.html
Список команд.
https://kaf401.rloc.ru/DSP/I8086_commands.htm
В том что там 3800 вариаций. Я вот сейчас тоже делаю вариации и это очень тупо. И бесполезно.
> и ничего в голову не лезет.
Degeneratus Maximus. Пациент не может в абстракцию. Предлагаю лоботомию.
зачем call? проще всего тупо арифметических, а если по красоте то разве для нормального использования call не надо еще пару инструкций?
>снова маневрируют
Ты не мужчина что-ли заниматься таким гейским траллингом? Выйди со мной раз на раз посмотрим как не поманеврируешь.
Всё так, Бро . Именно страшно. Такая же страшная фигня в операциях со временем с учётом истории изменения таймзон, летнего времени и високосных секунд.
>С электроники.
Её я тоже знаю. Мне в контексте языка.
>Со сбора инвестиций.
Нахуя если я сам себе инвестор?
>Мне в контексте языка.
Проблема в том, что ты хочешь от ИИ, в этом основная сложность понимания и реализации.
>Что выбрать тогда чтобы и шустро работало даже с большим кол-вом элементов
Qt.
> было не всрато
Нейтив. Если таргет линукс — Qt.
>чтобы простую кнопочку 500 строками описывать не пришлось?
Прям 500 нигде не придётся.
У тебя требования взаимоисключающие, пчел. Быстро ты можешь либо софт написать, либо софт будет быстро работать.
В целом возьми что проще и больше приглянется — и решай проблемы по мере поступления, можешь например взять QML и растягивать анус пока не начнёт болеть, потом сможешь свичнуться на виджеты, если таки заболит.
Не в этом вопрос. Пока что я спрашиваю про то, что вообще сейчас применяется при написании нейронок и прочих игрушек в контексте языка. Так то конечная цель само собой сильный и независимый ии, лепить лица однокурсниц на тела порноактрис или высчитывать радиус углов нового айфона при которых продажи больше будут - 0 интереса.
>которых продажи больше будут - 0 интереса.
Масленок интерес не может быть отрицательным и скорее всего не будет == 0. То есть он будет в любом случае.
Да? И почему же тогда мне интересно дрочить сабж, пресный матан который я что в школе ненавидел, что сейчас ненавижу и всё прочее и вытекающее только потому, что мне это внезапно интересно и по этому пути меня не ведёт ничего кроме энтузиазма и одиночества?
cuda
>матан
матан это не математика Масленок, это математический анализ.
>дрочить
завязывай, в этом вся твоя проблема.
>матан это не математика Масленок, это математический анализ.
Ну да, проебался с определением. В школе ненавидел математику, сейчас ненавижу математику и матан.
Тут уже был срач выше.
— Потому что кроссплатформа;
— Потому что нормальная документация;
— Потому что fluent C++ API;
— Потому что один большой консистентный фреймворк.
Везде, где может ввести юзер. Путь к файлу, idn имя хоста, что угодно. Ну и соответственно в лог надо писать. Текст ошибки от винды например.
А, ну ты бы так и сказал, что в софте для бухгалтерии.
Ну я был джуном на плюсах на заводе с первого курса, а потом препод подкинул халтурку на жаве связанную с банком одним забугорным и так вот пошло поехало.
Нейросеточки, cv и slam жрут как не в себя. Особенно если тебе нужна автономность. Посему - avx, neon, cuda, opencl, tbb, и параллелизм, доступный в языке. Кастомные контейнеры, структуры данных, теорвер, дифгем, алгебра, функциональный анал, местами матан.
Может лучше ограничишься робототехникой и на С делать робота Фёдора? За Фёдора сейчас льготную попотеку дают.
>Нейросеточки жрут как не в себя
Ну типо, поэтому я в с++ тренде и пишу.
>За Фёдора сейчас льготную попотеку дают.
Как я уже говорил - материальных выгод я не ищу.
>выгод я не ищу
А кто сказал, что попотека это выгодно?
Не очень понятно, что ты по факту писать собрался? Всё и сразу? Ты голову себе сломаешь.
Если тебе надо именно сетки писать, то параллелизм низкого уровня (avx, cuda, интринсики), представление о работе с памятью, умение писать свои аллокаторы, понимание механизмов обмена данными между cpu/gpu или ram и различными кэшами.
По языку это первые несколько глав нормального учебника.
Сам C++ вообще никак не приспособлен для такой работы. В языке нет ни типов данных (матриц/векторов) ни операций над ними.
Если бэк, использующий нейросети, то шаблоны/классы, библиотека std - оставшаяся часть учебника по c++. Ещё нужен параллелизм с++ - он обычно в конце книжки (описан на отъебись).
помогите пожалуйста разобраться, как этот код работает. Почему
(49 & 2) это 0
а
(51 & 2) это 2
Как это работает вообще?
Оператор & это побитовое И: 1 & 0 = 0, 1 & 1 = 1.
Двоичное представление чисел:
49 = 110001
51 = 110011
2 = 000010
Далее по всем позициям проходишься и применяешь попарно &
В итоге для 49 будет 000000 = 0, а для 51 - 000010 = 2
>Всё и сразу?
Всё, но не сразу. Ясное дело сначала я увязну в дроче с классификацией ириса и прочей базовой фигнёй. Нахуя мне это? Надоела пустая и бесцельная жизнь фуллстакомакаки, хочу чего-нибудь нового крутого. Паралеллизм не проблема, я зря Уильямса читал что ли?
Ну будешь драться с олимпиадниками за те 2 вакансии, которые сейчас размещены. Могу тебе сказать, что собес на такую позицию это 10-15 минут с++ и потом либо адовый параллелизм, либо матан.
Я НЕ буду искать никаких вакансий. Я НЕ буду работать в этой сфере на бизнес/НИИХУЯ. Мне хочется занятся этим ДЛЯ СЕБЯ исключительно потому, что мне это интересно. Может быть я обосрусь и скачусь в Qt-макаку, может быть стану крутым спецом и в мидтайме "каръеры" смогу сумею замутить каких-нибудь дроидов/андроидов - сейчас я об этом особо не думаю, сейчас мне тупо интересно с этим поебаться.
>Используй объединения (union) для хранения бинарных заголовков
>(упростится работа с ними и RW)
Каким образом?
>Каким образом?
Таким union { raw[sizeof(struct)], struct { a, b, c, d } }, read(from, union.raw, sizeof(union.raw)) union.a,b,c,d -> ...
>Таким union { raw[sizeof(struct)], struct { a, b, c, d } }, read(from, union.raw, sizeof(union.raw)) union.a,b,c,d -> ...
Хотя в любом случае структуру надо будет выравнивать, поэтому никаким, пиши, как хочешь.
>НЕ буду работать в этой сфере
>стану крутым спецом
Кекеке.
>замутить каких-нибудь дроидов/андроидов
А это уже третье направление, не касающееся бэка и нейросетей.
Системное программирование - RTOS/Linux, драйвера, распределённые системы, межпроцессное взаимодействие. Программирование под интерфейсы железяки (преимущественно на С) и ЦОС математика для потоков с этих интерфейсов - преобразования фурье, фильтры калмана/гаусса, дебаеризация, матан для калибровки.
Я просто чё тебе хочу сказать. Если ты хочешь сделать своими силами нечто умное и автономное, то покупай Малинку/Ардуинку. Накатывай на них официальные AI тулкиты и с помощью питона реализуй свои идеи. Если ты пойдёшь с другого конца, то оно тебя сожрёт.
>А это уже третье направление, не касающееся нейросетей.
Ага, заебись, и будет мой дроид уметь только сварочным апаратом по заранее заданным координатам провести, 10/10.
Чтобы он что-то там мог ему надо научиться в пространстве ориентироваться. Но это уже четвёртое направление - SLAM, трекинг и теория управления (матан, матан, матан).
Да это всё и так понятно. Всё это отдельные модули которые так и так будут коммуницировать с этим самым "модулем ии" - тут без этого никак. Я же не говорю что-то в духе "Бля, сейчас почитаю авторанейм и завтра на иксвинге на Пандору". Тут и тупому ясно что это марафон в огромный пласт разнообразных наук и техник.
>бери малинку
Подкинь промокод, ты же очевидно у них торговым представителем подрабатываешь.
>потом снова иди формочки шлёпать
Таков путь каждого краба в вашем ведре?
>вкат в робототехнику
читай советские книжки по кибернетике и тау, например
из них ты поймешь какой мат аппарат тебе нужен
потом читаешь соответствующие книги с нужной математикой, тоже советские
как то так
но ты же не последуешь этому совету? ха ха
>но ты же не последуешь этому совету?
Почему это? Я половину того, что знаю учил по советским учебникам.
У меня другая железка. Малинка легче в освоении. Не хочешь - бери ардуинку. К ней много всяких сопутствующих железок продаётся - дисплеи, приводы, сенсоры простенькие.
>путь краба
Вакансий мало, а кушать хочецца.
лучший способ оптимизировать нейросетку - это отказаться от нейросетки, но пидорасы что делают 10к грина в месяц на этом дерьме никогда в этом не признаются :D
>Надоела пустая и бесцельная жизнь фуллстакомакаки
лол, нахуя вы в кресты лезете
у тебя же наверняка на хлебушек с маслом зарплата есть и еще джем сверху? так ведь?
с жиру бесишься
чел
если ты работаешь кодером 8м часов
то самое хуевое что ты можешь сделать с собственным мозгом и телом - это приходить домой с работы и снова садиться еще на 3+ часа за комп, без разницы с какой целью, играть в игрушки или заниматься "другим" кодингом
ты можешь спокойно выгореть и все, в 35 лет сдохнуть бомжем от нищеты
а) Я начинал с С
б) Плюсы охуенные
в) Я 4 года к ряду пилю охуительные бизнес решения, сраттапы и нфт-блокчейн-крипто хуйню что меня порядком подзаебало.
они не победили
просто нет оплачиваемой работы, айтишников слишком много сегодня
бизнес может снимать "верхушку" с выпускающихся вчерашних студентиков, брать лучших
а середняк отправляется в помоечку
а вот в конце нулевых в россии и середняк брали на РАБоту
>приходить домой с работы
Но я работаю из дома...
>садиться еще на 3+ часа за комп
Я сижу по 16+ часов в день и что?
>ты можешь спокойно выгореть и все, в 35 лет сдохнуть бомжем от нищеты
А могу послезавтра отъехать от рандомного тромба. И что? Это повод скатываться в потреблядство и нихуянеделание?
захардкоженый алгоритм под решение частной проблемы
для тех же задач распознавания образов есть сотни алгоритмов, с соответствующим мат аппаратом
чел ты очень странный
хвастаешься тем что работаешь по 16+ часов в день и тут же сообщаешь что у тебя уже есть вариант умереть от инсульта?
хм, может стоит все же начать работать 8м часов в день и заняться собственным здоровьем? не?
Я тебе про вероятности говорю, а не на здоровье жалуюсь. И выгорание у меня не от того, что я за компом живу а из-за рутины.
Ну он тебе дело говорит. Если речь идёт о поисках объектов на картинке, то часто их геометрия известна и не нужно гонять нейросеть. Достаточно сделать свёртку для edge detection и по маске найти то, что надо. Работает вот прям намного быстрее.
Я тебе назвал 4 из 11 направлений, необходимых для создания умного устройства. Так как ты сам не знаешь, куда хочешь двигаться, то очевидно что надо брать конструктор на базе эмбед решения и пробовать разные направления.
На сколько сократится количество рутины, если ты будешь работать не 16 часов, а 8? Описать мат модель и обосновать её. Написать на c++ код, вычисляющий количество рутины для произвольного интервала времени.
Всё ещё скучно. Ещё попытку?
Родина-мать и так всё знает.
Номер можешь скрыть просто. Почта у меня есть, но там имя и фамилия в названии. А остальные я не чекаю и твои сообщения потеряются. Если ты закроешь номер, то никто не сдеанонит. В крайнем случае за 15 рублей номер купи и акк сделай фейковый
проверь сообщения
Ну у тебя 2 стула в таком случае:
1) Запилить всё на движке попроще. Если не станет похуй на гейдев — рано или поздно упрёшься в движок и пойдёшь учить UE (лучше сразу пиздуй туда);
2) Запилить всё с нуля. Та же буханка что и с Qt а ещё ты скорее всего никогда не допилишь своего игоря до вменяемого состояния, но вне зависимости от того забьёшь на гейдев или нет получишь кучу знаний.
Да мне и сейчас похуй на гейдев. Хочу и знания Qt-хи прокачать и запилить что-нибудь такое неплохое.
>Хочу и знания Qt-хи прокачать
Ну ты тык её не прокачаешь, напиши что нибудь полезное. Клиент для какой нибудь хуйни типо сосача матрикса там.
>запилить что-нибудь такое неплохое
"Неплохое" в соло не запилишь.
Можно что-то средне-хуёвое с пизженными ассетами.
Тоже пилю движок. Научился создавать окно, закружать текстуры, передвигать юниты (с текстурами), сейчас пишу логику для атаки. Клики мышки тоже сделал. Пока полет нормальный. Есть знакомый дизайнер который уже заинтересовался проектом. Думаю летом плотно за ней сидеть, каждый день (плюс-минус). Единственный подводный это то, что стим заблокирован. Так что надо будет еще и свой магаз пилить.
другой анон.
>Так что надо будет еще и свой магаз пилить
Не с того конца начал, для начала сделай свою материнку, процессор, ОС и т.д.
Работать в юнити это та еще запара. А так у меня будет и пэт и навыки, а у тебя будет нескончаемая боль и кривой продукт.
>А так у меня будет и пэт и навыки
Неа, у тебя будет геморрой, выгорание и незаконченный проект.
>а у тебя будет нескончаемая боль и кривой продукт.
Какой продукт? Боль от чего? Я предпочту взять готовое решение везде, где это возможно а не писать всё с 0.
>выгорание
Это для тех кому нужны бабки в глубине души. И зумеров которые не определились что им надо.
>геморрой
Ты походу старый
>незаконченный проект
твое воспитание масленок
>готовое решение везде, где это возможно а не писать всё с 0.
Это рационально не спорю. Но на этом далеко не уедешь. Или у тебя получится пошлятина которая миксимум 5/10 по оценкам будет. Людей интересует что-то новенькое.
>Людей интересует что-то новенькое.
Что-то вроде очередного гейдвижка не предлагающего миру ничего нового?
Я запросто создам что-нибудь. А ты упрешься в мейнстрим. Если вообще найдешь у кого своровать.
Морально приготовился к тому, что твоё запросто затянется на n лет регулярного дрочерства?
Удачи тогда.
А чё сказать то? Обычный набор. Рантайм плюсов, рантайм куды, дефолтные либы для картинок, zlib для архивов с ресами и рантайм для иксов с компилятором (видимо для шейдеров).
Знаешь что такое CUDA? Я вот только понял что это для аппаратного ускорения.
Поясни пожалуйста. Для чего все пишут тогда если не винды? Самая распостраненная система. Правильно?
>Для чего все пишут тогда если не винды?
Для денег.
>Правильно?
Независимой статистики все равно нет, любой ответ подходит.
Вообще без наследования. Я пока на void* переписал всё и вручную написал в процедурном стиле что надо. Поебень какая-то.
Тогда правило шести видимо? Если определить один из конструкторов, операторов присваивания или деструктор то дефолтные удаляются. Ты их должен explicitly объявить default.
А ему похуй. Он всё равно удаляет. И я не смог нагуглить на каком основании он это делает.
Вот теперь вообще без вариантов...
У полей точно есть правильные публичные конструкторы копирования (c const&) и не deleted деструкторы?
не говоря о ебучих случаях вроде полей типа T&&, надеюсь такой хуйни у тебя нет
Обернуть в объект и повесить колбеки на операции изменения, но это только для явного изменения сработает.
Можно повесить PAGE_GUARD на нужный кусок памяти и ловить эксепшен STATUS_GUARD_PAGE_VIOLATION при любом обращении к нему. Будешь знать прям какая инструкция лезет туда, даже про попытки чтения узнаешь.
Бля, ну я даже проверил сейчас - сделал всё публичным, вручную создавал новый класс, каждое поле копировал в новый и всё копируется. Но дэфолтный всё так же удаляет. Если через STL пытаться что-то делать с этим классом, мне сблёвывает портянку на 10 строк про "no matching overloaded function found", "attempting to reference a deleted function" и "could not deduce template argument for '<unnamed-symbol>'". Пиздец кал, это кстати MS C++20.
А хули делать? На cmake я не хочу. А C+20 мне нужен, у меня на корутинах и STL всё.
Ручками всё, ручками.
Зачем писать под стандарт, которому даже полгода нет?
>На cmake я не хочу
По-твоему проблема в системе сборки?
Три
> которому даже полгода нет
Он уже почти год как на 100% реализован везде. У GCC вроде вообще года 2 как.
Они с тобой в одном треде сидят? Когда вкладку в браузере переключаешь они пропадают?
Лапы, хвост и усы - вот мои логи.
YAP, Type Traits, TTI, CallableTraits, HOF, Fusion, Metaparse, Hana, Preprocessor, MPL - абсолютный минимум который должен знать каждый вкатывальщик!
окей, это шутка
на самом деле под "знанием буста" обычно подразумевают одну практическую библиотеку, а именно asio
>на корутинах
а как сопрограммы реализованы в языке, кто знает?
они используют "волокна" (fibers в windows) операционной системе или как то просто эмулируются на потоках операционной системы? нахуя тогда их было делать если выбрана вторая реализация?
Ну Азия это понятно, а что ещё в бусте годного есть чтобы и практично и козырнуть в резюме можно было?
Они не реализованы как у других, тут нет жесткой реализации. Корутины в крестах просто перемещают выполнение кода в другой фрейм, остальное как захочешь. Можешь продолжить выполнение корутины в другом потоке, можешь приостановить её через co_await, можешь возвращать из неё асинхронно данные. Через корутины ахуенно делать lock-free многопоточность, контролируя каждый поток, а не как во всяких растах где всё за тебя решили гомогеи.
Спецификацию читай, чел. У крестов она шикарная.
https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/n4849.pdf
>У крестов она шикарная.
А мне говорили что в крестах вообще ничего хорошего нет.
Бтв если я освою все эти 1800 страниц я стану сеньором?
Нет, но сможешь хотя бы быть джуном через пол года практики. Кто не читал спецификацию вообще не могут крестовиками считаться, они просто сишники, пишущие процедуры с классами.
Ну ёбана, 2 года читаю Страуструпов, Мейерсов, Александресок и прочих, 3 проекта запилил - 1 с бустом, 1 на qtхе и я всё ещё даже не ждун?
>Получил котлету бабла - покушол нормально
Джуны не получают деньги, им сразу едой платят.
>что за вопросы тупые?
Я работаю по методичке.
>Из всех работ на которых я ебашил только будучи прогером я почувствовал себя человеком.
Мазохист?
>Джуны не получают деньги, им сразу едой платят.
Это происходит только потому, что есть дебилы посмотревшие 1 курс, нихуя не умеющие и согласные на такие условия.
>Я работаю по методичке.
Это-то мне как раз понятно.
>Мазохист?
Снова тупой вопрос.
>Это происходит только потому, что есть дебилы посмотревшие 1 курс
Уверен?
>нихуя не умеющие и согласные на такие условия
Что ты умеешь?
Функция принимает такой указатель в качестве out-параметра, создает объект (структуру), делает указатель на нее и кладет в эту переменную указатель на этот указатель. Не проще ли ограничиться одним уровнем указателей?
Изменение указателя.
>Я общаюсь с лидами, так что да.
Почему они являются для тебя авторитетами? Что они умеют? У тебя заниженная самооценка?
>С какой целью интересуешься?
Социальный опрос провожу.
>Социальный опрос провожу.
А выглядит так что ты бот который моё время впустую тратит.
>Почему они являются для тебя авторитетами?
Они не являются.
>Что они умеют?
Пиздеть они точно умеют, об остальном не ебу.
>У тебя заниженная самооценка?
Не жалуюсь.
>А выглядит так что ты бот который моё время впустую тратит.
Ты сам тратишь свое время на оправдания.
>Они не являются.
>>351793
>Я общаюсь с лидами, так что да.
Противоречие.
>>351797
>Пиздеть они точно умеют, об остальном не ебу.
>Не жалуюсь.
Ты принял потенциальное ложное утверждение от других людей и выдаешь его, как подтверждение твоей (навязанной) точки зрения, точно уверен, что у тебя нет проблем с ней?
Если тебе надо вернуть указатель из метода, но не через return, а через параметры, то ты можешь либо передать его по ссылке либо через указатель на указатель. Чаще всего встречается при линковке с кодом на С, так как в С ссылок нет и там у них ⚹⚹ везде. В c++ это пидорская практика и, например, const T⚹⚹ = T⚹⚹ вообще запрещено.
Потому что это не указатели на классы из одной иерархии и не void*.
Для таких случаев используется reinterpret_cast или каст в стиле C.
Спс
В целом нашел решение путем сравнения с именем адаптера. Только вопрос, он зовётся Ethernet на любой винде?
Ты очень плохой собеседник и советчик
Объясните, в чем разница между двумя этими программами? Я написал программы с одними и теми же объектами и одинаковым результатом. В чем разница и в каких случаях как объявлять переменные объектов? Знаю два этих метода, но нахера они — пока в башке не отложилось, запутался сильно.
>конструктор, деструктор, public-private, virtual и только
>сложно
Что же будет когда ты до логических конструкций дойдёшь...
Слева вроде бы конструктор по умолчанию: переменные не инициализируются и выводятся те значения, которые записаны в конструкторе. А справа наоборот: в конструкторе нет значений, но они даются уже в объекте. А какая разница то? Где мне может понадобиться первый вариант, а где второй? Просто не понимаю, зачем мне эта информация.
Да, у меня совсем нет способностей в программировании, но и в универе хочу доучиться, и понять базу С++ для себя. А так, может, найду себя в чем-нибудь попроще веб-макака, 3d. Усугубляется проблема тем, что мне не хватает практики. До ООП я изучал С++ по курсу на Степике, и информация хорошо отложилась, проблем совсем не было. До курса я изучал так же, как сейчас, и у меня были проблемы. Но ООП курс не затрагивал, поэтому его я изучаю по сайтам:
http://cppstudio.com/cat/274/
https://purecodecpp.com/
Канал SimpleCode на Ютубе
И опять сталкиваюсь со старой проблемой: информация быстро забывается, не закрепляется, т.к нет практики. В курсе я писал программы, которые проверял преподаватель, мог спросить у него, что я сделал не так, получить помощь. Сейчас я придумываю задачи сам себе. А когда у меня что-то не получается — а у меня всегда что-то не получается — я начинаю простаивать. В лучшем случае мне смогут помочь на Cyberforum
Может, есть какие-то советы, как практику получать, чтобы всё не забывалось и не путалось в башке? Если просто читать, смотреть, а самому либо не кодить, либо просто повторять то же самое, что в примерах — то будет как у меня: хуёво. А как нормально?
>В лучшем случае мне смогут помочь на Cyberforum
Если тебе на нем могут помочь, то тебе уже ничего не поможет.
>Может, есть какие-то советы, как практику получать
Пиши код.
>Пиши код.
И только. Причём не всякую хуйню вроде игрищ с i-o в cli а придумать что-нибудь крупное и работать над этим. Тебе не нужна жирная теория, базу выучил - начинаешь писать. Поначалу будет хуйня получаться, не будет компилиться, память потечёт. Ты должен учиться искать информацию, гуглить, читать референс, даже сорсы хедеров иногда. Стак и прочие форумы нужны только в рид онли моде, абсолютно всё, с чем ты столкнёшься - уже было решено до тебя. И самое главное, анон, и это не касается только прогерства, помни главное: не ешь жёлтый снег ты должен всегда и во всём стремиться прыгнуть выше головы.
Лол, вот почему так всегда? Честно, анончик, я искренне и продолжительно насосался, но только после гневного поста понял, что когда в байтиках попадается ненулевой sign бит, при конвертации uint64 он заполняет единицами весь остальной bitwise or.
>почему так всегда?
Потому что только встав с колен после киберунижения от конпелятора и дебаггера ты обретешь крылья.
не, я уже сам себе ответил, на res похуй, он и так на всю свою ширину сдвигается за левый край экрана в итоге
>Кто не читал спецификацию вообще не могут крестовиками считаться, они просто сишники, пишущие процедуры с классами.
А ну-ка, синьор-помидор, вот тебе вопрос: верно ли утверждение "чисто виртуальная функция - это виртуальная функция у которой нет тела"?
Салтовка-кум
Верно?
>Чтобы ответить на этот вопрос никакой спецификации читать не нужно.
Так ответь, чо ты как не синьор, а как трейни позорный
На всё воля Силы
Ты сегфолт пофиксил, селкат немытый?
Там жыросиськи второго размера и борода
Вопрос: почему? Ведь функции-фабрики можно для удобства по-разному назвать. Если такая фабрика бросит исключение (например, при попытке получения какого-нибудь ресурса) это исключение возникнет в функции-фабрике, а не в конструкторе, и его можно будет спокойно обработать.
Код для примера
https://0bin.net/paste/MZZRUmdk#dk7zaNNiLH4cyhJbelE9OGm0K3WuFmgqg+JQnPoRbFk
Где подводные?
> Где подводные?
В оптимизациях. Изобретаешь велосипед вместо конструкций языка - отсекаешь возможность оптимизаций.
>Ведь функции-фабрики можно для удобства по-разному назвать.
+15 строчек в документации.
>Где подводные?
В написании дополнительного кода.
Причина? Отличия?
Таскать фабрику нужно будет вместе с объектом по всему коду. При этом тебе придётся закрыть часть конструкторов порезав интерфейс. Смысл есть только если Foo это ресурс, добываемый каким-то хитрым способом, о чём должна знать только фабрика. А ради исключение такой педалить точно не стоит.
Так никто внятно и не ответил
"Эксперды" ояебу
>>352457
>использование функций-фабрик
Надо идти от задач, а не слушать долбоебов. Named constructor позволяет:
1. вместо 10 разных Xynta::Xynta иметь нормально проименнованные Xynta::fromSosach, Xynta::fromForchong и т.д.
2. зафорсить аллоцирование объекта только на куче (в shared_ptr)
>Если такая фабрика бросит исключение (например, при попытке получения какого-нибудь ресурса) это исключение возникнет в функции-фабрике, а не в конструкторе, и его можно будет спокойно обработать.
Щито? По описанию похоже что ты не знаешь про function-try-block (https://en.cppreference.com/w/cpp/language/function-try-block --- просвящайся), хотя ловля эксепшонов в конструкторе нужна НУ ОЧЕ редко
>>352534
Двачую
Салтовка-кум
Вот куда ты из Си-треда сбежал.
Чухан.
Спокойно, я это все еще переделаю. Пока что функции addToArchive, extractFromArchive, removeFromArchive и listArchiveContents вызываются прямиком из мейна. Потом будет интерактивщина, чтоб один раз закешировав все Entry делать множество операций, и естественно я приду к другому интерфейсу. А пока я завернул это говно в Args. Правда, оно какого-то хуя не хочет работать с ranges::алгоритмами, хотя begin и end возвращает полноценные указатели. Хуй знает, чего ему в iterator_traits не хватает, заебался разбираться в логах.
Ебать, отдельные еще и методы iterateDrisnya. Сделай кастомный итератор и пронзи своим STL небеса!
Уже делал подобную пиздень на работе. Тогда придется очень много говна писать и на инпут, и на аутпут. Не хочу.
Я просто хуй его, как на pastebin несколько файлов залить. Ну, а это последнее почему бы и не скрином, тут же пара строчек.
Ты тупой и не можешь прочитать, что в стандарте написано про virtual функции may have and destructor must have?
>1. вместо 10 разных Xynta::Xynta иметь нормально проименнованные Xynta::fromSosach, Xynta::fromForchong и т.д.
Шаблоны нинужны, да. Ты наверное ещё в название меременных тип вписываешь, ка диды из Микрософта советовали.
А ты, конечно же, не слышал про именованные конструкторы и теперь пытаешься набрасывать паттерны на задачу, условия которой даже не озвучены
А вот если бы писал в ИДЕ, то она тебе бы сказала не писать такой хуйни как конструкторе или ифе. Кста, хули const нигде нет? На производительность кладешь хуй?
> >Интересно, как у нас hr зовут?
> А должно быть? Хз, какая-нибудь Алёна или Тимур?
Не, я имел в виду, что мне интересно какая у них должность по штатному.
Сейчас бы на плюсах писать ради производительности а не ради киберебли.
>Если тебе на нем могут помочь, то тебе уже ничего не поможет.
Почему? Хоть бы пояснил, а не многозначительно накинул дизморали. Если возникают проблемы, то можно создать тему там. Что не так?
В разрабы С++ я никогда и не метил, надо просто программу ВУЗа осилить
>>352105
Спасибо, вот тут годные советы, правда надо еще сообразить, что мне такое писать... Начну с того, чтобы писать лабы для универа
> базу выучил - начинаешь писать
Напоминает изучение программ для видеомонтажа или работы с графикой. Я, как гуманитарий, привык много теоретизировать и читать книжки. Со временем понял, что в случае кодинга этот метод — полное дно, но в полной мере не избавился от этой привычки
>Поначалу будет хуйня получаться
Я застрял на более ранних подводных: приходит в голову мысль, как что-то написать, а я не знаю, как это реализовать, что для этого использовать. Т.к даже непонятно, куда копать, чтобы что-то написать. Наверное, спрашивать тут, мб подскажут, куда копать, чтобы что-либо сделать. Например, недавно писал прогу по классам. Класс автомобиль и класс лошадь, у них какие-то свои параметры по типу скорости, массы. И мне нужно было, чтобы в отдельном классе "соревнование" они сравнивались по разным значениям. Я это реализовал через дружественные классы, но по заданию нужно было не так. Кстати, надо сейчас к этому вернуться. Может, мне нужно через наследование как-то? Надо разобраться и довести до конца дело
Ты няша ^_^
Нафига существует поток cin в С++, если им не возможно пользоваться? Нужно сделать простейшую вещь: сбросить как-нибудь этот поток, но нет, сделать это никак нельзя! cin.ignore() работает только, если в буфере есть символ '\n', которого там может и не оказаться, например, если пользователь ещё ничего не вводил. Проверить, пуст ли он тоже нельзя. В чем смысл всего этого, если приходится пользоваться getline? Причем всегда (я не могу придумать случай, когда это было бы полезно, кроме примитивных программок). Т.е. эта хрень cin вообще ни для чего не пригодна.
>>352887
Просто это как-то по-уродски. Есть поток, со своим буфером там, методов у него куча, оператор >> для него перегрузили создатели и т.д. Но пользоваться им нельзя, потому что при всем этом нет простейших средств для работы с ним. Т.е. все сводится к использованию getline(). Альтернатива: нормальная реализация, а не эта хрень. Зачем нужно копировать в строку с помощью getline() ? А потом из этой строки создавать stringstream. Это лишняя трата ресурсов, когда уже есть готовый поток. Да и выглядит это все неестественно.
Ты не понял, предложи альтернативу назвав имя уже существующей либо приложив полностью работающий код который решал бы описанные тобой проблемы и который работает хотя бы не многим хуже оригинала. Пока не можешь этого сделать - все твои визги не более чем ослиная моча.
ослиная моча тебе читать мешает: проблема с вводом успешно решается с помощью getline. Далее stringstream или функции работы со строками (C-style или string).
>Далее stringstream или функции работы со строками (C-style или string).
Ты не понял, я сказал "хоты бы немногим хуже оригинала".
При чем тут альтернативы и код? Недостатки есть, и они объективные. Зачем передергивать?
>Комьюнити говно
В чем это проявляется? Мне там помогали пару раз уже. До этого задавал вопросы на stackoverflow. Мне в принципе без разницы, где их задавать, отвечают везде
>Моча говно
Возможно, частое явление на пидорашьих форумах, где могут забанить даже за мат
>Рейтинги
Какие рейтинги?
>MyStruct s = MyStruct{1,2};
Нужно ли предварительно выделять (и, соответственно, освобождать) память, например, malloc-ом?
И еще вопрос, если я например переприсвою значение этой переменной, кинув в нее новую структуру того же типа, куда денется память, которую занимала старая - значение в ней перезапишется, рантайм/ОС как-то высвободит ее или она будет болтаться где-то (грубо говоря, произойдет утечка памяти)?
В таком виде структура создаётся тупо на стеке, и выделять/освобождать память не нужно. При присвоении перезаписывается значение. Это всё равно что работать с примитивами наподобие int или double.
Если ты джавист, то никаких подводных, будешь жрать говно как и раньше.
Когда в Сирии или на Украине дроны крошат людей я знаю что приложил к этому клавиатуру. Приходится как-то с этим жить. Это тебе не сайтики клепать.
>Какие подводные?
никаких
наконец то сможешь просто загружать-выгружать классы из динамически загружаемых модулей, а не городить подобия COM на структурах с указателями на функции
Когда нейросети обнулят всех прогеров я буду знать, что лично приложил к этому руку и лично мне будет похуй.
>С чего начать вкат в системное программирование не линупсе?
начать нужно с оценки доступных ресурсов
как минимум нужно иметь 2 квартиры: одну сдаешь, во второй живешь и 20 лет изучаешь это самое системное программирование, через это время может быть сможешь сделать что то полезное
Ого, аж с экрана потекло.
> В таком виде структура создаётся тупо на стеке, и выделять/освобождать память не нужно. При присвоении перезаписывается значение. Это всё равно что работать с примитивами наподобие int или double.
А если я передам в другую функцию указатель на созданную таким образом структуру? Она продолжит существование или умрет, когда завершится первая функция, в которой она (структура) была создана?
Умрёт, когда завершится первая.
Но если создашь объект через new или malloc(), будет жить, пока не вызовешь delete/free().
Т.е. если я хочу из функции вернуть структуру, надо вызывать new или аллоцировать память? Просто
>return MyStruct{1,2};
Делать нельзя?
Или возвращенное значение (структура) будет в стеке вызывающей функции?
Можно, структура целиком скопируется.
Двумя скобками в конце
В данном конкретном случае () это most vexing parse.
>Как вкатиться в дронов для военки?
Можешь попробовать связаться с Аеророзвідкой, но пишут что там итак слишком много народу
Первое это объявление переменной, второе функции
Кароч, есть самые простые эмуляторы терминала? чтобы:
- дохулион цветов
- можно менять размеры окна, в том числе на весь экран
- реалтайм-рендер
- поддержка юникода и шрифты ttf
- не пердело на холодильниках
- либа была в стиле header only, а не этом ебаном стиле "навалить говна и побольше" (я может в код поковыряю, да и не хочу ебаться с компиляциями, хочу кинуть себе в проект и чтобы работало)
Можно было бы и самому на opengl - но это вечная боль - вывод текста в opengl... Зачем велосипедить..
Вместо боли с выаодом текста ты получишь боль с вообще всем.
Байтодроч в обработке изображений. Всякие хитрые фильтры, LAGC например для 16 битных равок с тепловизора. Дружить с плисоводами.
Тебе нужна поддержка ANSI X3.64 and Xterm 256.
Например, в ConEmu
https://conemu.github.io/en/AnsiEscapeCodes.html
Ну как. Меня по факту брали по знакомству, но я того стою. Программирую ещё на питоне, шарпе, жопаскрипте, пишу свои дсл и компиляторы.
Фантазии о 20ке, если МРОТ нынче ~14к.
Указатель на объект. То есть я добавляю объект в контейнер, затем беру указатель на этот объект (не итератор), и сохраняю его в другой переменной.
Теперь я хочу чтобы минимум при вставке или удалении каких-либо других объектов в этом контейнере эти указатели все еще были валидны, то есть контейнер не должен перераспределять память (ну конечно же указатели на удаленные объекты мне уже не нужны)
Мне не важно время доступа к элементу или порядок их хранения в памяти (можно хоть по всей памяти)
Конечно же вставка-удаление хотелось бы за O(1), но тоже не критично.
Я думаю что возможно std::list, но не уверен
TCP только строки передавать может, так что это единственный правильный вариарт.
> преобразования этого всего в строку
В чём проблема байты отправлять? Или у вас байтоёбство запрещено? Строки же это пиздец как медленно.
Полная хуйня. По спецификации эти выражения эквивалентны и не могут разный код генерировать, в обоих случаях там xvalue, никакого prvalue там нет. Вот таких чуханов, в глаза не видевших спецификацию, наслушаются, а потом пишут нечитаемый код-лапшу с багами.
Он в яндексе еще работает, лол
> xvalue
Тогда может до 11 стандарта было именно так, как он говорит?
Хочешь сказать он про C++98 рассказывает? Но компилятор из 2022 года в любом случае это оптимизирует даже с О0. Хуйню пиздит в любом случае.
Тебе подойдёт list, map, unordered_map. И не подойдёт vector, array, deque.
>Полная хуйня. По спецификации эти выражения эквивалентны и не могут разный код генерировать
Че?
>>354501
>Это правда??
Бля, а проверить самому?
https://godbolt.org/z/aWGq3GKKM
Внутри создастся еще один объект (a+b) - тут создается. *this = (a+b) -- тут скопируется
Так что да, он прав
> а проверить самому
Что за хуйню ты написал? У тебя же совсем две разные реализации, естественно они работают по разному. Переопределением ты можешь что угодно накостылять. А дэфолтные операторы так никогда не будут работать.
Ты долбоеб?
Какие дефолтные операторы, сука?
У тебя есть operator +. Ты, сын шлюхи, через него пишешь +=. Но. Оператор + возвращает не ссылку, а объект. Поэтому когда у тебя += пишется через +, то объект все равно создастся. Про это и говорит чел в видео.
Про move-семантику никогда не слышали, да? Серьёзно на C++98 пишете код? Это просто кринж. Если уж взялся писать свой оператор вместо стандартного, то пиши по человечески, а не говнокод.
Аноны помогите. VS сошла с ума.
Дело в том, что перестала видеть вызовы функций в CPP файле. VS выдает ошибку компиляции E0020. Хотя функция находится в том же CPP файле. До этого были глюки в ЗАГОЛОВКЕ где сигнатуры подчеркивались зеленым, но в итоге код компилировался, а теперь это зашло слишком далеко. Реквестирую помощь.
Ты долбоеб?
Причем тут move-семантика?
Ты понимаешь, что в видео чел объясняет, что нельзя писать += через +, а вот + через += можно
Допустим у тебя там мув семантика. Но ты все равно создаешь объект, а создаешь ты его через + и как же ты его, долбоеб, сделаешь через move?
двачую адеквата
Пикрилейтед. Пусть пиздует читать спецификацию, а не изобретать свой язык на ходу.
Ты не Русский? Не шаришь про контекст который он говорит. У вас с другим аноном испорченный телефон получается.
А какой контекст? Абсолютно вымышленный пример, не имеющий ничего общего с реальной реализацией этих операторов? Я тоже могу сделать из оператора сложения вычитание и говорить потом что складывать надо минусом, а не плюсом, потому что я так захотел. А факт в том что в реальном С++ эти операторы обязаны иметь одинаковое поведение, за исключением когда объект присваивания сам временный и может быть оптимизирован. Ну и как писалось выше, move и был придуман чтоб не копировать переменные лишний раз. Заканчивайте уже, сейчас зайдёт кто-нибудь из растотреда и засмеёт нахуй всех нас за копирование переменных.
Ты балбес?
Ты заменил один конструктор (для которого есть принт) на конструктор для которого нет принта. Типа закрыл глазки и ничего там не создается. Крутааа
>А какой контекст? Абсолютно вымышленный пример, не имеющий ничего общего с реальной реализацией этих операторов?
Вот именно. Речь про велосепидирование всего что видишь. Особый путь дегенерации.
Я тебе уже ответил что препод прав. Но перед этим тебе какой-то дебыч проорал что-то. Препод прав. Тема закрыта. Вопросы?
Никаких. Ты зайка. Чмок тебя в лобик
> на конструктор для которого нет принта
Ты ёбнулся? Где ты там увидел вызов конструктора? Уноси своего долбаёба, неумеющего складывать числа.
Пробовал, но это было давно. А так параллельно со Страуструпом читать довольно хорошо помогало в некоторых темах. Сейчас год не писал на плюсах, хочу знания освежить прежде чем камбек делать.
Если есть получше IDE то поделись. Дело было во мне. Забыл добавить Class:: перед определением фунции как лошара последний.
Всё вкусовщина, забей. Дохуя людей знаю которые в итоге тупо в вим переехали и ни о чём не жалеют.
Clion имхо получше, и ворочается быстрее. Еще нравится QtCreator, но эти пидоры забанили скачивание для России.
> показываете пример
https://godbolt.org/z/f47zzrb6d
Держи, никаких созданий объекта, никаких лишних вызовов конструктора. С -O1 там вообще одна инструкция add. Схуяли мне кто-то там будет запрещать писать += через +? В Си-тред с такой шизой идите.
>Как в языке происходит работа с хардварью?
Апишки\асминлайны если их не вырезали еще, язык не может в лоулвл взаимодействие.
Ты долбоеб. Ты просто конченный хуесос
Я в ахуе
Ты. Чтобы доказать что-то написал такой шмат говна, что любой адекватный человек захотел бы выброситься из окна
Foo& operator=(Foo&& oth) {
return oth;
}
Реально? С ебалом все хорошо? А мать живая? Оператор присваивания будет возвращать ссылку. И ничего не присваивать. Гениально нахуй
А оператор + будет тоже возвращать ссылку.
И теперь давай напишем F(a, a+b); и сходим нахуй
Потому что какой-то говноед решил что так будет правильно и никто ему ничего не запретит
Ты наглухо отбитый долбоеб. Просто нахуй иди
Ты поменял местами правильный вариант попутно разъебав всюлогику, чтобы доказать, что изначально ты не ошибся.
Признай что ты сын шлюхи и выйди в окно
> Реально?
Это называется move-присваивание. Ты первый день с крестами знаком?
> И теперь давай напишем
Пиши move-конструктор сначала или оборачивай в std::move так же, наркоман. Ты сам поставил ебанутую задачу, получай соответствующее решение. И нехуй тут вилять жопой, условия задачи выполнены, с другими требованиями ты следуешь нахуй.
Какое move присваивание, сын шлюхи?
Где у тебя присванивание, хуесос?
В move конструкторе идет мув членов класса. Где он у тебя, долбоеб?
>условия задачи выполнены
Охуенно.
Открой буст, сука, открой stl, открой любую нормальную либу. Попробуй найти там хоть один оператор =, который возвращает ссылку. Ты не сможешь, хуесос. А знаешь почему? Потому что так никто не делает. У тебя оператор присванивания портит объект. Напиши просто a+b; Это валидно с точки зрения синтаксиса. И это не должно изменять а. А у тебя меняет. И все потому что твоя мать плотно сидела на герыче во время беременности.
Ожидаемо, абстракция над машиной запрещает (не может разрешить) полное использование всех ее возможностей, из-за этого образуются абстрактные решения в языках, в виде неопределенного поведения и неуточненного поведения.
А как тогда инлайн асмр решает эту проблему если запускается всё в той же абстракции над машиной?
> move конструкторе идет мув членов класса
Дегенерат, не путай конструктор с присваиванием.
https://en.cppreference.com/w/cpp/language/move_assignment
> Ты не сможешь
Потому что никто в здравом уме не будет через переопределённое сложение переопределять +=. Это же твой ебучий говнокодер из Яндекса такую хуйню из пальца высосал.
> a+b
Долбаёб, результат этой операции - rvalue. Чтобы его куда-то впихнуть тебе надо создать move-конструктором нормальный lvalue-объект, либо сконвертировать его через std::move. Сам объект там ничего не меняет, ты впервые ссылки видишь что ли?
Сложно и звучит как какой-нибудь блекхэт.
>Дегенерат, не путай конструктор с присваиванием.
По твоей ссылке
A& operator=(A&& other)
{
s = std::move(other.s);
std::cout << "move assigned\n";
return *this;
}
У тебя где мув члена класса? Где, хуесос?
>Чтобы его куда-то впихнуть тебе надо создать move-конструктором нормальный lvalue-объект
Я просто хочу его впихнуть в твою мертвую мать
Ее на земле нет. Поэтому делаю это просто вот так https://godbolt.org/z/nfbjdGoWs
Значение a.x изменилось. ЧТО С ЕБАЛОМ, хуесос?
> По твоей ссылке
Чухан, глаза протри. Это просто второй объект перемещается в первый.
> ЧТО С ЕБАЛОМ
Нихуя ты как приложил. Только ты приложил не меня. В оригинальном коде такая же хуйня. Спроси вот у этого хуесоса что с его кодом >>354562
https://godbolt.org/z/9b44PMf1h
Я надеюсь это не ты его писал? Будет просто орево тогда.
https://godbolt.org/z/d5drnsa4q
Окей, долбоеб. Вот тебе твое мув-присваивание. Почему а не меняется?
А мне похуй чья это ошибка? Твой охуенный код для а меняет значение. Задачу ты не выполнил. Так что твоя дорога прямо нахуй и в окно
> Почему а не меняется?
А схуяли должен? std::move принимает rvalue, идиотина. А "b" у тебя lvalue. Для копирования "b" в "а" тебе надо конструктор копирования определить:
Foo& operator=(Foo& oth) =default;
Это тебе не раст, чтоб ты мог вот так переменную переместить. Ты же понимаешь, что после того что ты пытаешься сделать b должна стать инвалидной? Ты точно кресты не первый раз видишь?
А потом жмёшь на компиляцию и тебе высерает что не может определить тип где-то в кишках STL. И начинаешь перебирать этот кал в поисках что не так.
Концепты перед auto
>>354929
>Макросы для быдла и сишников.
>>354933
>Хуя дэбил
Чел прав объективно, любое юзание макросов кроме как для разн версий платформ - хуйня
>>354903
struct a { a(int p1, int p2 = 42){} };
Поля инициализированы все после конструктора. Если нужно именно рациональное, а не дефолтн значение - std::optional, так и поля сделать можно "неинициализированными" и проверять с помощью has_value()
>>354848
move принимает не rvalue
>>354766
ну и здец, noop присваивание, мутирующий +
Избегать лишних выделений памяти, копирования (юзать move, передавать по ссылке), меньше индирекции (доступ нанапрямую, а не через цепь указателей), нормальное выравнивание (? вроде же можно делать упакованные структуры, с битами итп, хз в спп или ток си, это сто проц медленней обычн представления), максимально переносить вычисления на компайл тайм (вместо рантаймы, т.е. constexpr например), комптайм полиморфизм > рантаймового, оптимизировать на локальность доступов к памяти (например юзать массив (последовательный кусок памяти) вместо связных списков), ! использовать алгоритмы и структуры данных под задачи, включать оптимизации, fast-math, избегать простоя (типо ожидание ввода, решение - корутины), распараллеливать прогу, юзать статическую линковку вместо динамической, gpgpu, понимать оптимизации компилятора и как не мешать ему...
Я немного в ахуе
Ты же сам долбоеб скинул ссылку на move-assing (https://en.cppreference.com/w/cpp/language/move_assignment)
Давай, даун, возьмем код оттуда. Уберем (как у тебя) конструкторы. И оставим только operator=.
И смотри
https://godbolt.org/z/683sqxcqb
Магия. Магия!!!!
Бездарный долбоеб
Ты даже не можешь глянуть что находится в ссылке, которую ты, хуесос, сам и постишь
ну типа такого
struct ResourceDataRef
{
ResourceData* ptr;
};
struct ResourceMgr
{
ResourceDataRef Add();
std::list<ResourceData> data;
};
Да
>>354539
>>354545
>>354554
Ебать сколько говнокодеров, которые не могут даже проверить
https://godbolt.org/z/3TWe8x5T4
>>354566
>>354572
> дэфолтные операторы так никогда не будут работать.
Он блядь не говорит про дефолтные. Он говорит что нельзя писать this = this + value; при чем тут блядь дефолтные?
Он говорит про перегрузку
>Про move-семантику никогда не слышали, да?
Сука, при чем тут move семантика? Просто есть дауны которые пишут в перегрузке операторв:
return this = this OP value;
Тут никакая move сементика не спасет от лишнего присваивания и лишнего вызова перегрузки оператора. Смотри мой код >>355010
Конечно компилятор может подумать что ты даун и убрать... А может и не убрать.
Бля... какие же вы долбоебы... Я ебу, и такие вот пишут код?
Да вы даже интерфейс godbolt не осили.
Вам же блядь прямо в окне подсвечивает - какие строчки будут выброшены компилятором, а какие уйдут в код... Бля, одна инструкция... Бля.
>>354766
>там вообще одна инструкция add
Какая нахуй одна, если там вызов конструктора копирования?
Эта перегрузка в принципе не должна вызывать никаких конструкторов.
Ты траллишь тупостью что ли, почему на скринах какой-то левый код? Нахуя ты написал другой код и сам с собой споришь, дебил? Я тебе даже картинку нарисовал, тупая ты хуесосина.
в магазине имеется ассортимент из n флешек. о каждой флешке заданы сведения:название, объëм памяти, цена. напишите функцию, которая возвращает название и цену самой дешевой флешки
Ну создай объект флешка. Создай ему геттеры, которые возвращают его цену и название. Создай вектор флешек, заполни его. Напиши функцию, которая принимает ссылку на вектор, перебирает его и возвращает новый объект флешка (очевидно, потому что два значения возвращать в плюсах нельзя.)
Шлёшь условие нахуй и маппишь цены с названиями, профит.
1280x720, 1:21
Сначала я стал использовать QMap<QString, MyStruct>, но оказалось, что он сортирует только по key и только по алфавитному порядку, что мне не подходит. Потом попробовал QVector<QPair<QString, MyStruct>>, но из него брать содержимое геморно, приходится перебирать весь вектор, хотя его вроде отсортировать можно.
Что делать? Существуют ли вообще такой контейнер типа QMap, но который можно отсортировать по value?
> Q
Мы не понимаем на петушином. Попробуй использовать что-то, где нет этой буквы в названии.
Хотя бы три буквы std должны быть там. Если не такой как все, то boost.
Даже элетрон лучше того кала, xml + стили — очень хорошее решение для быстрого и красивого интерфейса, а для производительности wasm есть. Qt — просто самая отвратительная либа для крестов, изобретающая велосипед везде, куда смогла дотянуться.
Давай своё экспертное мнение насчёт QML
Ну подставь вместо "Q" "std::". Та же хуйня, тот же вопрос. Как сделать то? Я пробовал гуглить, там кроме вектора с парой внутри ничего не предлагают. А мне че то не хочется такую конструкцию юзать, как то уродливо выглядит.
https://en.cppreference.com/w/cpp/container/map
третий шаблонный параметр - компаратор
передай в него лямбду которая нужным образом сравнивает объекты
Я пробовал, не получилось. Ругается, что не определен operator-. Пока не разобрался, хули ему сдался этот минус.
И я вообще не уверен, что мапа отсортируется по value. Мне кажется, этот компаратор подействует только на сортировку по key. Ну то есть map он итак по дефолту сортируется по key, просто ты дефолтный компаратор заменяешь своим.
Т.е. на петушином ты всё-таки понимаешь?
если ты помнишь теорию реляционных баз данных что в вузике учил, то поймешь что для решения этой задачи нужно сделать 2 структуры поиска, если бы это была табличка в субд то ты навесил бы на ее 2 индекса, главный и вторичный
ну а как сделать похожее на крестах для структуры в оперативной памяти, сам уже сообразишь, надеюсь
скорее ему надо boost.bimap
а вручную это обычно делалось через 2 мапы: std::map<X,Y> и a std::map<Y,X>
> в вузике учил
Чё бля?
> 2 структуры поиска, если бы это была табличка в субд то ты навесил бы на ее 2 индекса, главный и вторичный
Это чё такое-то вообще?
А как эти две мапы синхронизировать?
потому что ты долбоеб, внимательно посмотри на operator+() - тебя за такое в продакшене кастрируют. Потому что этот оператор должен быть константным. Нахуя ты модифициуешь сам класс в нем?
То есть ты в принципе всю логику написал неправильно (попробуй написать Foo c = a + b и посмотри что будет в a.
Из этого ты нахуя-то полез в мове-семантику, и дрочишь на единорожный асемблер в вакууме, забывая что компилятор не везде сможет так оптимизировать
И все это ради того чтобы не писать правильно operator+=().
Повторю, если писать operator+=() правильно, то никакие move не нужны, там в принципе нет никакого выделения памяти. И не должно ничего выделяться.
Память выделяется, если ты шизоуебан, пишешь this=this+value. И вот это уебанское решение ты подпер своим костылем move.
Соси хуй, дегрод. Я не менял поведение оригинального кода, на этом вопрос закрыт. И не должен был, задача была оптимизировать создание временного объекта - это сделано.
> если писать operator+=() правильно
Спроси у того питуха из Яндекса почему он решил не писать его правильно, а переопределять через переопределённый operator+. До меня-то ты нахуй доебался, шакал? Естественно со стандартным operator+ это всё пишется без костылей и временных объектов.
> Память выделяется, если ты шизоуебан, пишешь this=this+value.
Уебан, она выделяется при возврате результата этого выражения из метода, а не от наличия этого выражения. У тебя rvalue кастуется в lvalue через вызов конструктора, мудила. Если ты сам пишешь некорректный код с созданием временного объекта вместо явного запрета делать это, то это проблемы твоего говнокода.
>Спроси у того питуха из Яндекса почему он решил не писать его правильно, а переопределять через переопределённый operator+.
Ты долбоеб? Он говорит, что так делать не стоит именно из-за создания объекта
operator+ можем быть определен через +=
Но += не можем быть определено через operator+
И объясняет почему. Конец блять. Вы из какого-то видоса для школьников/студентов развели пиздец какой срач. Причем в видосе все и объяснено
>>355563
Чел, ну хватит уже троллить двачь. Если бы ты и правда был таким дегенератом как пытаешься показать, то не смог бы капчу ввести.
>rvalue кастуется в lvalue через вызов конструктора
тут перетолстил уже
1) Я правильно понял, что при смерти сокета другой компьютер не узнает о том, что сессия всё и будет по таймауту отрубаться?
2) Если я сделаю connect к тому же ip/порту к которому уже подключился, то мне вернётся копия сокета? И теперь если я буду писать парллельно в них, то данняе перемешаются?
А вообще мне нужно отправлять пакеты, но с подтверждением доставки. Если подскажете как это правильно делать, то буду рад
>А вообще мне нужно отправлять пакеты, но с подтверждением доставки
- Клиент: Привет!
- Сервер: Привет!
- Клиент: Вот тебе данные: "КАКОЙ-ТО БОЛЬШОЙ КУСОК ДАННЫХ", а вот их хэш: 0x12345678.
- Сервер: Принял данные, а вот их хэш: 0x12345678.
...
- Клиент: Пока!
Т говоришь юзать udp? Но там же 100500 нюансов. Я заебусь писать это всё так, чтобы оно везде хорошо и быстро работало. А еще файлы через udp одним паке ом не отправить
Ну тогда у меня остаются те же вопросы. Как одновременная отправка нескольких пакетов одному компьютеру будет происходить? Оно вообще будет работать?
>Как одновременная отправка нескольких пакетов одному компьютеру будет происходить?
Очередь произойдет.
>Оно вообще будет работать?
Работает же.
И даже если считать, что пока выполняется один read второй ждет, всё равно им нужно иметь разные потоки, чтобы порядок был сохранён и каждый считал своё
Перезаписывая партиями байт, размер партии к сожалению подбирается только экспериментально, слишком много нюансов.
Блоки по 512 байт, это я тар архиватор пишу. Просто думаю как сделать удаление файлов максимально оптимальным.
Умница, теперь начинай готовиться к блокировке интернета и выкачивай СО. После можешь перфокарты начать скупать.
> в лучшем случае
Ты сам ответил, есть лучшие случае, есть худшие, есть средние, алгоритмы не учил чтоле?
Я то учил, а вот у тебя с логикой проблемы конкретные.
А из std::map можно брать key по value?
Сразу к респауну приготовился? Тоже неплохо, молодец.
Нет.
Я не хочу ничего ограничивать. Я пытаюсь понять проебался ли я где-нибудь в коде или нет.
Посмотри на файловые менеджеры и менеджеры процессов, посмотри сколько они потребляют ресурсов, посмотри сколько потребляет твоя программа, если больше и логика обработки данных небольшая, то ты проебался. Если программа однопоточная, то забей на потребление времени.
Может есть способ выйти из функции при этом сразу зайти в другую при выходе.
А то заебало флаги городить и проверять.
И я не пойму что такое callback функция
Вынести множество вложенных циклов в отдельную функцию и делать return?
Доброго дня, аноны! Я в проге новенький, поясните, можно ли так делать? Из функции снова вызывать эту же функцию снова. А то goto - это очень дурной тон, насколько я знаю, но иных вариантов прекращения выполнения функции (или передачи управления предыдущей функции) в центре кода я не знаю.
>Из функции снова вызывать эту же функцию снова.
Рекурсия.
>А то goto
Лучше готу, чем рекурсия.
Касательно рекурсии такой вопрос: если я 10 раз введу данные неправильно и 10 раз вызову функцию саму из себя - чем это чревато? Жор памяти?
Да, жор памяти, сделай цикл и булеву переменную о том что данные не правильно введены.
Когда ты вызвал функцию считывающюю и проверяющую правильность данных она должна эту булеву переменную пометить, типо если правильно, то тру, а если не правильно то фолс. Патом когда программа из функции выходит, то цикл проверяет булеву переменную, если она тру то выходит из цикла, а если фолсе то опять функцию вызывает. Ну или сделай что бы функция не флажок меняла, а возвращала значение true или false, в результат от правильности или не правильности ввода данных. И помести в while(!имя_функции());
Спасибо, пойду мозговать.
Создай раздачу пожалуйства. Много интересного.
Препод сказал что Concurrency in Action это не оч.
А если я сделаю функцию типа Int, по центру кода сделаю проверку условия, и при выполнении этого условия буду вызывать return xxx - правильно я понимаю, что return завершает выполнение этой функции, и сколько там кода дальше написано - не важно?
Как же хочется pip install и всё. Было бы расширение норамльное для vs, так нет. Только для 17 и 19 версии
Или как на linux
Спасибо
Вообще это нестандартный тип, из posix, он может как быть, так и не быть.
Про using даже Мейерс писал, маня.
Спасибо
Бамп
Чел, так там и написано что он говорит, буквально слово в слово. Пиздуй учить английский, лол.
> на видосе говорит "не эквивалентные выражения"
> в спецификации "expression is equivalent"
Действительно, слово в слово.
Чел, не включай дурку, хуй на видео говорит о том что в одном случае E1 эвалюируется единожды, в другом - дважды (без оптимизаций).
Всегда по значению, всё в кешлайне бесплатное. Но могут быть варианты в зависимости от того откуда ты эту структуру взял, может быть эффективнее переместить её в метод.
Зависит от твоей емкости и готовности принимать еще и еще.
https://pastebin.com/8t47Pw3k
https://pastebin.com/KRdzbPfk
https://pastebin.com/AB6G10H9
https://pastebin.com/DDjKwF4N
Ну и пиздец же. Алсо, советую переменные называть одной буквой, тогда вообще никто нихуя не поймёт в этой лапше ифов.
Сыш, ты бы меня, гигачеда, вживую увидел, у тебя бы голос задрожжал, а твоя тян сама попросилась бы ко мне в Москвич.
>>356585
Если ты про test.cc, то это чисто для проверки работоспособности бэкенд части, я еще нормальную программулину на ncurses планирую сделать. Или ты про лесенки в archive.cc без фигурных скобок? Алсо, главной проблемой считаю наличие лютого хардкода с отрицательными оффсетами, в нескольких методах сразу. Это надо как-то капсулировать. Ну и в принципе sync-методы у меня разраслилсь маленько, надо рефакторить. Алсо, я забыл почистить deletedFolders после синка.
>>356598
Закину как-нибудь.
Ошибаешься. Что я, что моя несуществующая тян класть на тебя хотели.
Да. Но я уже пофиксил - удалил проблемный, создал новый файл с таким же именем, скопипастил содержимое старого и оно собралось. Что за параша?
Ну например символы кириллицы в названии - с вместо c.
Формат файла лучше описать таблицей, текст долго воспринимается. Формат файла говно.
В чем фикс заключается?
>>356911
Ой бля, мне эти std::tri(std::chetire(std::ja), std::pidoras) на работе хватает, дай пообщаться с любимой STL-ечкой на ты. Спасибо, что напомнил, кста. Я там в паре мест по привычке написал std::string. ПОЙДУ-КА ИСПРАВЛЮ И УБЕРУ ЭТОТ НАХУЙ НЕНУЖНЫЙ ПРЕФИКС ВО ВСЕХ МЕСТАХ, ДО КОТОРЫХ ДОТЯНУСЬ. И ШО ТЫ МНЕ ТЕПЕРЬ СДЕЛАЕШЬ? А??? А???????
Вообще, я думал забить хуй и тупо хранить список пасов со слешами в конце, и тупо строить по ним рантайм-дерево, чтоб в таком же виде отсериализовать обратно. Но это я сейчас все дерево кеширую, а идея в том, чтоб обмазаться паттернами и усовершенствовать это все в будущем, чтоб как-то кусками подгружалось. Максимально жадно. Хотя, можно просто сплошных буферов со своими кастомными вьюхами наделать, уже экономнее выйдет, чем все эти векторы со стрингами.
>В спойлере.
Пиздец, охуенно пофиксил, прям сразу эффект появился.
>неопределенный порядок байт
Вообще-то, fileutils.hh как раз конвертирует endianness.
>неопределенная кодировка имен файлов
Похуй, главное чтоб нуль-терминатор был. Остальное - забота фронтенда. По той же причине я не проверяю на дубликаты имен, потому что archive.hh и поиск по имени не предлагает, а лишь дает итерироваться. Хочешь одноименными файлами и папками срать на одном уровне - сам менеджи как хочешь.
>избыточное потребление памяти на формате
Это да, особенно в моем примере. Я решил на абсолютных оффсетах в сегмент данных не экономить, чтоб хоть терабайт паковать, но можно какой-то бит придумать, чтоб оно кондишенали работало. Это все еще пересмотрю.
Да там с первой строчки говно какое-то. Нахуя static и лишняя нелинейность кода? Зачем constexpr, если оно никогда не выполняется во время компиляции? Буквально каждую строчку надо переписывать, не говоря уже про то что написано как будто сишником.
>Зачем constexpr, если оно никогда не выполняется во время компиляции?
Я там в одном месте numFolders=0 передаю.
>не говоря уже про то что написано как будто сишником
Так и есть. Хотя, я иногда пытаюсь в функциональный стиль.
>fileutils.hh как раз конвертирует endianness.
https://github.com/VimDefecator/archiver/blob/6ac9514a1854051295baf9d7b453dabf12144b84/fileutils.hh#L15
https://github.com/VimDefecator/archiver/blob/6ac9514a1854051295baf9d7b453dabf12144b84/fileutils.hh#L28
Вот это? Где тут определенность? Он из машинной преобразует в альтернативную, в итоге образуется неопределенность.
>Остальное - забота фронтенда.
Переносимость между системами нулевая, в одной может быть ютф-8 кодировка для имен, в другой ютф-16 и т. д.. Узнать в какой кодировке было исходное имя очень сложно.
>Вот это? Где тут определенность? Он из машинной преобразует в альтернативную, в итоге образуется неопределенность.
Все там нормально. convertEndianness всегда ставит в соответствие least significant byte с последним адресом. На big endian машине вернет без изменений, на little endian - вернет задом-наперед. То есть после сериализации всегда получится big endian, а после десериализации - по архитектуре.
>Переносимость между системами нулевая, в одной может быть ютф-8 кодировка для имен, в другой ютф-16 и т. д.. Узнать в какой кодировке было исходное имя очень сложно.
Это да, надо как минимум создать для фронтенда геттер-сеттер ендпоинт для дополнительной секции, которая всегда пишется в архив, чтоб продвинутый фронтенд умел в такую переносимость. Мой test.cc не в счет вообще.
>convertEndianness всегда ставит в соответствие least significant byte с последним адресом
Он просто переворачивает порядок байт.
Нет. Ты переоцениваешь свое умение "видеть" семантику кода за полсекунды.
> всегда ставит в соответствие least significant byte
Ставил бы, если бы ты кастанул правильно. А в твоём варианте просто переворачивает. А вообще у тебя в STL есть платформонезависимый конвертер, нахуй ты велосипед изобретаешь.
Спасибо, установилось
Не понял. Но про STL посмотрю, не знал, что оно там есть.
И еще хочется уметь в зависимости от данных, которые пришли дергать B. Мне делать коллбеки вверх по иерархии?
да после ретурна уже ничего не важно
> А как адекватно взаимодействовать между B и C.
Это уже по умолчанию не адекватно. Если С - низкоуровневая работа с сеть, а А - абстракция над ней, то В не должно вообще знать о существовании С. Отправляй из А в С данные, которые нужны С.
>>357085
> коллбеки
Лучше не надо, кидай лямбды как параметр функции. А ещё лучше корутины используй. Но для работы с сетью, опять же, лучше передавать данные куда надо, а не код.
A вообще занимается всем по сути. Это такой главный объект программы. B - некая довольно объемная логика, которая тоже использует сеть. Совсем оградить B от C я не могу. Значит буду наверх подниматься, а оттуда уже вниз. Спасибо
Вот так.
Проблемы с менеджментом памяти порешали все шизоидные джава-паттерны. Взаимодействовать с экземпляром объекта должен владелец этого экземпляра, если прям очень сильно надо, то передавать ссылку на этот экземпляр, но стараться по минимуму. Отдавать указатель на себя кому-то нельзя, лучше делать грамотный интерфейс у потомка и взаимодействовать с ним через вызов его методов, передавать только то что ему надо. А ещё можешь получить цикличную зависимость - это вообще пиздец, сразу знай что ты обосрался когда такое получилось и надо серьёзно переосмыслить что ты делаешь.
Алсо, вместо указателей должен быть unique_ptr, когда передаёшь по значению что-то желательно при любой возможности делать move или forward.
Игровые движки, да? Пик не имеет никакого смысла.
Их пишут потому, что это тупо интересно, а не чтобы превзойти студии с AAA.
>Пик не имеет никакого смысла.
Я один вижу что динозавр орет что-то про Unity и Unreal engine?
Тогда сорян.
1. включение
2. умные указатели, реализующие различные модели владения
3. слабая связанность через шаблоны
4. паттерны (банда четырех)
Почему говно? Может быть сервер, а может быть гуй. Разные объекты без наследований. Как их связывать?
очень смешно, пиздец. Я все еще не понимаю
Я этого не знаю.
Писать на си вместо плюсов бред. Для низкоуровневых штук 0 разницы. Зато синтаксис приятнее во многом. На си обычно пишут там, где компилятор нормальный плюсовой не завезли
Понял тебя. Чувствую, ты человек шарящий. Недавно тут сказали, что красивый код в проектах OpenCL и BOOST. А есть маленькие проекты на гитхабе, по котором можно поучиться писать красивый и эффективный код?
Когда подключен дебаггером, то при вызове этой функции тебя в него выкинет на этой строчке. У каждого компилятора свой механизм этого, у тебя на пике чисто MSVC-шная реализация.
Код: https://0bin.net/paste/fE-I3J32#9JfraPh0wdd5a118sjRikedebIsdO3r9oehWfJeJY69
Скрин результата выполнения прикрепляю.
Софт: VS 2022, MSVC
Заворачивание функций и структуры в namespace в headerе не моя прихоть.
Как видите: что-то там сортирует с ебейшим числом пропусков, в чём и проблема, но я так и не понял, какого хуя, но по факту хуй там. Функция вывода даёт массив в том виде, в котором я его заполнял.
Примечательно что первая реализация, накиданная для каркаса, сравнивающая только первые символы, работала очень даже хорошо: https://0bin.net/paste/L2jk6YKV#AT3U11+R1+U3b7hVeqvFm35Dk0TysqJsxeO8YOGKypg
Тут только функция сортировки, а не весь код, но больше ничего не менялось, кроме замены cin на cin.getline() и добавления скипа \n оба изменения чтобы читался пробел.
> с ебейшим числом пропусков, в чём и проблема, но я так и не понял, какого хуя
Отбой с этим замечанием, в этот раз, почему-то, пропусков сколько и должно быть. До этого же оно мне по 30 раз выводил Skipping. Т.е., сейчас вроде всё верно, но толку всё равно нету, должно быть Алах -> Аллах -> Алллах.
Люди пишут, что на заводах все тухло с айти, мол там нет динамики и вообще на заводе нет проектов и тд. , будешь тухнуть. Я хз, мне главное освоиться в плюсах и поработать в реальных проектах.
Пишу сюда, потому что сам учу плюсы и надеюсь мне ответят те, кто работает прогером на заводе(на плюсах).
Что делать ? Идти на завод или учить шарпы и идти в офис?
Работа на плюсах у нас только на заводе, либо в говно студии, где клепают визуальные новеллы.
Кодить под железо на С это самое дно по ЗП. Если на заводе именно это - сразу нахуй. Если с++, то смотри что за железка и какой уровень абстракции софта. В идеале если железка умеет обрабатывать серьёзные потоки данных (например от радаров, лидаров, камер) и работает под полноценной осью, имеет фронт и бэк.
С C# можно прокачать разработку бэкенд и сервисов, а потом перекатиться на нормальный язык в нормальную контору. Но опять же, если это тупо интерфейс к системе документооборота - то назуй.
За C# платят примерно как за c++, так что оба стула не очень.
Прохождение нахуй осуществляется в прямом порядке, начиная с первого пункта. Так что никаких после.
В чем проблема? Глаза разбегаются, долго не можешь выбрать?
Как и сказал >>358144, С++ жирный.
С банально быстрее. В нём нету ООП и всей этой модной хуиты, он может показаться довольно топорным для тех, кто знаком с Java/C# или ещё более простыми ЯП, но эта топорность вызвана чисто техническими ограничениями компьютеров. И если в иных языках эти ограничения обойдены костылями из коробки, то С перекладывает эту роль на пользователя, где он может поебаться и сделать тем, что есть, придумывая свои собственные костыли, которые, однако, куда меньше херят производительность, так как делают только то, что нужно в конкретном проекте. Это преимущество и С++, но С++ всё же куда гуманнее в этом плане.
>>358125
А я сказал с конца, значит с конца. Меня порядок пунктов слабо ебёт. Аж никак.
> которые, однако, куда меньше херят производительность
На ходу фантазируешь? Кресты с кодом в си-стиле работают так же быстро как и сам си. Но при этом есть большое количество задач, в которых кресты быстрее си. Ну и вспомни хотя бы какое извращение выдумывали в ядре линукса, чтоб изобрести свой ООП с динамической диспетчеризацией.
Ну так ты с любой стороны нахуй идёшь, причём по 4 пунктам из 5.
В догонку ещё можно сказать, что на c# будет быстрый старт - открыл студию и пиши код. А вот с c/c++ тебе придётся поначалу тратить до 70% времени на борьбу с линуксом, системами сборки, кросскомпилцией, прошивками, редакторами типа vim, консольными отладчиками и ковыряниями в логах. Остальные 30% ты будешь писать код.
Потому что ты смотрел видосики как соевые няшатся с малинками и как робот Atlas весело скачет по коробочкам. На скрепных заводах такого нет обычно. Максимум какой-нибудь слабовичок из семейства STM и FPGA к нему впридачу.
>соевые няшатся с малинками и как робот Atlas весело скачет по коробочкам
Ну так это я и хотеть. Я не в скрепной живу, потому повторю вопрос: как вкатиться?
>И ШО ТЫ МНЕ ТЕПЕРЬ СДЕЛАЕШЬ? А??? А???????
error: reference to ‘N’ is ambiguous
Твои действия?
Чел...
А вообще, static стоит использовать только для совместимости с сишкой, пока this self не завезут для статики никогда не завезут.
Что чел? Я только ~3 месяца в языке. И что значит только? А что там по статичным мемберам класса?
> статичным мемберам класса
Нахуя? Они тебе не нужны, пока ты не соберёшься их в си использовать. Всегда есть лучше решения, чем статика.
И какая же альтернатива? Хуярить функциональщину?
Комрады, посоветуйте нормальные плагины для эклипса. Только поставил, думаю на нее перекатится.
nvim
Сегодня у меня унылая среда.
Visual Studio
Чел, сейчас фактически только две IDE существует: VS для винды и CLion для любителей опенсорсного говна типа линукса. Ну ещё есть текстовый редактор VS Code для любителей консольки. На этом всё.
2% вообще странные люди, они ничего не любят, кроме долбёжки в консольку. Про то что можно писать системный код на чём-то кроме С и питона узнали только пару лет назад. Больные люди.
Не знаю, я просто хочу комфорта. У нас писали в основном в CLion'е. Ну а мне нужна среда легкая (по ресурсам) ибо часто таскаю нетбук с собой, да и там i3 стоит, не будет гармонии. Хотя я не хейчу остальные Ide или ОС, мне просто так комфортно.
>текстовый редактор VS Code
Расширение от мс не может распарсить средний проект на крестах, кланговское расширение выглядит, как говно. Проще сразу саблайм ставить.
> static
Кратко о том, как распознать явопидора или шарпахуесоса.
А вот тут опять пиздёж, ++p и p++ не эквивалентны, хоть и могут генерировать одинаковый код с оптимизациями.
>как вкатиться?
Как и всюду: смотришь вакансии, если где-то половина строчек в requirements совпадает с твоими скиллами, то отправляешь резюме. Если нет, то осиливаешь требования.
Потому что ты хочешь остановиться и глазами посмотреть состояние программы в определённый момент. Это именно функция для отладки, не для обработки ошибок или чего-либо другого.
> отнаследоваться от абстрактного класа
Шиз что ли? Просто бери структуру с alignas и пиши в неё байты. А структуру хоть залупой оборачивай.
Могу упороться и написать структуру чисто для записи и уже класс с конструктором от этой структуры, который буду в вектор писать. Но выглядит немного некрасиво
Бамп. Речь о структуре с массивами чаров и интами.
Всё, что не-POD, близко нельзя подпускать к read/write/memcpy и чтению сырых байт их экземпляров. А то ненароком vptr перетрёшь или залезешь на другое поле. Выдели отдельную структуру, оберни её в pragma pack и читай в неё хоть из файла, хоть из сети.
На таком процессоре стандарт не реализовать.
Я neo попробовал, мне зашло лучше чем micro, разберусь сегодня какие еще плагины накатить и радоваться буду.
Добра тебе анон.
Сап. Qt Creator не доступен для скачивания в рф, удалось скачать open source версию ide, но там отсутствует комплект для c++. Где его взять отдельно без гомоебли с vpnнет такой возможности
Что?
а потом при открытии получаю где свёрнуто где нет, а иногда вообще ничего не свёрнуто.
Подскажите, как в плюсах можно написать консольный ввод так, чтобы символов не было видно или они выводились звездочками? Знаю про С-шный getch и putch('c'), а в стандартных библиотеках С++ есть что-нибудь с подобным функционалом? Допустим, чтобы я сразу мог писать в стринг, а не в массив чаров, потом стринг приравнивая с этому массиву
Ну хуй знает, попробовал посворачивать в разных файлах, сохранять и перезапускать студию - вроде при открытии всё остаётся как было при закрытии
Тебе нужен сам фреймворк а не иде. Последний оффлайн инсталлер у них был 5.12. Поищи версию с мингв.
Нет.
у меня clangd это умеет
в вижаке тоже такая штука есть, только хзы она там из под коробки, или её как то прикручивать надо
Как я сказал, то можешь всё делать только с POD объектами. Если у тебя https://en.cppreference.com/w/cpp/named_req/StandardLayoutType, то спокойно издевайся над байтиками.
Можно Visual Assist поставить.
Будучи избалованной C#-макакой, привык к тому, что интеллисенс в Visual Studio на ходу объясняет, чё делает классы/методы/переменные, к которым я пытаюсь обратиться, чего теперь пиздецки не хватает, см. пикрел. (Методы на картинках абсолютно рандомные, чисто чтобы показать, о чём я.)
Есть, конечно, https://en.cppreference.com с вроде бы годными рефами, но очень хочется увидеть их прям в редакторе, не копипастя название метода в окно браузера. Находил какие-то упоминания doxygen, но как заставить его работать с интеллисенсом для стандартных библиотек так и не разобрался.
Собственно, вопрос: как пофиксить?
на данный момент я использую Visual Studio, но мне в целом не принципиально до тех пор, пока мне не нужно слезать с винды.
Гифку с попугаем в качестве оплаты прилагаю.
Никак. Для дотнета документация тянется из xml doc комментов (если их кто-то написал) или метаданных сборки (куда она попадает из комментов).
Для плюсов такого никто не писал, хорошо хоть плюсовый интелисенс научили работать с док комментами, так что если в какой либе (бусте например) они будут, то в подсказку потянутся, а так - увы.
Пользуй cppreference, там все что надо есть, всё равно раз только начал, без подробностей не разберёшься, или протопчешься по всем граблям.
На cppreference есть несколько вариантов для скачивания документации, один из них это документация от doxygen - нельзя никак заставить интеллисенс тыкаться в неё?
Если и это не прокатит, есть ли возможность в вижуал студии перенаправить "Search online" (пикрел) с богомерзкого бинга на cppreference?
С меня шебм с котом.
Не юзать using namespace в хедерах, вестимо. В рамках одного cc такое можно хоть каждый раз ловить и фиксить.
>Хуй знает, собирай гссом.
Не я решаю. В конторе clang-10, так что пока так выживаем. Штош, буду юзать projection, всем спасибо.
std::set_intersection(std::views::keys(map), requiredKeys, std::back_inserter(result))
Верстю плюсов нужную указал?
int i = 0;
int n;
int* ptr = &n;
Затем в бесконечном цикле 1) инкрементирую счетчик i, указатель ptr и мусорное значение по указателю ptr и 2) вывожу всех троих в cout.
В результате получаю непредсказуемо от 1200 до 2200 проходов цикла, причем последние несколько значений по разыменованному указателю перед сегфолтом всегда одинаковые. Как объяснить такой разброс? Больше в программе ничего нет.
> инкрементирую указатель ptr
> Как объяснить такой разброс?
Ты вообще вменяемый? Тут нечего объяснять, оно работает ровно как и должно - неопределённо.
> UB
> непредсказуемо
Ахуеть просто.
>получаю непредсказуемо
Неправильно. Ты предсказуемо получаешь больше трех итераций.
>Как объяснить такой разброс?
Неопределенное поведение.
>Больше в программе ничего нет.
Без оптимизаций собери, у тебя будет 3 вывода. Зависит от системы и компилятора, но скорее всего так и будет на x86_64 clang\gcc, возможно и со студийным.
>>360212
>неопределенное поведение
Уи нид ту го дипер, я пытаюсь конкретизировать это определение, насколько возможно. Скажем, если указатель наоборот декрементировать, я получаю итераций минимум на 3 порядка больше. Также я никогда не получаю меньше 1000 итераций в первом варианте. Собственно меня интересует, что конкретно происходит в этот момент.
>>360215
>Без оптимизаций собери, у тебя будет 3 вывода.
-fno-builtin попробовал, или это не то? Результаты те же.
> я пытаюсь конкретизировать это определение
Что тебе не понятно? Оно может быть любым, тупая ты пизда. Твой код и сам компилятор не определяют конкретное поведение этого кода.
> что конкретно происходит
Выделенная память кончается, наркоман.
>Выделенная память кончается, наркоман
Почему память кончается иногда после 1200, иногда после 1700, а иногда после 2200 итераций? Одна и та же система выделяет одной и той же программе разное количество памяти прикаждом запуске процесса? От чего это зависит?
>Почему память кончается
Она не кончается.
> иногда после 1200, иногда после 1700, а иногда после 2200 итераций?
Возможно это связано с аслр.
> Она не кончается.
Кончается read-write участок памяти, попизди мне тут.
> Возможно
Не возможно, а оно и есть. Релокации по дефолту динамические.
Четакой едкий, выпей чаю.
>Кончается read-write участок памяти, попизди мне тут.
Но память не кончается.
>а оно и есть
Откуда ты знаешь какая у него система? Может быть там аслр нет?
У меня лупа
То, о чём ты говоришь обычно называют deferred reclamation. Но это уже другая парадигма времени жизни и владения объектами, нежели RAII, который стандартно используется в плюсах. В RAII ты точно знаешь, когда выполнится деструктор и какие ресурсы будут освобождены.
Чем вариант ⚹pointer = {} не вариант?
>Через месяц
>Вспоминаю С++, подтягиваю знания ООП, решаю задачи, учу алгоритмы, разбираю библиотеку STD и умные указатели.
В итоге идёшь нахуй по причине Segmentation fault
Используй неймспейсы всегда, пока не почувствуешь что тут нужен класс.
Ну если не баловаться с сырыми указателями, то для сегфолта надо что нибудь нетривиальное сделать. Например сотворить (global) static initialization order fiasco и дёрнуть разрушенный объект из деструктора другого глобального объекта.
Или указатель
>Ну если не баловаться с сырыми указателями, то для сегфолта надо что нибудь нетривиальное сделать
https://godbolt.org/z/G646v519G
А ебу что там у тебя за сокет? Юзай любой подходящий контейнер поддерживающий ресайз и не выёбывайся.
Кто-нибудь тут писал интерфейсы? Я осознал что пишу 100% hard code и мой класс для контролера к игре разрастается до слишком больших размеров. Раньше это был класс Mouse, но теперь туда добавилось много вычислений для юнитов. Я захотел расширяемости. Паттерны раньше не применял. Нужно ли мне написать интерфесы?
send(socket, &string[0], string.length(), flags)
Можно передавать длину строки перед ней. Можно вообще жсоны гонять если скорость не критична.
>>360952
>как сделать нормальный интерфейс для передачи данных пакетами?
protobuf
>>360764
>Хочу чтобы все наследники имели одинаковую функцию (по имени), которая должна возвращать разные по типу значения.
https://en.wikipedia.org/wiki/Covariant_return_type
>>360511
>Кстати, про уничтожение объектов, можно ли вызывать их асинхронно?
В Qt есть deleteLater, можешь реализовать что-то аналогичное (очередь в которую перебрасываются объекты)
>>360326
>Как обнулить инстанс структуры хранящийся в unique_ptr?
std::memset(ptr.get(), 0, sizeof(⚹ptr.get()));
>>360205
>получаю непредсказуемо
Во-первых UB (уже сказали), во-вторых ты двигаешься по стеку внизу. В лялексном стеке будут лежать argv и env. Также расположение стека по ASLR может быть весьма рандомным (тоже уже сказали в треде)
>если указатель наоборот декрементировать, я получаю итераций минимум на 3 порядка больше
Понятное дело, дефолтный размер стека в лялексе - 16 Мб, и двигаясь снизу-вверх ты просто проходишь неинициализированную память (точнее система ее заранее почистит нулями, но в стандартной glibc слишком дохуя чего происходит при стартапе)
Салтовка-кум
Мне 22,заканчиваю экономический институт и так как я нахуй не нужен как специалист за больше чем 900евро в месяц то решился изучить c++ через SkillBox.Cкажите,нормальное ли это обучение,и все так как они говорят? За себя могу сказать что готов к усилиям в этом направлений,но нуждаюсь в кураторе.
Передавать ей при вызове this в параметрах? Подозреваю захват окружения при создании лямбды будет ещё до выделения памяти под класс.
Скиллбокс(скиллфактори, и тд) это инфоцыгане. Гугли отзывы на подобные канторы, там расписано как преподают материал, какое качество материала и в чем будет менторство заключаться.
Игра не стоит свеч.
Книжки, ravesli, learncpp и прочие условно бесплатные источники информации - вот путь.
>как у вас там с плюсовыми вакансиями
Точку стабилизации уже прошли. Идёт откат к старым значениям с одновременным укреплением рубаса. Ну и как следствие участились попытки прописать зарплату в далларах (хотят ка раньше свои нищенские 3к платить).
Жабу лучше изучай. Она ближе к делам экономистов. Или Один Эсс.
Толсто.
Я msvc компилирую....
Нет. Лямбда должна принимать указатель на твой класс в качестве аргумента, если собирается его использовать.
Ладно, видимо подход хуевый. Надо иначе делать. Если интересно, то мне показалось хорошей идеей сделать максимально общий класс сервера, который будет новые соединения в переданную лямбду передавать, а она внутри себя их уже обрабатывать. Но затем мне понадобилось в лямбде использовать метод сервера и всё. Сделаю значит просто наследника от своего максимально общего класса.
Он должен был взаимодействовать с кучей других объектов и мне показалось хорошей идеей передвать в сервер лямбду, которая захватит эти объекты. Видимо придется преисполниться шаблонами и писать сервер, который примет ссылки на все те объекты и будет внутри себя их дергать.
Чтобы при каждом чихе не лезть в код сервера и не менять его, если вдруг ему понадобится еще один объект для взаимодействия.
Максимально абстрактный код сервера на псевдокоде, зачем усложнять?
https://0bin.net/paste/+B9N3PVY#BTUPMznhI9e7S8EF2qpiRTaZfpDlF67M8MR5fsYlFEN
Ну а вообще я хуй знает. Я в первый раз пишу прогу в которой несколько сущностей разных и они должны как то с собой взаимодействовать. + хочу писать максимально модульный код, поэтому qt с его слотами/сигналами не юзаю, а пытаюсь как то из сервера вызывать нужные функции. Хотя может этт и странно и лучше взять qt с его системой сигналов и слотов.
У меня то же самое по сути. Но мне в хэндлере надо другие объекты юзать. Вот их законнектить было проблематично. Сначала решил лямбду с нужными объектами передавать, но оказалось хуйня
Значит будет у меня специализация под конкретные объекты, а не общий обработчик. Ну ладно. Мне уже не важно. Главное чтобы работало
Это вообще хуево или нет? Принято ли в проектах писать структуры заточенный под связь с другими или все стараются максимально модульным сделать?
typedef FT_FaceRec_ ⚹FT_Face;
Этот код компилируется:
FT_Face f;
auto error = FT_New_Face(lib, filename, index, &f);
shared_ptr<FT_FaceRec_> face(f, FT_Done_Face);
А этот выдаёт ошибку:
FT_Face f;
auto error = FT_New_Face(lib, filename, index, &f);
shared_ptr<remove_pointer<FT_Face>> face(f, FT_Done_Face);
Почему?
::type
бамп вопросу. Собственно писал на эмоциях от этого видео
https://www.youtube.com/watch?v=Bw6RvCSsETI
сорян за типа "рекламу инфоцигана левого", но все началось со спока с одной php макакой в /b про SOLID
Как по мне SOLID это противоположность YAGNI. И я больше за YAGNI и 100% hard code. В то время как SOLID это на самом деле софт код из за "D" который размывает структуру ИМХО.
второкурсник-кун (да еще один в влимание-особая-личность, тяжело...)
Устроим собес прямо здесь. Могу взять тебя программистом если умеешь что-нибудь. Что ты умеешь?
Админ бань его. Заранее спасибо.
А примус починять?
Сильно же тебя это задело
Во-первых пикрел,
>QEventLoop
Лолщто, зачем это? У тебя ивентлуп крутится в QCoreApplication::exec уже.
Надо делать коннект на QNetworkReply::finished и в обработчике слота уже вытягивать данные. А ты какую-то синхронщину ебашиш
Салтовка-кум
> Лолщто, зачем это?
Для ожидания же. Как sleep, только система по прежнему обрабатывает сигналы.
> Надо делать коннект на QNetworkReply::finished и в обработчике слота уже вытягивать данные
Надо, но я хз как. У меня все это дело в классе. Я вызываю метод с того пика для получения данных, так что он должен вернуть какое-то значение. Поэтому отдельный слот тут никак не вставить.
connect(reply, &QNetworkReply::finished, this, [this, reply]()
{
reply->deleteLater();
auto data = reply->readAll();
/// ........
});
Пока этот сигнал сработает, функция уже выполнится. Ну или я не понял, куда ты предлагаешь его вставить.
>Пока этот сигнал сработает, функция уже выполнится.
Ну да. Т.е. программа может заниматься другими полезными вещами
void⚹ это указатель. А указатель это адрес в памяти. А адрес в памяти это целое беззнаковое число от 0 до 2 ^ (разрядность системы) - 1. 8 байт = 64 бита и как раз позволяет закодировать весь диапазон адресов. В 32 разрядной системе void⚹ будет 4 байта.
Как правильно организовать ебучий cmakelists? Вот есть проект, он хочет залинковаться на либу, лежащую на том же уровне что и он. Как это по-человечески сделать?
template<typename T>
T test(int n)
{
return 42;
}
test(55);
Если в параметрах указать T то всё компилируется, а реально ли сделать без неё, как в примере?
Тут есть программисты микроконтроллеров? Хочу уйти из АСУТП к вам. На каком уровне крестов можно начинать открывать headhunter? На младшие позиции, естественно.
Можно и на виджетах, но жопоболи будет на порядок больше.
Ясно, просто не хочется передавать в функцию переменную только для определения. А что-нибудь подобное сделать можно?
template<typename T>
T testfunc(int n, T t)
{
int num = 5;
std::string str = "ABC";
if (1)
{
return num;
}
else
{
return str;
}
}
C thread is two blocks down
Можно из с++ жопаскрипт сделать, но зачем?
Выше по треду уже писали про variant, union и void⚹ в качестве возвращаемого значения.
using result_t = std::variant<int, std::string>;
result_t func(int i) {
result_t res;
(i > 0) ? res = i : res = std::to_string(i);
return res;
}
auto res = func(42);
auto val = std::get<int>(res);
auto str = std::get<std::string>(res);
get кидает исключение, если тип не соответствует фактически хранимому значению (есть get_if и проверки - смотри доки).
Хрюкни
>Обновил qt, с удивлением узнал, что некоторые используемые функции были выпилены.
>Что такое мажорная версия?
Обновил Qt5->Qt6?
> Обновил Qt5->Qt6?
Да
> Что такое мажорная версия?
Из крестов же ничего не выпиливают, только настоятельно советуют не использовать, если было совсем непотребство.
Ну например setCodec из qtextstream
Хах, когда писал пост как раз держал этот пример в голове, мол заменили, но не удалили, а оказалось в 17 версии таки выпилили. Но все же это буквально единичные случаи.
Каком?
Не подскажете, почему у меня русский текст не печатается?
std::wstring str1(L"Жил был пёс.");
std::wcout << str1 << std::endl;
Не работает.
Если винда, то utf16 например. Лучше выведи в файл и открой редактором где можно пощелкать кодировками .
>Если винда,
У меня не винда,
>пощелкать кодировками .
Ничего не меняется.
В общем странная фигня, если перед wcout вывести обычный текст, то текст выведется транслитом (на сайте вместо транслита знаки вопроса):
cpp.sh/3psus
cpp.sh/35bkx
>Можно из с++ жопаскрипт сделать, но зачем?
Есть библиотека при получении значения она выдает результат и можно запросить его тип (число, строка) моя задача написать функцию универсальную для запроса числа и строки. Реализация за исключением нескольких строк одинаковая. Писать две разные функции которые содержат почти одинаковый код не хорошая идея.
union в коде на C встречается. Там нет наследования или полиморфизма и поэтому убогие пишут вот такое (чтобы распарсить сообщение, пришедшее от железки):
union {
struct {} __(packed)__ header_base;
struct {} __(packed)__ header_type1;
struct {} __(packed)__ header_type2;
}
или для работы с указателями:
union {
void⚹;
base_class⚹;
child_1⚹;
child_2⚹;
}
В с++ всё это особо не нужно. Ну а varaint вообще редкость. Слишком громоздкий и без задач.
в крестах для union все же осталось одно применение, а именно когда нужно заглянуть внутрь примитивных типов
> в крестах для union все же осталось одно применение, а именно когда нужно получить UB
Пофиксил.
Волков боятся - в лес не ходить.
implementation defined != UB
Перекати.
Приложение работает следующим образом: есть сервер который отправляет какие то данные, которые нужно обработать, делает он это не часто, но обработка занимает много процессорного времени, а само приложение должно работать параллельно с этим обработчиком. Создавать тред в классе с бесконечным циклом в ожидании данных плохая же идея? Это вообще можно при помощи стандартной либы как то сделать?
boost::asio
Для асинхронного выполнения тебе нужен std::future в качестве результата и нечто, что будет работать асинхронно - std::async или std::thread t(callable, args).detach() в паре с packaged_task или promise.
symlink
https://libgen.rocks/ads.php?md5=FD03DB39EE5F06D2CA025601BBCB9A16
Зарепортил за саморекламу
если отвечать формально на вопрос, то возможно тебе придется задействовать асинхронный ввод вывод, поэтому только при помощи стандартной библиотеки это сделать не получиться, придется использовать либо средства предлагаемые операционной системой, либо кроссплатформеные библиотеки
А чё такого если инстанс глобального времени жизни?
>s/auto_ptr/unique_ptr/g
>добавляешь std::move, где компилятор ругается
И никаких проблем. А у тебя что приключилось? inb4 старая либа без исходинков возвращала их в апишке
Наконец-то завезли православный bit_cast для такого
Довольно много ML/CV кода написано на Python. И считай он нужен банально для чтения и изучения примеров (как английский для чтения документации).
Да я не спорю, что на нём дохера всего написано. Суть в том, что в риалтайме такое всё равно не поюзаешь.
Ну ты не с того конца заходишь. Язык это только инструмент и не более.
Сначала глянь насколько хорошо пойдёт сама тематика. Есть книжка от Szeliski (быстро гуглится). Она довольно много аспектов CV затрагивает (и про особенности нашего зрения и про цифровые камеры и про алгоритмы - сегментация/классификация/выделение особенностей/трекинг и ещё докучи). Полистай по диагонали и посмотри как оно вообще. Матана там ояебу конечно, но куда ж без него.
>Szeliski
Вот это годный контент, спасибо. Ушёл курить. Превозмогать придётся, робототехника сама себя не освоит.
struct A {};
struct B {
A& ref_a;
B(A& a) : ref_a(a) {}
}
A a;
B b(a);
std::amke_pair(a, B(a));
Ссылки инициализируются в конструкторе. Но не в теле, а в списке после : .
Вот только у тебя b из пары ссылается на а вне пары. А вопрос наверно был как создать пару аb, где у .second ccылка на .first
Ну это С++, так что РЕШЕНИЕ ЕСТЬ ВСЕГДА. Но не всегда оно тебе понравится..
https://godbolt.org/z/E9h1aPf3s
Зависит от имплементации. В гцц просто вызови __builtin_life_meaning() и узнаешь.
void⚹
Я писал и acceptor_(io_context, tcp::endpoint(tcp::v4(), port), false) и true, нет разницы
В голос с этой хуйни
А, соре. Я дурак. Мне просто очень везло на свободные порты. И я думал, что маленькие нельзя выбирать, а оказалось можно
А, лол. Это не cin падает. Странно. Забавно получалось, но ошибка выскакивала именно там.
Написать свой язык. Ну или макросы. Ключевые слова на то и ключевые что являются частью языка.
Тоже ничего
нах этот кал когда корутинки завезли уже? корутинки с https://github.com/facebook/folly/blob/main/folly/experimental/coro/README.md и погнал
Corpos are bad
>c++ 20, не кал, слышите.
Чел, я педалю cv под эмбед и нам это ещё не скоро завезут в нормальном, рабочем состоянии. Для корутин есть пихонг.
фейсбук топ
земля пухом
спасибо большое
годно, а то мой ноутбучок надрывался прямо под визуалкой. а тут можно спокойно и на двощах параллеьно сидеть.
>s/auto_ptr/unique_ptr/g
Авотнихуя
>И никаких проблем. А у тебя что приключилось? inb4 старая либа без исходинков возвращала их в апишке
Старый цомпилятор не знал про unique_ptr (одна параше платформа), а новый - про auto_ptr (шланг на макоси).
Та не, там ещё картография, медицина, дефектоскопия. Не обязательно слабовички и охранка.
Ладно, пойду тогда шлюзы для криптобиржи писать, HFT и сервисы для наёбки гоев на деньги.
А ещё они едят, поэтому фермеры тоже их на самом деле поддерживают.
У меня программа в которой создаётся множество объектов одного класса и их данные загружаются из базы данных расположенной на жёстком диске при запуске программы.
Так вот я хочу чтобы после загрузки программы объекты и их данные находились в оперативной памяти все чтобы не обращаться постоянно к жд за ними, а только 1 раз.
Но я не понимаю как это реализовать автоматически? Допустим у меня 157 объектов и как их программно именовать? a1, a2, a3... черзе шаблоны чтоли это делать? Или как? Опытные люди помогите, пожалуйста, как делаются подобные вещи.
вот так. я диаграмму нарисовал что я хочу чтобы вам проще было понять. я не понимаю как присваивать имена объектам которых множество и т.д.
типа записывать объекты в массив после записи каждого добавлять к индексу +1 и так пока база данных не закончится, а их номера в массиве и будут id идентификационными...
как бы это элегантно сделать
Ты докуда учебник успел прочитать?)
Тебе нужен обычный вектор. Ну или мэп если в приоритете поиск по имени например. В общем разбирайся со стандартными контейнерами.
>вектор
ну и я уже начал подозревать что массив. создать вектор классов. спасибо огромное, анон.
да я читал целиком его, оригинал от страуструпа все 1000 с лишним страниц пол года читал, но было это года 3-4 назад и я после этого не писал на плюсах, только на си. а щас нужны классы замахнулся на высокую программу.
>>365317
благодарю. если с вектором не пойдёт рассмотрю list.
спасибо вам
>А какую базу данных лучше использовать для автономной программы на с++?
0. SQLite
1. если хочешь выебнуться - dbm и его разновидности
Программа работает со множеством объектов одного класса и нужно хранить их данные в базе данных чтобы прии запуске программы загружать их с жёсткого диска в озу, а затем при выходе сохранять их из озу назад в базу данных
>>365353
спасибо, тогда наверное sqlite рассмотрю к тому же уже работал как-то с ними
Ок, спс
Можно. Только старайся использовать один стиль именования, а не смешивать все сразу.
https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#nl8-use-a-consistent-naming-style
Я конечно могу написать свою обёртку, которая по запросу будет файл на диск сбрасывать и куски подгружать, но выглядит довольно муторной задачей
Тебе нужен полноценный storage layer, думать об этом надо уже сейчас, когда вытаскивать данные с диска и когда сбрасывать их обратно
Тебе нужен кеширующий провайдер данных. Пока можешь накатать его интерфейс, а в имплементации использовать вектор, ну а потом сделать как надо будет.
>хранит указатели на объекты
>сохраняться между запусками
>может разростись
>хранить его полностью в оперативке нельзя
>указатели на огромные объекты
>Можно ли как то кусок вектора на диск записать, а когда надо доставать обратно?
Маппинг+обертка кучей вокруг куска памяти.
это за массив? Это просто буфер где хранятся цвета каждого пикселя? Или этот буфер хранит еще всякую инфу типа размера изображения, метадаты?
А ты думаешь откуда я это взял и уточняющие вопросы написал? Я прочитал, но не понял
Это просто файл загруженный в память.
>the loader probes the file for a header to guess the file format
Это файл (jpg, png, ...), загруженный в оперативку в виде массива data.
1) первый и самый важный - что вернёт std::thread::hardware_concurrency в системе с 2 CPU (допустим, у каждого CPU 16 ядер и 32 потока)? По идее, на том же cppreference говорится, что функция вернёт число всех поддерживаемых потоков, то есть для такой системы она должна вернуть 64. Вообще интересно почитать, что сам стандарт регламентирует в таких случаях
2) насколько мне известно, если создать все 64 потока из прошлого примера, то планировщик в ОС сам раскидает потоки между CPU. Однако я знаю, что планировщик в ОС может распределить эти потоки неравномерно между CPU, а также между ядрами конкретного CPU (банально из-за алгоритма регулирования температуры, расположения кэшей, etc). Однако эта проблема решается использованием affinity mask ( https://en.wikipedia.org/wiki/Processor_affinity ). То есть чисто технически при создании потоков я могу закрепить их к определённому CPU (32 на первый и 32 на второй), но только с помощью механизмов Windows API или линуха. В <thread> нет ничего для работы с этой маской? И как вообще стандарт на неё ссылается (если ссылается)?
>что вернёт std::thread::hardware_concurrency в системе с 2 CPU
Самый простой способ - посмотреть исходники стандартной бибилиотеки, благо даже у мелкософта она открыта.
https://github.com/gcc-mirror/gcc/blob/master/libstdc++-v3/src/c++11/thread.cc#L190
>int __n = _GLIBCXX_NPROCS; ,
где _GLIBCXX_NPROCS - макрос, вызывающий одну из кучи функций
И все они, судя по мануалам, возвращают полное число потоков из всех цпу.
>В <thread> нет ничего для работы с этой маской?
Не припомню такого. Но всегда можно вызвать std::thread::native_handle и работать с системными апи.
Потому что это разные типы данных?
Потому что ты под линуксом.
аноны, как на с++ подключать инклюды ? или почему у меня эти ошибки, за плюсы вообще не шарю
в другом разделе сказали мфс пакеты скачать
>В целом и шаблоны пишу, и с абстрактными классами наебался, поинтеры-аллокаторы, мультипоток копал, с бустом игрался. Qt не зашёл.
>С чего начать свой путь в коммерции?
С приношения денег кабанчикам, каким образом твои навыки могут принести ему денег?
Всем нужен опыт и конкретные навыки, те не с бустом поигрался, а я могу сделать то то и то то.
Ну и да, никому ты не нужен, мужик. Вкатусю на плюсах видеть никто не хочет, это слишком кринж, тем более в этой стране
>вкатился наверное в нейронки/зрение
Открываешь хехе.ру, вводишь там c++, потом вводишь c++ && machine learning. Получаешь <5% от общего числа вакансий. Затем убираешь оттуда senior, lead, knowledge of c++ is a plus, huawei/samsung/etc и в итоге идёшь в НИИ клепать аналоговнеты под линукс для stm32.
в нии норм работать, если есть хата от бабки доставшаяся, и не планируешь заводить семью (остаться девственником), на покушать будет хватать денежек
std::vector a = b;
bool copied = true;
Может выполниться не последовательно?
Нет.
Конечно. На современных ЦП инструкции обращения к памяти могут начать выполняться одновременно, но вторая может выполниться раньше первой, если кэш-мисс или просто долгая инструкция. Естественно ты в одном потоке не сможешь увидеть эффект от такого, ЦП не станет выполнять одновременно инструкции, если есть рядом зависимая инструкция от того участка памяти. Но вот из другого потока реально запалить это. Гугли про memory order, чтоб понимать что за relaxed-память и чем отличается поведение strongly-ordered от weak-ordered архитектур.
Но в твоём случае если чекнешь copied==true в другом потоке, то уже скорее всего не успеешь поймать такое. В стандартной библиотеке, кстати, разрешены такие проёбы в порядке выполнения и это даже не UB, потому что надо std::atomic юзать вместо простого обращения к памяти. Например std::latch умеет в такие фокусы, но шансы поймать это очень низкие, хоть и не нулевые.
Имея хату от бабки сложно остаться девственником.
Конпелятор может переставить во время оптимизации или вообще убрать то, что посчитает не нужным.
>>2367597
А если я из Донецка? Я норм, отвечаю.
Алсо вообще модульную программу делаю у меня каждая функция и класс в отдельном исходники. Как это лучше всё держать в .h и подключать всё это или в .cpp и потом всё это вместе комппилировать? Помогите, молю, нюфаня я обосраная
>И все они, судя по мануалам, возвращают полное число потоков из всех цпу
Подтверждает мои мысли и то, что написано на cppreference
>std::thread::native_handle
А вот за эту наводку огромное спасибо, анон!
Старина, съеби нахуй
>как скомпилировать 2 .cpp файла в одну файла
Узнать разницу между объявлением и определением. Вынести объявления в .h, включить его везде где нужно, в том числе в .cpp с определением.
Всё понял, спасибо.
Пишет что не может открыть их. Они точно у тебя находятся в рабочей директории?
Так-то вся наша жизнь UB
Годно годно. То есть можно сделать чистый .h 1 и там объявить все классы, функции и всё говно что хочу. А в остальных .cpp написать определение этому годно, годно. Мерси ещё раз
В 2022 - с очень большой вероятностью. В общем случае зависит от процессора и компилятора
От формата файла зависит. В PE код целевой машины идёт сразу за меткой COFF хедера например. Для 64 так будет и написано - 64 86.
Спасибо понял. Наверное в hex редакторе посмотрю. Дизассемблера у меня нету.
Нет.
Нигде. Я всю жизнь изучаю только ассемлеры, с\с++, и просто где-то мельком читал про какие-то интерпретаторы в java я решил что они наверное переовдят этот код в c++
Хорошо а как тогда они построены? Так же как c++ переводятся в ассемблер, потом в двочиный код объектных файлов, а потом компоновщиком связываются в единый файл исходного кода? А? А? А? А? А?
>c++ переводятся в ассемблер,
Неа, он сразу в двоичный, так больше возможностей для оптимизации.
Шарп и джава компилируются в байт код, который исполняется (интерпретируется) виртуальной машиной.
спасибо. то есть у шарпа и джавы есть снизу какая-то виртуальная машина со своей маняархитектурой которая их код обрабатывает или что? как она работает? чем им не подходит нативный процессор?
ну погоди. скажи зачем им нужна виртуалка которая их будет преобразовывать в оригинальные команды процессора? нахуй им этот ёбаный интерператотор ебучий? почему нельзя а с\с++ это компилировать?
Чтобы один и тот же артефакт работал на любой платформе, а не "скачайте версию либы для винды, скачайте для линукса, скачайте для андроида, для x86_32, для x86_64, для ARM, для ещё какого-нибудь говна, или ебитесь со сборкой сами".
А понял. То есть вся работа по кросс платформенности передана этому маняитерпретатору годно, годно.
Но я привык если честно компилировать. То есть мне нужна какая-то либра, я беру и компилирую её парой команд и всё.
Я правильно понял что при компляции с\с++ языка идёт сперва создание объектного файла с двоичным годом а потом связывание их в один исполняемые?
сорри я ещё до книги по компляторам и отладчиков не дошёл, только ассемблеры читаю поэтому не знаю но интересно очень узнатт
Ну там есть не только интерпретируемый байт код, но и JIT компиляция (при выполнении часть байт кода на лету компилируется в платформенный бинарник). Но программист ручками её не может сделать - виртуальная машина сама решает как и когда это делать.
>>368247
Компилятор из текстовых фалов делает бинарные объекты. Связывание бинарных объектов в исполняемые файлы делает линковщик.
В реальном мире компиляция не редко делается прям в процессе выполнения. Например JIT в виртуальных машинах или компиляция шейдеров, которые запускаются на видеокартах (c-подобные языки GLSL, HLSL).
на русский dynamic translation почему то переводят обычно как "динамическая компиляция", что создает некую путаницу все же
имхо, прямой перевод был бы в этом случае точнее
Ну можно конечно, но как то не красиво
Поток логированния тогда у тебя должен быть высокоприоритетным иначе другие потоки будут ждать его
*Хекса
Можете пояснить за потокобезопасность? Не очень понимаю о чем там говорят
> как это реализовать?
Через нормальные фреймворки типа WPF. Там одним нажатием кнопочки исходники стилей нативных контролов экспортируются в XAML и можешь перепердоливать их как хочешь.
Анальный цирк - это использовать проприетарную либу в опенсорсе и жаловаться на недостатки кастомизируемости. Жри что дают и не морщи ебало.
>Почему в qt не завезли нормальной документации по кастомизации?
RTFM https://doc.qt.io/qt-5/stylesheet-reference.html
>Почему я должен вслепую прописывать qstylesheet?
Сделай текстовый виджет из которого по кнопке будешь присваивать стайлщит
>Хочу вот сделать няшную табличку как на пике, как это реализовать?
Всё можно, за 100$ сделаю за тебя. И даже без qml
>>368645
>проприетарную либу
>проприетарную
Ебанулся? Она опенсорсная и бесплатная.
А вообще, сасихуй, пидар
Салтовка-кум
> Она опенсорсная и бесплатная.
> бесплатная
Чел...
Вот у майков дотнет действительно опенсорсный и бесплатный, под MIT-лицензией. А у qt мало того что GPL, так ещё и есть чисто проприетарные зависимости с проприетарными qt-лицензиями. О какой бесплатности ты говоришь, если в реальном коммерческом продукте ты обязан башлять им бабло и сидеть под проприетарной лицензией? Вы там совсем ёбнулись, петучи?
Хз что те не хватает, на кюмл накатать такой делегат для отображения списка можно за пару минут.
Когда уже "комнатные дизайнеры" поймут, что красивый дизайн заключается не в том, как выглядит твое приложение, а как оно визуально вписывается в систему.
Если уже все на виджетах, то довольно геморройно, но можно отдельные элементы на qquickwidget делать.
>А у qt мало того что GPL
Папизди мне тут
https://doc.qt.io/qt-5/licensing.html
https://doc.qt.io/qt-6/licensing.html
>>368752
Тебе бабки платят (если канешна плотють, лол) за то, чтобы ты реализовывал хотелки заказчика (либо старшего по званию).
Умничать о том, какой должен быть дизайн ты можешь, когда у тебя будет свой стартап и где ты сам будешь музыку заказывать
>>368821
В QTableView можно кастомный делегат просунуть тоже, если чо
https://doc.qt.io/qt-5/qabstractitemview.html#setItemDelegate
Но я бы добивал стайлщиты
Алсо в куте-дезигнере (или креаторе сразу) можно играться со стайлщитами напрямую
> Папизди мне тут
И что ты принёс? У тебя же по ссылкам и написано, что опенсорс под зоопарком разных версий GPL, а коммерческая под проприетарной лицензией самой qt.
так ты еще и js-петуч. пашол нахуй!
А то я слышал, что да, но если у меня объект должен жить все время, то почему бы и нет?
> Note: For open-source licensed Qt, some specific parts (modules) are not available under the GNU LGPL version 3, but under the GNU General Public License (GPL) instead.
Иди нахуй, слепой петуч.
Всякие литералы и константы математические - норм
Нихуя пошли манёвры. У тебя базовый модуль многопоточности сразу под тремя лицензиями, в том числе и GPL, а ты тут виляешь жопой. Сейчас может ещё скажешь что половина qt ненужно, да? Так же как он у тебя стал бесплатным, так же и на LGPL натягиваешь, шиз.
И я так и не услышал как в реальном коммерческом проекте использовать qt и не сидеть под анальной проприетарной лицензией. Понабежали тут студенты-прыщевики со своей вымышленной швабодкой, которая кончается ровно в тот момент, когда начинаешь писать код не для хобби.
Да нет в общем то. Но раз уж ты в плюсовом треде, то и пользуйся нарративом, который задает язык, ооп, инкапсуляция и тд. Это как на бэхе картошку возить, довольно странное решение, не находишь?
Любые данные хуй пойми где - зло. Классы с состоянием тоже так-то говно в плане архитектуры. Если зайдёшь в какой-нибудь нормальный проект типа UE5, то там в классах почти нет переменных. У тебя данные должны жить ровно столько, сколько нужно коду и уж тем более не валяться где-то снаружи. Подобное говно только во всяких джавах и сишарпах используется, где фанатичный ООП и бюджеты в десятки мегабайт ОЗУ на вывод Хэлоу ворлда в консоль. А кресты никогда не были чисто ООП-языком, нехуй и стрелять себе в ноги, намеренно оставляя потенциальные места для утечки памяти, багов и ухудшения читаемости кода.
>У тебя базовый модуль многопоточности сразу под тремя лицензиями, в том числе и GPL, а ты тут виляешь жопой
>Что такое dual licensing
Ну йопт тваю мать, тебе же сказали учить матчасть. Написано же английский по-белому "licensing options" - выбирай любую, а ты опять хуйню постишь
>И я так и не услышал как в реальном коммерческом проекте использовать qt и не сидеть под анальной проприетарной лицензией.
Ну тебе же сказали узучать матчасть, там вообще ничего сложного нет.
>Понабежали тут студенты-прыщевики со своей вымышленной швабодкой, которая кончается ровно в тот момент, когда начинаешь писать код не для хобби.
Ты такой молодой и юный, а уже старый закостенелый пердун, который не может RTFM.
Еще и на мелкомягких дрочишь
> выбирай любую
> Qt contains some code that is not provided under the GNU Lesser General Public License (LGPL)
Вот ты хуесосина тупая, любую выбирать можешь только есть оно под LGPL. У тебя в половине модулей нет выбора. У тебя даже Qt Core не весь под LGPL, дегенерат. Не говоря уже про анальную Qt Commercial License, которую ты в любом случае будешь использовать в любом не опенсорс-проекте.
>У тебя даже Qt Core не весь под LGPL, дегенерат.
И тут ты такой с пруфами? Или опять в лужу пердишь?
допустим на собесе спрашивают такое, что бы вы ответили? что это просто число? индекс в массиве байт памяти или как
& взятие адреса - получение адреса объекта в памяти
⚹ разыменование указателя - получение ссылки на объект по адресу указателя
Указатель - переменная, хранящая адрес ячейки памяти (адрес 1 байта объекта). Адрес - целый беззнаковый тип от 0 до 2 ^ (разрядность ОС - 1).
что такое переменная?
область памяти? тогда получается что область памяти хранит адрес ячейки памяти
что такое ссылка?
>что такое переменная?
абстрактная хуетень, которую ты используешь для временного хранения данных. На практике это либо часть стэка, либо область данных из секции данных(для x86-64 это .data)
>что такое ссылка?
Это синтаксический сахар для указателя. Позволяет менять данные в другой области видимости без разыменовывания указателя и прочей ебалы.
Кинь магнит или еще какую нибудь торрент ссылку.
>Адрес - целый беззнаковый тип от 0 до 2 ^ (разрядность ОС - 1).
Хуету несешь.
FAR/NEAR указатель имеет размер, равный разрядности ОС[в битах].
Указатель стека имеет размерность, зависящую от многих факторов, но обычно это 2 байта.
>Что такое перелицензирование и совместимые лицензии?
Б-же какое ты воинствующее необразованность
> FAR/NEAR указатель имеет размер, равный разрядности ОС
А вот теперь уже вы оба пиздите. Указатели бывают разные, но они почти никогда не бывают в полную ширину, если мы про машинный код говорим. Абсолютные адреса почти никогда не используются в реальном машинном коде, не говоря уже про то что не каждая 64-битная инструкция может принять 64-битный адрес в принципе.
>FAR/NEAR указатель
Вспомнил турбо це и прослезился
>они почти никогда не бывают в полную ширину, если мы про машинный код говорим. Абсолютные адреса почти никогда не используются в реальном машинном коде
Подменяешь понятия. Способы адресации в ассемблере - это не указатели.
> перелицензирование
Вот же ты наркоман. Перелицензирование нельзя делать на несовместимые лицензии. У тебя copyleft-лицензии там.
> совместимые лицензии
Тебе там явно пишут что они не доступны под LGPL. Ты совсем дегенерат что ли?
>Перелицензирование нельзя делать на несовместимые лицензии. У тебя copyleft-лицензии
Пруф хоть одной copyleft лицензии в списке
>Тебе там явно пишут что они не доступны под LGPL.
Кто они? Ты можешь матчасть сначала выучить, а потом лезть со своим охуенно важным мнением?
> Кто они?
Модули из Qt, у них список на сайте лежит, блять. Тебе черным по белому написано - те модули доступны только под лицензиями владельцев этих опенсорс-проектов, LGPL не доступна.
>Чтобы один и тот же артефакт работал на любой платформе
Здесь логическая ошибка. Такой высер не работает ни на какой платформе. Точнее, он работает на одной единственной платформе виртуальной машины. Но виртуальные платформы это говно по многим причинам, хотя главная конечно тормоза, но там еще куча говна.
Раз у меня есть компьютер, мне нужны приложения именно под него, под мой компьтер, а не под какую-то левую виртуальную дерьмину. Это дерьмище, а не приложение. Так что этот мемчик "мультиплатформенность" это лозунг пропагандонов дерьма вместо софта. Мультиплатформенность это дерьмо и не нужна, рак убивающий софт, с которым нужно бороться, травить, уничтожать, обоссывать, а не нахваливать.
Ты мало того что матчасть не учишь, так и английского не знаешь?
Код модулей перелицензирован под LGPL, точка.
Прекращай пердеть в лужу, мастдайщик
>Так что этот мемчик "мультиплатформенность" это лозунг пропагандонов дерьма вместо софта. Мультиплатформенность это дерьмо и не нужна, рак убивающий софт, с которым нужно бороться, травить, уничтожать, обоссывать, а не нахваливать.
Тыкнуть бы рожой вот этой базой всем питонистам, шебмакакам, джавистам и сишарперам, для которых "С++ — мертвый язык".
>всем питонистам, шебмакакам, джавистам и сишарперам
Самое смешное, что несмотря на наличие виртуальной машинки, у каждой их параш ровно одна платформа, где они живут, и дальше не вылазят
>>369424
>Что такое глубокая интеграция с системой?
Ахаха, лол. То-то уже даже в мобайлговне отказываются от джавасрикт говна и переписывают всё на нативу
>Поэтому на рынке кресты все менее и менее востребованы.
Каком рынке? Очередных НИИ петухов? Или стартаперов смузихлёбов "теперь я тут кабанчик"?
Вот раньше пиздато было когда чтобы высрать простейшее приложение для винды нужно было winapi изучать, было время когда windows.h решал все вопросики.
И кстат эти программы максимум быстро работают, а вот гоовно построенное на .net через winforms это уже подтормаживает
Ты не осилишь на байтоёбском небезопасном языке с UB писать такое количество бизнес-говна, какое пишут на интерпретируемой параше. Там для заказчиков важна бизнес-логика, а не оптимизация вызовов методов ради 0.0001% перформанса.
>>369431
Не было такого "раньше" никогда. До жаб и петухонов писали бизнес-говно не на байтоёбских языках, а на коболе, PL/SQL, перле и другой хуйне. Байтоёбство всегда было нишевым.
Спасибо, понял. Буду знать. то есть высокороневные всегда были.
>байтоёбском небезопасном языке с UB
>оптимизация вызовов методов ради 0.0001% перформанса.
Хуя шебмакака рвётся, даже не додумалась методичку сменить.
int x{10};
Так вообще делают или все по старинке пишут:
int x = 10;
В языке нет "указателя стека", нет far/near указателей. Есть абстракция, имеющая тип, который я указал. То что ты натужил - это аспекты реализации модели памяти ОС.
https://pastebin.com/mP0HWvne
спасибо. ладно. пожалуйста, скажи, молю а что так сильно gcc от микрософтовского отличается? Ну в плане того какой код генерируется?
Ну mingw короче скачаю. Спасибо. Я уж загуглил что это тотже gcc но под шинду. Мерси.
Есть кнопка, создающая на windows форме массив кнопок. Нужно модифицировать этот код так, чтобы программа создавала эти кнопки в виде цветков. Пытался найти в гугле и что-то нифига дельного не нашел. Код можно глянуть тут https://0bin.net/paste/SxhzkgTX#9gwqRes9DFl4kdmFRL53+BLC-R6x36mzGCxLzG/6FtY
Что значит в виде цветка? Типо что бы они по кругу вокруг первой кнопки? или что бы они были повернуты перпендикулярно касательной относительно центра окружности вокруг которого они вытроились?
>>369712
>>369707
https://ru.stackoverflow.com/questions/672182/Кнопка-произвольной-формы-в-виде-картинки-в-c
Вот попробуй почитай этот запрос на форуме
ааа бля там на C#
Жесть я думал они же давно все в шарпистов переродились
А еще я видел интерпретатор С, где можно говнякать скрипты без компиляции. Для С++ наверно тоже есть, хотя хз - для развлечения слишком сложный проект, а ни для чего больше такое не нужно..
Да.
Ну вообще-то да. И честно говоря устал уже потому что элементарной подсветки комментариев нет. Хорошо хоть комплятор ошибки выдаёт по которым можно понять. Устал от этого. Посоветуй, пожалуйста, редактор кода.
Такого не существует в природе. Шаблоны только после компиляции скажут что ты пидор.
мерси.
Ничего не сравнится с тутроиалами от индусов. Хелло тудэй ай виль шоу ю хау то инсталь визуаль студио ту вазуанд найнтин...
Советую сходить к доктору, у тебя с башкой проблемы.
Да нихуя. До компиляции он может быть нормальным, а после - подчёркнутым красным и с ошибкой.
Блэт а кто же прав, мне одни говорят что в ассемблер а ты говоришь что сразу в двоичный...
Все правы, в разных компиляторах сделано по-разному. В стандарте нигде не сказано "надо обязательно сначала компилировать в ассемблер и только потом в двоичный, иначе у вас не C++".
Спасибо. А как допустим вот излюбленый всеми gcc и g++ компилируют с ассемблером или без? а от майкрософт как?
Он компилирует во внутреннее представление фронтендом, которое потом уже трансформируется бекендом в двоичный код.
Спасибо. Последний воропс и я отстану. А g++ по умолчанию в каком режиме компилирует в debug или release? У меня он компилирует программу, но стоит её переместить за пределы директории комплятора она ругается на отстствие библиотек, подозреваю что режим debug стоит
Очевидно, что если нет std::filesystem::last_write_time, то оно есть в бусте. Либо дёргай посекс или винапи.
Зато есть корутины.
Зато сейчас всегда.
>>359486
Опять я.
Вот только что наткнулся на вот такую хуйню на сайте вскода https://code.visualstudio.com/docs/languages/cpp, пикрел 1. Заставить это дополнение работать у меня не получилось, см пикрел 2.
Собственно, поднимаю тему опять: есть ли кто-то знающий, как отображать описание методов из дефолтных виндузяцких либ? Альттабанье в гугл каждый раз, когда я не могу прочитать название аргумента, в некоторой степени заёбывает. особенно когда я вижу, что отображение документации в интельке это не пиздёж.
На данный момент могу представить только два возможных способа реализации:
1) Где-то раздобыть уже подписанные в формате doxygen файлы хедеров для сдк винды и заменить ими дефолтные
1.5) самому всё подписать нахуй
2) Научить интеллисенс читать doxygen документацию из стороннего архива.
Ни первый, ни второй, я не ебу где и как находить/делать.
Всё ещё испражняюсь в Visual Studio не code, предпочёл бы ide не менять, но если совсем без вариантов - то хз.
шебм для привлечения внимания приложил
debug/release это понятие VisualStudio. Фактически это наборы директив для компилятора, включая пути для объектных файлов, бинарников и всяких вспомогательных файлов типа pdb. Студия всё это делает за программиста. Проекты под gcc часто пишутся на make файлах и им подобных и там какие-то свои рукодельные конфигурации.
Основное отличие debug от release это уровень оптимизации генерируемого кода. В случае с g++ задаётся флагом -O{0.2.3}. По умолчанию -O0 то есть без оптимизации, что эквивалентно debug. При этом если ты ничего более не указываешь, то всё будет валиться в одну папку перезаписывая то, что там есть.
А то что у тебя бинарь не запускается, так это дело не в уровне оптимизации. Зависимые модули должны либо лежать в одной папке, либо система должна знать где их искать. Допустим в лялексе их надо кинуть в /usr/local/lib и дёрнуть ldconfig.
>Заставить это дополнение работать у меня не получилось, см пикрел 2.
Не исключаю свою рукожопость, кстати. У меня очень хуёво получалось работать с плюсами в vscode потому что, в отличии от вижуал студии, с компилятором приходится работать чуть ли не напрямую
С наследованием один тип вообще замудрил. Создал класс А, в нем переменную, унаследовал в класс Б, там унаследованную переменную посчитал со второй. После перекинул все это в класс В и вывел. Пиздец просто. Аноны, приведите, пожалуйста, примеры, где ООП облегчает работу, или без него вообще нихуя работать не будет. Заранее спасибо.
ООП как и почти все в программировании придумали для управления сложностью. Дебильные примеры про жуков, работников и т.п. из учебников вообще не дают понятия нахрена это надо, там слишком простые структуры данных и управления. Надо сразу давать делать что-то более менее структурно сложное, а когда человек охуеет от ифов - показывать как это элегантно решается с ООП
В ассемблер раньше компилировали потому что ассемблер обычно уже был написан, для простоты. Современным компиляторам это обычно не надо, в ассемблер лезут только для использования редких опкодов, которые компилятор не вывозит.
Значит у тебя не очень хороший статический анализатор, не думал об этом? Мой пишет варнинги даже на то, на что гцц пофиг.
Ну я понимаю опп, как свой тип данных. Вот у нас есть int, float, string. Я представляю это все ввиде коробочек в которые мы ложим значения и при необходимости можем их достать. А вот иногда нужно к примеру написать такую коробочку, но которая была бы с функционалом, например нужно написать коробочку в которую ты ложишь int, она этот int принимает в себя, но когда ты захочешь взять обратно, то что в ней лежит, то ты можешь попросить коробочку: "А ну ка, коробочка, выдай мне значение которое я тебе дал, но что бы оно было не в int, а в string. (типо положили число 123, а когда захотели получить в string, то получили строку "123")". Или же эта коробочка может вычислять квадратный корень, числа которого положили, и тебе не нужно писать sqrt(переменная), ты просто пишешь коробочка.квадратный_корень_числа_которое_лежит_в_тебе. Просто так удобно, и это позовляет писать меньше кода, но программа может становиться более многофункциональной. Ты просто знаешь что у тебя есть объекты с такими то функциями и такими то данными. Ну и опять же, с жучками пример. Допустим ты пишешь игру - шутер, где нужно стрелять по жукам, и в зависимости от того куда ты попадешь, наноситься жуку разный урон. Допустим есть класс Жук, и у него есть следующие поля(переменные класса):
int Здоровье_жука;
координата Голова_жука;
координата Тело_жука;
координата Усы_жука;
координата Ноги_жука;
Также у жука есть метод(функция класса):
int проверить_попадание(координата координата_пули);
{
if(координата_пули == Голова_жука)
{
return 50;
}
if(координата_пули == Тело_жука)
{
return 10;
}
if(координата_пули == Усы_жука)
{
return 5;
}
if(координата_пули == Ноги_жука)
{
return 5;
}
return 0;
}
В классе Жук я использовал, класс(тип переменных) координата
Он имеет следующие поля
class координата
{
public:
int x;
int y;
//По хорошему нужно еще написать переопределение оператора == для класса координата, что бы можно было писать вот так - координата1 == координата2, типо что бы научить понимать компьютер, что из них больше, а что меньше. Но я ни разу не переопределял операторы(Не было нужды), поэтому не знаю как это делается.
}
Так вот теперь когда ты стреляешь, можно в каждом цикле игры вызывать следующий алгоритм: Жук.Здоровье_жука = Жук.Здоровье_жука - Жук.проверить_попадание(координата_пули);
Ну вообщем ооп нужны что бы меньше кода плодить, это все равно что не использовать функции, а просто брать и копировать код. Гораздо легче написать функция такая то вот тебе данные сделай с ними что то. Чем каждый раз Ctrl+V код вставлять.
Ну я понимаю опп, как свой тип данных. Вот у нас есть int, float, string. Я представляю это все ввиде коробочек в которые мы ложим значения и при необходимости можем их достать. А вот иногда нужно к примеру написать такую коробочку, но которая была бы с функционалом, например нужно написать коробочку в которую ты ложишь int, она этот int принимает в себя, но когда ты захочешь взять обратно, то что в ней лежит, то ты можешь попросить коробочку: "А ну ка, коробочка, выдай мне значение которое я тебе дал, но что бы оно было не в int, а в string. (типо положили число 123, а когда захотели получить в string, то получили строку "123")". Или же эта коробочка может вычислять квадратный корень, числа которого положили, и тебе не нужно писать sqrt(переменная), ты просто пишешь коробочка.квадратный_корень_числа_которое_лежит_в_тебе. Просто так удобно, и это позовляет писать меньше кода, но программа может становиться более многофункциональной. Ты просто знаешь что у тебя есть объекты с такими то функциями и такими то данными. Ну и опять же, с жучками пример. Допустим ты пишешь игру - шутер, где нужно стрелять по жукам, и в зависимости от того куда ты попадешь, наноситься жуку разный урон. Допустим есть класс Жук, и у него есть следующие поля(переменные класса):
int Здоровье_жука;
координата Голова_жука;
координата Тело_жука;
координата Усы_жука;
координата Ноги_жука;
Также у жука есть метод(функция класса):
int проверить_попадание(координата координата_пули);
{
if(координата_пули == Голова_жука)
{
return 50;
}
if(координата_пули == Тело_жука)
{
return 10;
}
if(координата_пули == Усы_жука)
{
return 5;
}
if(координата_пули == Ноги_жука)
{
return 5;
}
return 0;
}
В классе Жук я использовал, класс(тип переменных) координата
Он имеет следующие поля
class координата
{
public:
int x;
int y;
//По хорошему нужно еще написать переопределение оператора == для класса координата, что бы можно было писать вот так - координата1 == координата2, типо что бы научить понимать компьютер, что из них больше, а что меньше. Но я ни разу не переопределял операторы(Не было нужды), поэтому не знаю как это делается.
}
Так вот теперь когда ты стреляешь, можно в каждом цикле игры вызывать следующий алгоритм: Жук.Здоровье_жука = Жук.Здоровье_жука - Жук.проверить_попадание(координата_пули);
Ну вообщем ооп нужны что бы меньше кода плодить, это все равно что не использовать функции, а просто брать и копировать код. Гораздо легче написать функция такая то вот тебе данные сделай с ними что то. Чем каждый раз Ctrl+V код вставлять.
спасибо понял. просто проблема в том что эти модули не относятся к моей программы этоо библотеки комплятора самогоо. на другом компляторе она компилировалась и без всяких проблем перемащалась.
в любом случае сппасибо анон, годно пишешь. пойду тогда сам гуглить не буду тебе на мозг садиться
Спасибо анон, за поправочку тоже.
https://pastebin.com/mP0HWvne
Написать функцию преобразования координат из оконных в координаты графика и обратно? При преобразовании запоминать реальные координаты, потом их восстанавливать.
Json
ой да ладно, по большому счету в бусте из действительно нужного только asio так как предоставляет кроссплатформенную обертку для асинхронного io
А как же сигналы и слоты?
Бамп
Работать начни, писать большие проекты и поймешь. Вообще ооп не панацея, тем более с современного взгляда на прогу, но без него не обойтись в любом болилимени крупном проекте, это коммерческий подход, профессиональный код над которым могут работать сразу несколько человек
https://hastebin.app/629afff9191a62001c35ebaf
Сейчас вообще никаких ошибок, даже если туда написать хело ворлд.
зачем рыться в каких то унылых доках, когда гномики на форумах готовы отвечать на любой банальный вопрос
Затем что мозг усохнет и ты не вкатишься.
>sprintf_s(buf, "C:/Users/user/Desktop/test/test%d.txt", i);
Читаю https://docs.microsoft.com/ru-ru/cpp/c-runtime-library/reference/sprintf-s-sprintf-s-l-swprintf-s-swprintf-s-l?view=msvc-170, а там
>int sprintf_s(char buffer, size_t sizeOfBuffer, const char format,...);
Ты неправильно функцию вызываешь
А все, сори.
Приказываю тебе в кратчайшие сроки осуществить перекат треда. Об исполнении доложить.
боец ты охуел? наряд в /b/ вне очереди
shared_ptr неатомарный, так что потом очком своим за него расплатишься. А так да, копейки.
У меня с порядком норм. Я его последовательно тягаю
Все таки в qt creator, а не в хуй знает в чем. Уточнил
А, лол. Это несколько модулей, а не умножение. Но все равно вопрос остается таким же
1) запретить пользователю вообще удалять объекты
2) Разрешить, но делать это при выходе из приложения когда все операции с объектами завершены
3) (Кстати это уже походит не на костыль, а на решение). Написать обертку, которая кстати будет потокобезоасность обеспечивать и которая будет за запросы к объекту возвращать shared_ptr на него и в случае если пользователь хочет удалить объект, проверять, что на него указывает всего один умный указатель и удалять. Иначе давать ошибку.
Мнения?
ub из-за чего? У тебя итерация по мапе на серверсайде? Тогда это iterator invalidation.
Если же на сервер сайде ты просто дергаешь по ключам элементы, то в чем проблема делать if (find(…)) {} ?
Хочешь что то сделать, гуглишь как это сделать, копипастишь. Всё, постепенно разберешься если регулярно писать будешь что-то. Ну а если нет, то и нахуй не надо
Вроде сейчас большая часть языков компилируются в LLVM IR где можно провести оптимизации под процессор/архетектуру.
Длинная и нудная лекция на эту тему https://youtu.be/rLshTsxgDcw
Насколько помню shared_ptr имеет интересный контрольный блок. Он считает ссыки на shared_ptr и weak_ptr Если кол-во ссылок на шаред равно нулю - он удаляет объект, но продолжает существовать если есть живые ссылки слабый указатель.
Бля, я жоска уебался при попытке реализовать третий вариант. Я с атомными умными указателями не работал. Ладно, выглядит не запредельно сложно. Потом напишу как нибудь.
Тот чел не совсем прав. Дебаг/релиз это не уровень оптимизации. В дебаге в бинарник добавляется отладочная информация
Спасибо большое за дополнение возьмём на заметку, анон.
Там даже на уровне стл различия, в дебаге вектор проверяет выходы за пределы памяти например.
Мерси.
сап двачик, помогите ньюфагу.
1. Зачем нужны аргументы функции? в чем заключается принципиальное отличие присваивания значения переменной через вызов функции и просто объявлением?
2. Зачем нужны указатели? Только для работы с памятью?
Тот чел сказал ((основное отличие)).
Есть ещё ряд функций и макросов типа std::assert, которые убираются в "release" версии.
А то что отладочных символов нет в release версии - это ты жиденько серишь. Ты можешь дебажить и релизную версию. Чтобы удалить символы из объектника ему надо делать strip (команда в лялексе такая).
> лялексе
Никто этим говном не пользуется, в нормальных ОС отладочные символы всегда отдельно от бинарника в pdb лежат.
1. Чел использует mingw / GCC / g++.
2. pdb генерируется и для release, то есть отладочные символы есть ((всегда)).
>Зачем нужны указатели? Только для работы с памятью?
Указатель указывает на кусок памяти. При том память может быть как данными, так и функцией. Архитектура фон Неймана едить её.
>в чем заключается принципиальное отличие присваивания значения переменной через вызов функции и просто объявлением?
Не совсем понял вопроса.
Нормально ли писать так сеттер? Можно ли сделать лучше?
Чел, ну что за хуита? Ты в прошлом треде что ли подхватил про std::move? Иди читай про copy elision и учись правильно пользоваться им. А ещё концепт убери, у тебя там одинаковые методы генерятся ещё и с кучей оверхеда, хотя строку можно и без этого говна в одну функцию передавать.
1) в аргументах функции
2) в переменных внутри функции
3) в полях класса/струткуры
Я байтодебил кукож либераха, так что если че пойму на низкоуровневых примерах, мне так проще.
Как я понимаю && в описанном тобой контексте используется как обозначение Rvalue. Если смотреть глубже, то это короткоживущие объекты которые будут очень скоро удалены. Это позволяет тебе реализовывать вместо копирования - перемещение. К слову после функции можно то же поставить один или два амперсанта, что позволит компилятору вызывать разные функции при встрече с разными ссылками.
>Это позволяет тебе реализовывать вместо копирования - перемещение
падажжи это как? Ка кэто реализовано? Вот копирование понятно как, mov dest, src
или load effective address
Это волшебная крестовая абстракция, впиленная в язык с целью повышения количества UB в коде.
>впиленная в язык с целью повышения количества UB в коде.
То бишь хуйня без задач правильно пынямаю?
Ну на сколько я помню lvalue - это у чего есть адрес в памяти, а rvalue - всё остальное (вроде есть ещё xvalue и gvalue но это фетишистам любящим стандарт оставим)
К примеру, если ты создал пустой объект и хочешь его инициализировать через левую ссылку, то тебе надо копировать все поля источника. Если там есть указатель на кусок памяти, то тебе надо выделить новый кусок и скопировать данные туда. И у тебя будет 2 одинаковых не зависящих друг от друга объекта
Если ты используешь правую ссылку для инициализации. Это значит, что источнику, откуда ты копируешь жить осталось 2 понедельника. И можно не выделять память, дрочить указатели и так далее. А просто свапнуть их местами.
Как пример - строки. Вроде с 11 года COW (копирование при записи) строки в стандарте запретили. По этому копируя строку по левой ссылке ты будешь выделять память. А через правую - просто переместишь.
Ну только из временного объекта жи.
Или лучше создать указатель a и использовать его?
&& нужно, чтоб перегружать функции; можешь ебануть
int f(int &x) {return x;}
int f(int &&x) {return x + 1;}
и попробовать вызвать каждую из них всякими разными способами, маленько ощутишь, как оно работает
перегрузку с && у тебя получится вызвать с хуйнями, у которых имени нет, вроде литералов f(0) -> 1 или те штуки, которые вернула другая функция f(f(0)) -> 2
если у тебя уже есть переменная, вроде
int x = 0;
то ты можешь вызвать перегрузку с && вот так:
f(static_cast<int &&>(x));
это и есть знаменитый std::move, который нихуя не двигает, а просто кастует
эта хуетень появилась примерно так -- пиздец как захотелось сделать альтернативу копированию, а именно -- перемещение, которое получает ссылку на объект, уродует его, пиздит все ресурсы и так далее, но!
непонятно епта как между перемещением и копированием различать, как кого вызывать, какие у уонструкторов сигнатуры должны быть, типа T(T const &) и T(T &)? ты как минимум ебанешься педалить код так, чтобы вызывалось то, что нужно.
ну и придумали хитровыебанные ссылки с хитровыебанными правилами. что тут хитровыебанного, казалось бы?
вспомним выше определенные f(int &) и f(int &&) и ебанем вот такое:
template<typename T>
auto g(T &&x) {return f(x);}
ну и как ты думаешь, что вернет g(0)? 0 ебать, вот так вот!
чё происходит? T честно выводится как int, это можешь проверить сам; значит, что-то нехорошее происходит при вызове f(x)
знакомься ебать, правило схлопывания ссылок!
предлагается мыслить примерно так: упоминание переменной это же ну типа ты на переменную ссылаешься, да? так вот, при упоминании переменной ты прихуяриваешь к её типу &, вот и сослался. был у тебя int &&, стал int && &, и как-то дохуя стало этих &&&, поэтому, мы их схлопнем:
T & & -> T &
T & && -> T &
T && & -> T &
T && && -> T &&
запоминай как хочешь, лично мне напоминает булеаны и логическое умножение, или сложение, да в принципе похуй
ну вот тебе и разгадка: если был какой-то x с типом int &&, он входит в f(x) как int && & -> int &, соответственно, получается 0
ответом на вопрос "сука я хочу чтобы ссылка осталась такой, какой я её сунул в первую функцию" является конструкция std::forward<T>(x), где x был объявлен как T && -- это важно, именно &&, именно под эту хуйню и написали этот несчастный forward -- он, зная T и зная, какой получился x, выдаёт всё, как ты хочешь
&& нужно, чтоб перегружать функции; можешь ебануть
int f(int &x) {return x;}
int f(int &&x) {return x + 1;}
и попробовать вызвать каждую из них всякими разными способами, маленько ощутишь, как оно работает
перегрузку с && у тебя получится вызвать с хуйнями, у которых имени нет, вроде литералов f(0) -> 1 или те штуки, которые вернула другая функция f(f(0)) -> 2
если у тебя уже есть переменная, вроде
int x = 0;
то ты можешь вызвать перегрузку с && вот так:
f(static_cast<int &&>(x));
это и есть знаменитый std::move, который нихуя не двигает, а просто кастует
эта хуетень появилась примерно так -- пиздец как захотелось сделать альтернативу копированию, а именно -- перемещение, которое получает ссылку на объект, уродует его, пиздит все ресурсы и так далее, но!
непонятно епта как между перемещением и копированием различать, как кого вызывать, какие у уонструкторов сигнатуры должны быть, типа T(T const &) и T(T &)? ты как минимум ебанешься педалить код так, чтобы вызывалось то, что нужно.
ну и придумали хитровыебанные ссылки с хитровыебанными правилами. что тут хитровыебанного, казалось бы?
вспомним выше определенные f(int &) и f(int &&) и ебанем вот такое:
template<typename T>
auto g(T &&x) {return f(x);}
ну и как ты думаешь, что вернет g(0)? 0 ебать, вот так вот!
чё происходит? T честно выводится как int, это можешь проверить сам; значит, что-то нехорошее происходит при вызове f(x)
знакомься ебать, правило схлопывания ссылок!
предлагается мыслить примерно так: упоминание переменной это же ну типа ты на переменную ссылаешься, да? так вот, при упоминании переменной ты прихуяриваешь к её типу &, вот и сослался. был у тебя int &&, стал int && &, и как-то дохуя стало этих &&&, поэтому, мы их схлопнем:
T & & -> T &
T & && -> T &
T && & -> T &
T && && -> T &&
запоминай как хочешь, лично мне напоминает булеаны и логическое умножение, или сложение, да в принципе похуй
ну вот тебе и разгадка: если был какой-то x с типом int &&, он входит в f(x) как int && & -> int &, соответственно, получается 0
ответом на вопрос "сука я хочу чтобы ссылка осталась такой, какой я её сунул в первую функцию" является конструкция std::forward<T>(x), где x был объявлен как T && -- это важно, именно &&, именно под эту хуйню и написали этот несчастный forward -- он, зная T и зная, какой получился x, выдаёт всё, как ты хочешь
а, забыл добавить
в итоге, люди пишут примерно так:
struct T
{
----int a;
----T(T const &t) : a(t.a) {} // copy
----T(T &&t) : a(t.a) {t.a = 0;} // хитровыебанный move
};
че где копируется и перемещается:
T t1 = {1};
1. переменная копируется:
T t2(t1);
// t1.a -> 1, t2.a -> 1
2. перемещённая переменная перемещается:
T t2(static_cast<T &&>(t1));
или, более человечно, T t2(std::move(t1));
// t1.a -> 0, t2.a -> 1
3. безымянное перемещается:
T t3(T{2});
// t3.a -> 2, безымянное сначало обнулилось, потом умерло
4. константное хуй переместишь, скопируется:
T const t4(t1);
T t5(std::move(t1));
// t4.a -> 1, t5.a -> 1
потому что T const && может превратиться в T const &, а в T && не может. спасибо, что конст
а, забыл добавить
в итоге, люди пишут примерно так:
struct T
{
----int a;
----T(T const &t) : a(t.a) {} // copy
----T(T &&t) : a(t.a) {t.a = 0;} // хитровыебанный move
};
че где копируется и перемещается:
T t1 = {1};
1. переменная копируется:
T t2(t1);
// t1.a -> 1, t2.a -> 1
2. перемещённая переменная перемещается:
T t2(static_cast<T &&>(t1));
или, более человечно, T t2(std::move(t1));
// t1.a -> 0, t2.a -> 1
3. безымянное перемещается:
T t3(T{2});
// t3.a -> 2, безымянное сначало обнулилось, потом умерло
4. константное хуй переместишь, скопируется:
T const t4(t1);
T t5(std::move(t1));
// t4.a -> 1, t5.a -> 1
потому что T const && может превратиться в T const &, а в T && не может. спасибо, что конст
opengl это альтернатива directx или они вместе могут быть в в проекте?
Это инструмент для управления видеокартой. Как и vulkan и metal api. Их основное назначение - рисовать на мониторе. Ты можешь их включить в один проект, дабы была кросплатформенность. Но тебе нужно тогда будет придумывать более абстрактную обвязку к ним.
Да, альтернатива, ты либо используешь одно, либо другое.
почему подчеркивает ошибкой
и зачем во всех гайдах пишут вот так?
it = listConnection.erase(it);
почему нельзя просто удалить элемент, а нужно обязательно приравнивать итератор, типо приудалении он возвращает теперь новый элемент который теперь занял его место?
Back это не итератор, а ссылка на элемент.
Используй auto.
Ну и до кучи https://en.m.wikipedia.org/wiki/Erase–remove_idiom
auto it = huita.back();
ну я не хочу использовать auto, и как мне удалить последний элемент листа? end() - 1?
ох ё, точно, я забыл что такое есть
Предположу что в классе connection у тебя есть буфер вида char buff[16424]. Либо убирай флаг компилятора (или это санитайзер/решарпер/или что там у тебя стоит) либо выделяй в куче через new int[size].
но ведь лист выделяет данные в куче, то как может быть что элемент char buff выделиться не в куче.
это на работе, какой дали с таким и сижу, я до этого пользовался монитором 4 на 3, 1240 на 1024. Нормально, удобно, иногда приходиться шею чуть чуть поворачивать, что бы нужное увидеть
Выражение в скобках (connection()) это создание временного безымянного объекта на стеке, которое потом копируется/сдвигается в новый элемент std::list (который создан в куче).
и удалить патом
Вот допустим у меня есть класс повар, готовящий печенья и класс, продавец эти печенья продающий, оба работают в отдельных тредах. И как вы сообщите продавцу что печенье готово и положите его в ящик очередь на продажу? На кутах понятно, просто сигнал вызвать соединяющий два класса.
Кстати что вообще про сигналы-слоты думаете? Есть какие то подводные камни использования? Я пока не столкнулся, по-моему очень крутая штука. Подобное вообще есть в ядре других языков?
> На кутах понятно, просто сигнал вызвать соединяющий два класса.
Это подход всяких джаваскриптов: верить в магию, не задумываться, как она работает, хуйнул готовый компонент из фреймворка, и всё заебись. Хотя хватило бы обычной конкурентной очереди.
Никак. Куты и существуют чтобы дрессировать макак-рабов которые без кутов не могут. Хитрожопая схема подсаживать на зависимость всякий слабохарактерный сброд, которого всегда дохуя, а значит стабильный бизнес гарантирован.
я хотел сделать типо два класса foo::bar::win32::Window и foo::bar::x11::Window, и потом написать
using foo::bar::win32
или
using foo::bar::x11
чтобы можно было писать win32::Window или x11::Window
но так нельзяяЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
хайпово спасибо
Вот 2 файла в ебучей папке блять делаю всё сука по ебаному официальному гайду с их ебаного сайта блять и комплятор писал команды и чё только не далл и всё равно саука он не привязываей её нахуй. блять заебался уж сукас блять эта хуйня
Ну помогите эту хуйню блять слинковать пиздец я на эту залупу ебаную времени выкинул.
Уже и блять вставлял туда оригинальный файл кэтому заголовку ебаному который sqlite.c и с ним комплировал и в связке блять и dll библоетку высрать пытался по официальной команде из гайда с оф сайта к моему копилятору один хуй ошилбки ошибки блять ебаные ошибки сука нахуй тогда вообще эти гайды ебаные елси там одни ошибки блять лучше бы вообще не пислаи нахуй
Ну как блять ну почему эта залупа пиздец что она не видит эту ебаную бибилиотеку ну в чём дело от блять7 Ну сука же объявлена она как в той же директории блять лежит там файл ну сука ну что блять что блять не так то нахуй что блять не атк ёбаная тварь?
Никак. Я не могу собрать эта ёбаную хуйню. Вот вот я слинковал нахуй по официальному гайду нахуй официальной командой блять вот оно нахуй .dll библиотека эта ебаная блять вот что у меня вышло блять сука. Не комлилируется ни библиотека, ни на голую этот ебаный файл не подключается НИ-ХУ-Я. нахуя этот гайд писали не знаю блять, с таким же блять усппехом могли бы и не писат эту хуйню ебаную
Я просто тупо беру и голвый .h файл инклюдом включаю и всё.
Ссылка на ссаный бесполезный ебаный гайд по компиляции https://www.sqlite.org/howtocompile.html
Я уже блядь эту ебаную библотеку с исходниками и в дефолтные либры комплятора впихивал и чё только блядь я не делал я уже блять не знаю как эту хуйню сликновать блять я сука блять ненавижу нахуй эту поеботину ебаную блять сука. Мне блять хуйню делать надо блять я на этой хуйне ебаной сижу из за того что эти гайды ебаные поеботина блять и эти пидоарсы из формов SOLVED блять которые пишту очевидную хунйю ой а блядь добавьте инклюд нахуй вы забыли её включить ВОТ Я ДОБАВИЛ НАХУЙ НЕ РАБОТАЕТ СУУУУУУУУУУУУУУУУУУУУУУУУУУУУУУУУУУУУУУУУУУУУУУУУКА
>>374735
>>374735
>>374735
ОООООООООООООО КАЕФ ЭТО СКОМПИЛИРОВАЛОСЬ ВМЕСТЕ С .DLL БИБЛЕОТКОЙ. ТАКОЙ КАЕЕЕЕФ ПОЙМАЛ БЛИН. Ребят спасибо огромное вам.. ООООО ОНО СКОМПИЛИРОВАЛОСЬ НАКОНЕЦ-ТО Я СМОГ ЗАГРУЗОЧНЫЙ МОДУЛЬ ДОПИСАТЬ А ТО Я ОХУЕЛ СО ВЧЕРАШНЕГО ДНЯ.
не люблю просто когда на хуйне останвлвиается всё
А вот они пробелы в знании о работе компляторов и компоновщиков...
Типо после того как я удалил элемент списка, то функция erase вернула елемент который при удалении занял его место, тоесть если у меня одно соединение, то у меня получается удаляется единственный элемент, и патом он заменяется end(), а так как у меня в конце каждой итерации i++, то итератор пытается выйти за приделы списка и получается ошибка, так что ли? И как это обойти? А почему во всяких примерах это работает, а у меня нет?
ну да, так и есть, блять какие же контейнеры уебанские в stl
Да нормальные там контейнеры, просто они обмазаны универсальностью.
Нормальный человек напишит это гораздо проще через remove_if
нет, не лабу, но эта программа ни куда не пойдет
Пиздеж. Вакансий вообще нет для вкатунов. Учи шарп, там тоже особо не надо знать левые фреймворки, всё свое. Лучший язык для вката и первой работы.
лично мне повезло я вкатился в работу на С++ с уровнем знания - я умею создавать классы и писать функции.
У меня специальность не программистская, у меня на 1 курсе было программирование С++, а дальше я сам изучал чуть чуть. Начал пытаться устраиваться на разные работы, делал тестовые задания, попутно изучая С++, меня не брали, а патом взяли. уже 5 месяц работаю
Начнем с того что это база. Закончим тем что написано дебильно и некрасиво, даже исправленная версия
std::erase_if / remove_if
Понял, спасибо
А зачем нужен указатель на указатель? В чём смысл? Почему просто не передать сразу указатель зачем на него указатель делать?
Для вката достаточно получить техническое образзование и потом идти в гос или окологос контору. Сложен не сам вкат, а поиск сытого места в позиции мидл.
В текущих реалиях язык самодостаточен. В довесок может идти немного питона, Qt / boost, линукс и git. Всё остальное сильно специализировано и вкатуну не нужно.
Смысл в том, что есть такой ущербный язык как C. В этом чудесном языке нет ссылок. И вот допустим тебе надо из функции вернуть через параметры объект, созданный в функции:
Вот так не сработает:
void func(object⚹ obj_ptr ) { obj_ptr = malloc(...); }
object⚹ ptr = NULL;
func(ptr); // ptr == NULL
потому что ptr передаётся по значению и в func это локальная переменная
Поэтому передают указатель на указатель:
void func(object⚹⚹ obj_ptr ) { ⚹obj_ptr = malloc(...); }
object⚹ ptr = NULL;
func(&ptr); // ptr != NULL
И соответственно ⚹⚹ это обычно либо код, который писал говноед, перекатившийся из С, либо это использование компонент, написанных на C.
Спасибо, анон годно расписал. Да я sqlite функции изучаю там на с написано
Либо это двумерный массив, например матрица
int matrix = new int*[4];
for (int i = 0; i < 4; ++i)
matrix = new int[4];
>А зачем нужен указатель на указатель? В чём смысл?
Чтобы вернуть указатель, очевидно.
Ошибка нубов и дебилов >>375245 в том, что они думают что указатель это что-то особенное (типа ссылки), но это чушь. Указатель это просто переменная, как любая другая переменная. А что там конкретно хранится в переменной, тебя ведь не ебёт, когда ты учишь что такое переменные, верно?
Смотри где ошибка:
Почему ты считаешь, что вернуть указатель на переменную int (int = число → переменная с числом) это имеет смысл, а указатель на переменную-указатель (указатель = число → переменная с числом) смысла не имеет? Это же чушь ёбаная, это буквально одно и то же. Указатель это никакая не ссылка, а переменная с числом (адресом), именно поэтому ссылка на ссылку не имеет смысла, а указатель на указатель имеет. Потому что ссылка не имеет смысла без того на что она ссылается, ссылка это лишь алиас, псевдоним, а указатель имеет, это самостоятельная переменная (с числом, но содержимое без разницы) кк любая другая, а переменная самодостаточна, ей кроме самой себя больше ничего не нужно. Переменные нужны ради их самих, их содержимого, а ссылки это абстракция, просто еще одно имя для чего-то другого.
Ты ведь согласен, что переменные нужны, верно? И указатели на переменные нужны, верно? Следовательно и указатели на указатели нужны, ведь указатели это и есть переменные. Указатель на указатель = указатель на переменную. Как можно спиздануть что это не имеет смысла?
Итого:
Указатель на указатель нужен там, где нужно вернуть адрес, что тут непонятного? Почему вернуть например структуру через указатель это нормально, а вернуть например адрес через указатель это что-то странное? Ничего странного, адреса - нужны, как и всё остальное, а значит и указатели на переменные с адресами (указатель) тоже нужны.
---
А то, что указатель можно разыменовать изображая из него ссылку, это свойство РАЗЫМЕНОВАНИЯ, а не указателя. Указатель и процесс разыменования это отдельные вещи, не надо их лепить в одно.
Указатель это просто переменная с адресом (числом). Адрес это ссылка на память, а память вся одинаковая, состоит из одинаковых байтов, так что все адреса одинаковые, а соответственно и указатели - переменные их содержащие тоже одинаковые. Поэтому придумали дурацкий тип void который ничего не значит, а служит только для указателей, как затычка для несуществующего нечто, на которое этот адрес якобы ссылается - в никуда, ибо в контексте текста программы нет такого объекта "память", есть только объекты данных в хранящиеся в памяти. А адрес не подразумевает никаких объектов, это всего лишь место в памяти, ячейка ОЗУ, - void, пустой несуществующий объект, точнее самой концепции объекта не существует, но синтаксис языка требует объекта, вот и затычка.
Так вот, вернувшись к началу. Указатель это не ссылка, ссылкой является разыменование, поэтому для разыменования нужен объект-цель как для любой ссылки. Но указателю это не нужно, не его проблемы.
>А зачем нужен указатель на указатель? В чём смысл?
Чтобы вернуть указатель, очевидно.
Ошибка нубов и дебилов >>375245 в том, что они думают что указатель это что-то особенное (типа ссылки), но это чушь. Указатель это просто переменная, как любая другая переменная. А что там конкретно хранится в переменной, тебя ведь не ебёт, когда ты учишь что такое переменные, верно?
Смотри где ошибка:
Почему ты считаешь, что вернуть указатель на переменную int (int = число → переменная с числом) это имеет смысл, а указатель на переменную-указатель (указатель = число → переменная с числом) смысла не имеет? Это же чушь ёбаная, это буквально одно и то же. Указатель это никакая не ссылка, а переменная с числом (адресом), именно поэтому ссылка на ссылку не имеет смысла, а указатель на указатель имеет. Потому что ссылка не имеет смысла без того на что она ссылается, ссылка это лишь алиас, псевдоним, а указатель имеет, это самостоятельная переменная (с числом, но содержимое без разницы) кк любая другая, а переменная самодостаточна, ей кроме самой себя больше ничего не нужно. Переменные нужны ради их самих, их содержимого, а ссылки это абстракция, просто еще одно имя для чего-то другого.
Ты ведь согласен, что переменные нужны, верно? И указатели на переменные нужны, верно? Следовательно и указатели на указатели нужны, ведь указатели это и есть переменные. Указатель на указатель = указатель на переменную. Как можно спиздануть что это не имеет смысла?
Итого:
Указатель на указатель нужен там, где нужно вернуть адрес, что тут непонятного? Почему вернуть например структуру через указатель это нормально, а вернуть например адрес через указатель это что-то странное? Ничего странного, адреса - нужны, как и всё остальное, а значит и указатели на переменные с адресами (указатель) тоже нужны.
---
А то, что указатель можно разыменовать изображая из него ссылку, это свойство РАЗЫМЕНОВАНИЯ, а не указателя. Указатель и процесс разыменования это отдельные вещи, не надо их лепить в одно.
Указатель это просто переменная с адресом (числом). Адрес это ссылка на память, а память вся одинаковая, состоит из одинаковых байтов, так что все адреса одинаковые, а соответственно и указатели - переменные их содержащие тоже одинаковые. Поэтому придумали дурацкий тип void который ничего не значит, а служит только для указателей, как затычка для несуществующего нечто, на которое этот адрес якобы ссылается - в никуда, ибо в контексте текста программы нет такого объекта "память", есть только объекты данных в хранящиеся в памяти. А адрес не подразумевает никаких объектов, это всего лишь место в памяти, ячейка ОЗУ, - void, пустой несуществующий объект, точнее самой концепции объекта не существует, но синтаксис языка требует объекта, вот и затычка.
Так вот, вернувшись к началу. Указатель это не ссылка, ссылкой является разыменование, поэтому для разыменования нужен объект-цель как для любой ссылки. Но указателю это не нужно, не его проблемы.
>Чтобы вернуть указатель, очевидно
Нет. ⚹⚹ это также и способ задания многомерных массивов переменной длины. Например >>375253. Соответственно void func(int⚹⚹ matrix) работает с матрицей и никаких указателей не возвращает.
В мире c++ подобная неоднозначность устраняется с помощью ссылки: void func(int⚹& vector). Если ты попытаешься в такую функцию передать матрицу, то получишь ошибку компиляции. Если же напишешь в стиле C, то получишь утечку/порчу памяти в рантайме.
Ссылки в языке с++ нужны для того, чтобы более точно и лаконично описывать поведение кода.
>указатель на переменную-указатель смысла не имеет
Многоэтажные указатели несут те же проблемы, что и c-style cast.
>чушь ёбаная, это буквально одно и то же
Вот такая операция неявно снимает константность:
int⚹⚹ a = nullptr;
const int⚹⚹ b = nullptr;
b = a;
Компилятор C++ выкинет ошибку, потому что такое в языке запрещено. Компилятор C скажет малаца и в рантайме будет беда.
Для обычных указателей такое присваивание легально.
Сорян, я не читал выше, просто прокомментировал насчет двойных указателей, зачем они нужны, что ответ самоочевиден. Если конечно понимать что такое указатели, а не путать их со ссылками.
>void func(int⚹⚹ matrix)
Если написал говнокод язык не виноват. Для матриц не нужны указатели, значит и нечего их пихать. Оберни как-нибудь красиво, чтобы без граблей пользователю твоих функций, включая тебя самого.
аа ну так то да, мне же звездочку не приходится ставить при использовании
А твоя ошибка в том что ты думаешь будто бы переменная со звёздочкой - это реальный указатель. Нихуя подобного. Никто тебе не гарантирует что не получится dangling pointer после оптимизации. Делать указатель на указатель в крестах - быть конченым дебилом. Для борьбы с даунами уже даже volatile пытаются из языка убрать.
>Никто тебе не гарантирует что не получится dangling pointer после оптимизации. Делать указатель на указатель в крестах - быть конченым дебилом.
Опять высосанный из пальца говнокод? Я же вроде ясно писал - возврат указателя. Твоя оптимизация его поломает? Нет? Ну вот и ответ.
Дауны это клоуны мнящие себя умниками, сидят придумывают хуйню как поломать компилятор. Ну поломал, и что? Зачем ты нужен такой?
> Твоя оптимизация его поломает?
Она может его поломать потом, когда ты его станешь использовать.
char* d = new char[9];
for (int i = 0; i < 4; i++)
{
d = (rand() %10)+'0';
}
cout << &d[3];
> высосанный из пальца говнокод
> сидят придумывают хуйню как поломать компилятор
При этом половина багов памяти в сишном коде связаны с dangling pointer. Все прям сидят и специально ломают компилятор, да? А ведь можно просто не ложить хуй на рекомендации, они же очень простые: использовать вместо указателей везде где можно ссылки или unique_ptr, не использовать сишные массивы, не использовать больше одного указателя на участок памяти.
Ты какую-то хуйню написал. У тебя значения только первый элемент массива перезаписывают.
А мусор потому что строка должна оканчиваться \0
спасибо, поправил
>пик
Кстати, а есть ли какое-нибудь расширение, в котором вместо всплывающего текста, показывалась бы аниме девочка, которая рассказывала бы этот текст? Необязательно для VS.
я не знаю, у меня на работе визуал студиа была уже с таким фото, я не стал убирать
>указатель это что-то особенное (типа ссылки), но это чушь.
Если мне память не изменяет, то в некоторых системах он мог иметь плавающий размер. Из-за разницы размеров машинного слова, и адреса памяти.
Имхо указатель - просто ячейчка, которая может куда-то указывать.
Двощ считает, что (скобка) i (скобка) это тег разметки italic.
V Pontax
ну тебе надо библиотеку/самому написать 3д движка, наверняка там есть функция загрузки 3д модели
Предположу что это груз наследства от СИ.
К слову как думаете дерективу #pragma once включат в стандарт или нет?
>Предположу что это груз наследства от СИ.
Их в разработке используют? Просто не понимаю нахуя мне на курсе "для начинающих" рассказывали 2 часа про макроссы, а в конце сказали что это хуйня без задач для долбаебов.
>используют?
Да. Они есть и в стандартной библиотеке. Например std::assert() сделан вот так:
#ifdef NDEBUG
# define assert(condition) ((void)0)
#else
# define assert(condition) /implementation defined/
#endif
В релизной версии он полностью удаляется из кода, иначе будет вызываться std::terminate и завершение программы.
Условная компиляция на макросах используется при сборке с разными сторонними либами (допустим directx/opengl) или аппаратными особенностями (cuda, sse, neon).
Да, и ещё это способ порешать проблемы с компиляторами c++ под разные версии стандарта.
Колбеки
Яндекс.
Да и с инклудгвардами норм
На функциональных макросах можно делать всякие интересные вещи, чисто текстовые, которые ты не сделаешь на шаблонах. Их часто используют во всяких бустах уровня hof, библиотеках юнит тестирования, да в том же кюте, но там все серьёзней (вообще свой препроцессор).
В макросах надо знать меру, чтоб не получалась магия. Но вообще на шаблонах и consteval можно всё тоже самое сделать. В современных STL уже нет макросов.
> кюте
Кал.
Да её уже наоборот выпиливать пора. С модулями она нах не нужна.
Смотря под какие задачи, альтернативы конечно есть и не мало.
> по производительности
У Qt в принципе производительность такая себе.
>У Qt в принципе производительность такая себе.
Вряд ли хуже электрона. Но в любом же случае универсальное и мейнстримное решение?
Не, у меня рабочая ось пингвин. А если без бубна кроссплатформа выйдет так вообще огонь.
> Вряд ли хуже электрона.
Хуже какого-нибудь WinUI 3. Как по производительности, так и по функционалу.
> универсальное и мейнстримное решение?
Ну что-то вроде винформса у шарпистов, Qt примерно такое же отсталое говно.
Но вообще всё упирается в задачу. Если надо написать побыстрее гуй без лишней ебли, то лучше и проще брать гибрид крестов с шарпом - шарп под фронт, кресты под бэк. Если нужна нативность, то брать нативный гуй - WinUI под виндой и GTK на линуксе. Если нужен красивый, то HTML+CSS - вариантов помимо электрона куча, в том числе и вполне производительных. Если нужен гуй для отзывчивых утилит с кучей элементов, то лучше взять какой-нибудь нормальный фреймворк на GPU без оверхеда и лишнего говна - CEGUI или ImGUI.
>гибрид крестов с шарпом
Звучит как Франкенштейн какой-то. Такое вообще где-то практикуется помимо репозиториев с 0 звёзд?
>HTML+CSS
Звучит как план но есть ли для них нормальные решения на крестах? Ну и чтобы целое двигло за собой не тащило.
но макросы оперируют токенами языка, а при помощи оператора вставки токена могут так же генерировать новые токены, в то время как шаблоны работают только над типами, макросы используют там где шаблонов уже не хватает
а добавление во встроенный препроцессор вариативных макросов упростило и усилило возможности кодогенерации
> Такое вообще где-то практикуется помимо репозиториев с 0 звёзд?
Почти в любом крупном гуевом проекте на шарпе. Там же отличная поддержка FFI.
В который раз убеждаюсь что кресты вечны на квесты как вов. Казалось бы только сегфолты на хуйне перестал ловить - бери да учи шарп.
>Но вообще на шаблонах и consteval можно всё тоже самое сделать.
Нет, всякая строковая хрень не получится.
> фанбой шарпа
Где ты у меня увидел там про шарп, кроме предложения пилить простые кроссплатформенные гуи в стиле хуйк-хуяк на шарпе? Альтернатив этому просто нет, разве что так ненавидимые вами веб-рендеры. В любом случае, retained-гуй - это забагованый кал, гуй должен быть отделён от основного кода или хотя бы использоваться immediate-фреймворк.
А WinUI - это нативный гуй Винды на крестах в 2022, как бы ты не копротивлялся. Классический гуй на GDI уже легаси и не будет развиваться. Рендерить гуй на ЦП в 2022 уже должно быть стыдно.
>WinUI
Мда.., шарпоскаму было мало шарпоговна, оно еще и uwp притащило, еще пара постов и будет втирать за html/js
Индусы совсем одебилели, уже на людей бросаются, нужно изолировать буйных.
Анон с winui аргументировал свою позицию, ты же только срешь аки школьник. Еще кого-то буйным называешь, хах.
Пусть аргументирует в своем шарпотреде, сраль.
> uwp
Чел, UWP больше не разрабатывается и легаси, гуй там был WinUI 2, никакого отношения в актуальному не имеет. Актуальный WinUI 3 писался с нуля и работает на подсистеме Win32 но всё же есть обратная совместимость с UWP, майки услышали кодеров, поняли что идея UWP и контейнеризации были говном и сделали нормально. Актуальный API Винды - крестовый WinRT, только он разрабатывается сейчас, но и WinAPI никто не запрещает параллельно использовать. Привязку к Стору выпилили, софт распространяется MSIX-пакетами или напрямую экзешниками. Шизам уже просто не к чему доебаться.
> будет втирать за html/js
Фактически весь интерфейс Windows 11 сейчас на XAML, который компилируется в нативный код. Даже проводник и пэйнт на нём переделан. Всё рендерится на GPU.
Ну фанбой ксамла.
>Альтернатив этому просто нет, разве что так ненавидимые вами веб-рендеры.
Тот же Кют давно клал на нативные оконные функции и рисовался опеглом, с 6 версии может в вулкан и метал. Ты реально долбоеб который ничего не видет.
> давно клал на нативные оконные функции и рисовался опеглом
Но работает он одинаково дерьмово. Самые уёбищные интерфейсы, которые я когда-либо видел как юзер, были именно на Qt. Возьми хотя бы qBittorrent, которым приходится пользоваться каждый день - эта параша работает как будто однопоточная срань на WinAPI, ещё и в нормальный HiDPI не может, регулярно распидорашивает его при перетаскивании на другой монитор.
>Возьми хотя бы qBittorrent, которым приходится пользоваться каждый день
Юзай без фронта и не стони.
Хз, по моему интерфейс кубита очень даже хорош.
>>237660
Работает он как заявлено. То, что некоторые его использующие его являются дебилами, не делает его плохим. Делает дебилом тебя твои заявления, though.
На пайпах.
Толсто
Или такой размер возможен только на c# так как все либы хранятся в винде?
https://www.sqlite.org/c3ref/exec.html
ccылка на функцию в документации
Ну очевидно что юзать либры которые доступны в винде по умолчанию. Я не претендую на истинность но наверное писать приложение с использованием windows.h либры он же win32api
спасибо, анон огромное. пофиксил. я просто нафаня, первый раз на практике делал указатель на функцию
Чел, может лучше на modern c++ поднажать? А то пишешь как дед-пердед в стиле C.
через объявление типа указателя:
using func_ptr_t = decltype(&callback_function);
func_ptr_t func_ptr = callback_function;
или сразу объявление переменной:
auto func_ptr = callback_function;
спасибо, я о таких конструкциях просто не знал. учился в основном по С книге, с++ читал но упор больше на классы и шаблоны там делал, стараясь не обращаться внимания на то что итак есть в си.
Спасибо, но это всё для меня сейчас пустые слова. Мне бы сейчас минимально базово научиться хоть что-то делать, потом уже можно будет переписывать код лучше, думать о каких-то классах. Я щас даже не могу высрать хотя бы как могу то что мне нужно.
Первая серьёзная программа крупная
Нахрена нужен отдельный указатель, если и так есть функция? Имя функции и есть указатель же.
Их так в книжках учат. Там ещё и пишут, что функцию через указатель надо вызывать как (*fp)(args), когда можно просто fp(args).
Новый мем узнал?
В том, что имя функции - константный указатель.
void f(int a){}
void g(int b){}
auto ptr = f;
f = g нельзя, ptr = g можно.
Не совсем. Время инициализации разное. Имя функции получает своё значение на этапе компиляции, ⚹ const - во время выполнения.
неужели уже в интернете пропали все эти статьи и форумные посты как делать парукилобайтные экзешники и новое поколение мамкиных хакеров вынуждено подниматься на эверест заново?
с учебными целями пишешь fpt-сервер, например
в процессе написания как раз и освоишь и многопоточку и сетевое программирование
алсо, если хуево кодишь то первым учебным проектом можешь написать компилятор яп, например того же оберона
1. Используешь сторонние библиотеки по-минимуму, желательно вообще только стандартную+winapi.
2. Пишешь на C вместо плюсов.
3. При компиляции выставляешь флаги, чтобы оптимизировали размер (обычно за счёт понижения скорости работы).
4. Через strip выкидываешь таблицу символов и прочее.
Не вижу ничего плохого в winapi. Интересная и прикольная штука открывающая целый спект возможностей, зная winapi можно даже на ассемблее под винду писать
А какие альтернативы? Можно не брать винапи, обмазаться каким-нибудь Qt и получить хеллоуворлды на 50 мегабайт, но исходной цели 20 килобайт это не соответствует.
Почему?
Как я понел, там неявное приведение лямбды к указателю на функицю не срабатывает. Допиши "+" перед лямбдой, чтобы насильно привести её
И я как-то хз, почему не сделать просто ещё один шаблонный параметр вместо указателя, чтобы функция принимала любой callable, а не только указатели?
Они разные флаги компилятора выставляют.
>For sockets, only client-side TCP is supported.
Что блядь? А как работают примеры с сервером?
Куда ты так торопишься?
>gcc 12 на шинду
msys2?
>что модули поддерживает и не от майкрософт
а какие сборщики поддерживают модули сейчас?
симейк вроде не поддерживает
ты будешь вручную прописывать команды компилятора?
Qt socket тоже гавно какое то если честно, ебал эти сигналы хуялы.
Я разные либы тестирую. Собсно мне нужна небольшая часть кода и на асио у меня есть рабочая версия, но чет впадлу тянуть стороннюю либу, когда можно нативными инструментами обойтись
А stl, qt какие либы? Winapi в винду так то зашита, а за бустом надо идти куда то, я это имел ввиду
Наверное так и есть. Но она у меня подбаговано работала, принимает пустые сообщения иногда, с асио таких проблем нет. И асио быстрее работает
Надеюсь никогда и не будет
По секрету рассказала, только шш
Я крепкий мидл 2 года опыта
> Пишешь на C вместо плюсов.
Шиз, плиз. Си-компиляторов не существует в 2022 году. А вообще в Винде просто релизный билд собирает бинарники размером в ~15 кб, остальное уже как сам наговнокодишь. Я вот писал простенький виндовый сервис с TCP-интерфейсом к нужному API одной либы, чтоб потом цепляться по вайфаю с ведроида - получил экзешник 18 кб, потребление ОЗУ 900-1600 кб. Естественно использовал ноль зависимостей, только API винды. Специально ничего для уменьшения размера не делал, просто писал на крестах как обычно.
>просто писал на крестах как обычно.
Не пизди. Ты просто высрал 500 строк кода без классов в main.cpp
Вот это ты меня урыл от 3 лица.
В чём вообще проблема? Голый хелоу ворлд даже меньше 15 кб весит, а в O2 все классы ликвидируются, минимум отличий от простыни сишного кода. Просто используй системное API, а не всякие бесполезные комбайны вроде буста или Qt.
>Голый хелоу ворлд даже меньше 15 кб весит
Если у тебя 5 строк кода весят ~15кб то ты явно не тем по жизни занимаешься.
Чел, не бывает экзешника из голого main. У тебя всегда перед выполнением твоего кода происходит инициализация рантайма и окружения. Ты первый день что ли?
>не бывает экзешника из голого main.
А ведь когда-то были, в DOS .com файлы, но тому даунёнку конечно неоткуда знать.
Ты даунёнок. Речь про твои dos com файлы или exe?
перекат будет или всем норм что тред минуту открывается?
Перекати.
Если коротко - никак. Либо бери статическую либу, либо вручную делай маппинг dll.
Никак ты DLL в EXE не включишь, тебе нужна отдельная статическая версия либы. Гугли "freeglut static linking". Но там свои изъёбства, может понадобиться линковать ещё больше либ, чем с DLL.
Запихни dll в ресурсы, а при запуске программы сохрани во временную папку и оттуда загружай через LoadLibrary()
Спс, чуть позже изучу
Хромоног закукарекал.
Смотря что у тебя за ФС там. В винде если включена индексация, то можешь через запрос Windows Search SQL получить файл из индекса. Если пердоликс с ext4, то не выёбывайся и обходи вся папку.
Сук пздц за что. Это долго и все лагает
Как обычно, разобрался сам, сразу после того, как спросил. Нужен мультисемплниг крч. Хотя пока все равно не особо въехал, как его количественно задавать.
Ок, и с этим тоже разобрался. Всем спасибо за внимание.
Потому что могут. И хули ты им сделаешь?
Ясно
1) gcc -c -o 1.o main.cpp -D FREEGLUT_STATIC -I"C:\MinGW\include\GL"
2) gcc -o 1.exe 1.o -L"C:\MinGW\lib" -lfreeglut_static -lopengl32 -lwinmm -lgdi32 -Wl,--subsystem,windows
Добавил в прогу #include <math.h> #include <string> и функции этих библиотек. В кодблоке (с динамической либой glut) все компилится нормально, а вот в командной строке выполняется, почему-то, только первая команда. Как дополнить вторую (а может еще и первую) команду, чтобы все заработало?
Я прост рили пока нуб, не бейте сильно.
Навскидку жеппой чую, что сюда надо стринговую и\или математическую либу как-то прилинковать, только хз как.
Блядь, короче там после мува обращение по индексу еще
Что такое vec? Если тривиальный тип, то копи конструктор, если есть мув, то он будет вызван.
Это не копирование, а приведение типа - static_cast<T&&>(T vec). Применяется как обычно - приводишь аргумент к нужному типу, чтобы вызвать соответствующий ему метод.
При запуске окно программы представляет из себя пикрел, а возможности добавить свистелок-перделок в виде кнопочек, галочек, радиокнопок и прочей хуйни (а-ля лепка петушков из c#) туда нет.
Покопавшись в доках мелкософтов, к какому-то конкретному выводу так и не пришёл. Разве что создать в пустом проекте ресурс с диалоговым окном (В котором все свистоперделки на месте) и делать всё с нуля, в т.ч. инициализацию окошка.
Объясните, пожалуйста, долбоёбу, почему небо голубое и как срать в окно кнопочками.
Всё верно, в винапи нет ничего визуального кроме ресурсов, так что без ресурса диалогового окна лепить кнопочки просто некуда, ведь твоё окно создается кодом, а не грузится из ресурса (смотри код, дура).
Там сгенерилось еще окно "О программе..." показываемое через меню "Помощь", вот посмотри его ресурс и код который окно из ресурса создает и показывает на экран, а потом замени код выводящий на экран главное окно на код этого диалога, чтобы при запуске программы показывался этот диалог, и лепи туда свои кнопочки. Вот тебе и программа куда можно лепить визуально, а ставший ненужным код старого окна удали.
Ну об этом я и думал. Только какую тогда роль играет ресурс меню, если он может показывать только тулбар в верхней части окошка?
У окна есть атрибут меню (смотри код создания окна, дура), куда меню присваивается как и остальные атрибуты.
А в виде ресурса просто для демонстрации применения ресурсов, ну и проще же мышкой редактировать.
>я и думал
Надо не думать, а читать. Тебе нахуя студия код нагенерила? Чтобы хуй забить и задавать тупые вопросы? Далеко так пойдешь, шарпомакака.
Это в шарпе генеренный код - магия, куда лезть руками нельзя, а в чистых сях это наоборот прямой твой код, в него нельзя не лезть, это тупо пример для демонстрации, который ты сам должен своими руками писать, или по крайней пере переделывать как тебе надо. Должен смотреть и понимать что там происходит, как раз удобно для примера расписано же. Иначе хули ты приперся вообще, клоун?
Код ответит на все вопросы, тупорылая свинина, не может осилить пару небольших функций выложенных студией на блюдечке. Кто тебя еще с ложечки будет кормить, тупое недоразвитое говно, мамашу-шлюху попроси, может поняньчится со своеё личинкой.
Кнопка это то же самое, что и окно.
1. Находишь метод InitInstance(...)
2. Хуячишь туда:
HWND hwndButton = CreateWindowW(
L"BUTTON", L"OK",
WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,
10, 10, 100, 100, // координаты
hWnd, // дескриптор родительского окна
NULL,
(HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE),
NULL);
3. Там же:
ShowWindow(hwndButton, nCmdShow);
UpdateWindow(hwndButton);
Но лучше через такую залупу не делать, а выбрать какой-нибудь фреймворк типа QT, MFC или ещё чего.
360x434, 0:02
Это не простые и не вопросы. Это охуевшая свинина хочет залезть на шею, хочет няньку-слугу, которая за него всё думать и делать будет. Типичный дегенерат.
Можно ли обойтись без Microsoft Visual Studio?
Да. Подбери IDE под себя и систему сборки проекта.
Эта "охуевшая свинина" сейчас в одной комнате с тобой, анон?
Это копия, сохраненная 30 августа 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.