Это копия, сохраненная 19 августа 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
• https://github.com/sosachbot/cppthreadhat/wiki
Ответы на вопросы:
• https://en.cppreference.com/w/
• https://www.cplusplus.com/reference/
Прошлый тред >>1643956 (OP)
Какую ide предпочитаете для разработки?
Алсо: а что думаете насчёт юзания vim?
Clion живет у параши вместе со своим high usage CPU
Что, уже завезли замену?
Длиннее!
никто не знает. Вперед читать книгу
А ты чего ожидал? Что будет написано секретное знание как давить одну волшебную кнопку?)
Блять, я ожидал нормальное возрастание сложности, а не с лёгкого на хардкор за одну страницу
Раньше чтобы программировать надо было разбираться в нескольких околоматематических областях знаний, гугли Computer Science. Сегодня уже не актуально.
Сегодня актуально на яваскрипте реакт делать. Может ну его нахуй этот си
Лежит уже несколько лет, зря деньги что-ли платил
> Объявление класса само по себе не создает никаких сущностей, только определяет структуру объекта.
Наглая ложь.
> A class definition introduces a new type.
https://timsong-cpp.github.io/cppwp/n4861/class.name#1.sentence-1
type является entity (сущность)
> An entity is a value, object, reference, structured binding, function, enumerator, type, class member, bit-field, template, template specialization, namespace, or pack.
https://timsong-cpp.github.io/cppwp/n4861/basic.pre#def:entity
Таким образом, объявление (являющееся определением) создаёт новую сущность.
Ничего, пройдет. В букваре у Страуструпа тоже в начале много хардкора. Но он по сути выполняет роль анонса. Дальше потом уже нормально.
Малолетних дебилов даже гуглить не надо, они сами в тред лезут.
Читай!
Нет, не тупой, просто нужно время на понятие грамматики парсера, это проходит, не парься, если не можешь понять эту грамматику, то почитай аналогичные вещи в интернете, грамматику рекурсивного спуска например.
а еще лучше никуда не гнаться и взять дня 3 перерыва и просто подумать самому, а потом перечитать главу, обычно помогает
У него "сущность" в другом смысле была заюзана. Имеется в виду что при объявлении класса память в не выделяется.
>кидает пруф, что объявление класса вводит новый тип
Ты туповатый чутка, да?
>У него "сущность" в другом смысле была заюзана.
В C++ у сущности только один смысл — https://timsong-cpp.github.io/cppwp/n4861/basic.pre#def:entity
> Имеется в виду что при объявлении класса память в не выделяется.
В кампиляторе выделяется
>>кидает пруф, что объявление класса вводит новый тип
>Ты туповатый чутка, да?
Что не так? Тип — сущность. Ввести новый тип = ввести новую сущность.
static members
Анон, есть ли предпочтение static методам класса (если возможно) const? решарпер такой совет дает. Какие плюсы от этого, если метод например private?
Что значит предпочтение? Если метод можно объявить константным и ты готов ебаться с константностью то объявляй как константный. Если уже какой-то код есть то лучше чукнуть как в нем все сделано. Если там забивали на константность то лучше все так и оставить. Ну или рефакторить все. Хотя от константных методов неудобства минимальные - можно и всегда их объявлять.
Если у тебя в методе не используется this, то решарпер предлагает сделать его статическим, все правильно.
Со стороны кода — никаких.
Со стороны машинного кода — погоняй свои примеры в https://gcc.godbolt.org и посмотри.
>>657558
>Мне больше интересует выгода по какой-нибудь потокобезопасности, скорости и тп
По скорости — нужно идти в дизасемблер и смотреть конкретные случаи.
По потокобезопасности — тут только уменьшать кол-во shared стейта, это главный камень преткновения и const/static тут не поможет ничем.
Короче, пиши всё по семантике и не еби голову.
В вызов любого не статичного метода передается скрытый параметр (ссылка на объект у которого вызван метод). Соответственно у статических методов такого параметра нет и они должны давать какой-то мизерный прирост скорости. Но особо хитрожопые компиляторы вполне могут и оптимизировать такое. Также статические методы более удобные - их можно в любой момент вызвать. Для вызова нестатического тебе нужно где-то достать объект класса. Если у метода статическая суть то лучше его статическим и объявлять.
В С++ один, а в русском языке нет
> В кампиляторе выделяется
Очевидно, что речь не о компиляторе а о самой программе, тупица
ты мне уже поднадоел признаться своей одаренностью, так что иди нахуй
Но как это работает в art money, что это не вызывает краш из-за непланомерного доступа?
tempValue = 1280;
buf = (char*)&tempValue;
buf остается пустым? Если другие числа, то все нормально.
Блин, а как тогда длину переменной в байтах получать? Я делал так:
tempValue = var;
buf = (char*)&tempValue;
int length = strlen(buf);
Но теперь оказывается это пидорасится спецсимволом.
я чето вообще не понимаю, что ты делаешь. Обьясни пожалуйста.
Длина инта всегда 4 байта, sizeof?
Неправильно выразился. Не длину переменной, а сколько байт она занимает в данный момент времени. Ну то есть var = 1, то 1 байт, var = 640, то 2 байта. Причем var может быть не только int, но и string или float.
Друг, оно всегда занимает одинаковое количество байт, вне зависимости от содержимого.
Если это int или float, то да. Но у меня QVariant.
Тогда другой вопрос. Вот мне надо записать в файл значение без лишних нулей. Ну понял да, чтобы 1 не записывалось в файл, как 00 00 00 01. И потом к нему пришпилить еще длину в байтах. Ну например, для var = 1, записывать 01 01, для var = 1280, записывать 02 05 00, или для var = "TEST" записывать 04 54 45 53 54.
Как мне вытаскивать длину в байтах, как нибудь попроще?
QVariant тоже. Там указатель и какой-нибудь тэг внутри. Sizeof его всегда одинаковый, если типы одинаковые.
То, что ты спрашиваешь в п2 - это тебе нужно просто написать сериализацию.
Что в духе ТИП, ДЛИНА, данные. И предусмотреть возможность того, что оно не нулл паддинг.
В случае конкретно интов - ты всегда можешь проверять, больше оно в 2^8, 2^16 и тд для ансайнедов.
> Как мне вытаскивать длину в байтах
Считай логарифм по основанию 256.
В >>657811 у тебя пидорасило не из-за спецсимвола и из-за того что strlen ожидает терминированую нулем строку. Если ты хочешь считать так как ты считал то тебе нужно число конверить в строку с помощью itoa по основанию 32 и полученую длину делить на 2.
Как в QByteArray записать без лишних нулей?
Пишу
QByteArray data;
QDataStream in(&data, QIODevice::WriteOnly);
in << var;
А он все равно нули пишет.
Блин, раньше как то делал, сейчас не помню уже.
Как ты узнал, что нули? Если var int и bigendian включен в qdatastream, но при записи 1 ты очевидно получишь в первых трёх байтах нули
Ну сделай var свой qchar
У стандартных стримов на этот случай есть метод put(). А оператор << преобразует чары в инты
Бери гидру и делай реверс
Спиздил после триала. Ещё не вырос пока до покупки софта, извините. Ещё и vs community edition.
Если вдруг будет закупка, то решарпер включу туда
>В С++ один, а в русском языке нет
Когда будешь на русском языке программировать, тогда и пользуйся смыслами терминов из русского языка. А это тред про программирование на C++.
Она же там около десяти баксов в месяц стоит. Дешевле чем пиво на Арбате
Первый раз слышу про ctrl+RW, даже не знаю что он делает.
Но этот аддон на любое сохранение файла просто нахер все выпиливает лишнее, не в этом ли счастье
Если ты устроился на первую работу - ты уже выиграл в лотерею. Через год уходи на килобакс, а пока сиди смирно.
оно самое,я не учился программированию просто,работаю обычным манагером
Завтра ищешь в интернете книжку Dive into python. Похуй если ничего не поймешь. Затем идешь на python.org и изучаешь стандартную библиотеку от корки до корки. Потом зубришь, именно, сука, вызубриваешь конвенцию по написанию питоньего кода - PEP8, чтобы от зубов отскакивало. Когда напишешь свою первую имиджборду, по пути изучив верстку на html+css, скачиваешь и изучаешь любой питоний асинхронный вебсервер, рекомендую Tornado или Gevent. Как переделаешь имиджборду, чтобы выдавала по крайней мере 5 тысяч запросов в секунду, можешь идти дальше - тебя ждет увлекательный мир хайлоада. Apache Hadoop, сверхбыстрые асинхронные key-value хранилища, MapReduce. Отсос хиккующих выблядков / просто неудачников типа рейфага или сисярп/джава-хуесосов, которые сосут хуй по жизни не заставит себя ждать и уже через пол года ты будешь получать такие суммы, что любая баба будет течь при одном упоминании твоей зарплаты.
кинь телегу или почту,буду советы спрашивать хотя бы,как вкачусь полноценно и буду нормально получать,отблагодарю а то я щас прочитаю,азы освою и хуй с маслом сосать буду
а ясно,я тоже подумал что слишком сказочно)
зависит от города. в ДС через 2 года, в миллионниках через 3, в мухосрансках таких зарплат нет
Программирую только на православном. На нем сам перевод стандарта написан
И да это С++ тред, таким хуесосам дибиловатым как ты здесь явно не место, пиздуй в джс-загон тебе хуев в жопу накидают, всё как ты и они любят)))))
>Программирую только на православном. На нем сам перевод стандарта написан
Так в переводе у "сущности" остался тот же смысл, что у entity в оригинале.
Когда книги будут писать на C++, тогда и кукарекай. Ну и тупица, лол.
Да, кроме случаев когда произойдет чудо и компилятор соптимизирует хвостовую рекурсию. Если твой компилятор вообще такое умеет.
>статическая суть
Что ты под этим подразумеваешь? Типа внутрь метода не нужно передавать объект?
Веб на php наверное если только.
Это шутейка, долбаеб
Когда тебя твой парень тебя в жопу ебет, ты ему тоже ноешь "Вазген, трахай под 69 градусов, а не 45, у меня геморой вываливается"?
Думаю тебе в ПТУ несладко приходится. Каждый день водолаза в тубзике заставляют играть? Или перерыв на карантнин все таки дали, потому что там сейчас не во что мокать?
Проверь в словаре значения всех использованных в твоем следующем ответе слов, лалка, а то вдруг кто доебется. И точку в конце не забудь
Все распространенные (MS, gcc, clang) вроде как умеют но стандарт не требует обязательно оптимизировать, поэтому там могут быть нюансы - компилятор может передумать ее оптимизировать если ему что-то не понравится. Ну и нужны более жесткие режимы оптимизации (типа О2/О3).
>>658415
> Что ты под этим подразумеваешь?
То что метод использует только статические члены класса (или не использует вообще).
>Алсо: а что думаете насчёт юзания vim?
если умеешь печатать в слепую десятью пальцами и умеешь пользоваться шеллом, то норм
по сути все дела делаешь в консоли, а в вим тупо редактируешь код
Пфф мне доставляет удовольствие обсирать тебя, так что разорвало тут разве что твое маленькое нежное колечко от огромной чурчхеллы Вазгена
Точку поставил, красавчик
Неплохо.
Где половина значений из функций возвращается через ссылки и ты хуй поймёшь, модифицируется ли оно где-то внутри или нет и приходится лезть в 100500 функций и осознавать это, и в итоге где-то в куске кода, который выключен макросом, это херня таки модифицируется и ты идёшь осознавать, когда этот макрос включается и что он делает
А какая ляпота когда всё вынесено в глобальные переменные.. Мммм..... Как же это ахуенно, когда можно получить доступ по всему и отовсюду. Даже из методов isCheckSomething можно менять эти самые переменные! Разве это не ахуенно!?
И как же здорово копипастить код! Зачем же выносить его в отдельные методы, если можно просто скопипастить! Ведь его же никогда не придётся менять!! И файл с 10к строками не придётся открывать, наверное
А лямбды в лямбдах которые в других лямбдах какая красота! Зачем задумывать о том, что и как и куда вынести, если можно просто нахерачить 100500 лямбд? Вот и не зачем!
И потом все вот эти писаки твоего горя гордятся званием разработчика Срр кстати.
Ну так сделай рефакторинг, это же самая мякотка. Мужики потом руку жать будут, хрюши перед тобой будут жопами крутить, а начальник лично премию выпишет.
И вообще, каков на сегодняшний день рынок плюсов в ДС? Какие есть интересные места, где не занимаются программированием под древние технологии?
> Пердолите легаси под винду или делаете йоба-проекты под Linux со всеми новыми фишками плюсов?
Делаем йоба-проект под три платформы со всеми новыми фишками плюсов, параллельно пердолим легаси, внедряя эти самые фишки (легаси старше половины анонов итт)
>Делаем йоба-проект под три платформы со всеми новыми фишками плюсов
А что хоть за сфера деятельности? Приложения под десктоп какие чи шо?
>Пердолите легаси под винду или делаете йоба-проекты под Linux со всеми новыми фишками плюсов?
Кек всё. Легаси и не под винду, полуэмбеддед линукс (бортовое оборудование), десктоп с "фронтом" под винду "беком" на ртос на параллельных ядрах. Использую фишки когда это возможно.
Сфера авиация, больше не расскажу, NDA.
Шесть месяцев назад я нашёл в Интернете книжку "Dive into Python". Странная книжка, толстая, да ещё на не русском языке. Усердно прочитал её, методично и вдумываясь, но таки ничего и не понял. Но что-то не отпускало меня - я пошёл на python.org и стал изучать стандартную библиотеку, старательно, скурпулёзно, от корки до корки. Гугля примеры кода, я наткнулся на пост в блоге одного гуру, где было написано про PEP8. То, что рассказывал этот умудрённый опытом кодер, настолько впечатлило меня, что я словно в припадке безумия бросился зубрить эту конвенцию по написанию питоньего кода. У меня тряслись руки, по телу прокатывали волны возбуждения, я, можно сказать, бился в экстазе всё это время - и теперь могу процитировать наизусть любой пункт, даже если меня разбудить посреди глубокой ночи.
Новые знания окрыляли меня, я бросился писать (что бы вы подумали?) очередную имиджборду. Я не писал раньше имиджборд, эта была моей первой. По пути пришлось освоить азы вёрстки на html и css, но там всё оказалось совсем не сложно.
Я плавно двигался вперёд, наращивая функционал. И знаете что? Я упёрся в недостаток производительности. Ну, так мне показалось. Я делал замеры, устранял места с тяжёлым кодом. Тысячи раз запускал ab, но так и не сумел перейти порог в 300 запросов в секунду. Я как-то ожидал большего и был немного разочарован.
Гугл, снова гугл. Десятки статей и тем на форуме... Довольно быстро я заметил, что люди часто пишут про какие-то "асинхронные веб-сервера". Часто встречались названия Tornado и Gevent. Я прочитал про них подробнее - и был просто ошеломлён. Как мне это раньше не приходило в голову?! Это же, это просто гениально, чёрт меня побери!
Исходники в ведро, всё переписать! Меня переполняло новое знание, поток мыслей ровно ложился в строчки кода. Я просто не мог остановиться. Чашка кофе... Ещё чашка... Мой небольшой кусочек софта приобретал кристалльную чистоту, я смертельно устал, но продолжал в умилении полировать его зудящими руками, нанося последние штрихи.
Пять тысяч. Я получил производительность в пять тысяч запросов в секунду. В ту ночь я так и не смог заснуть.
Наиувлекательнейший мир хай-лоада открылся передо мной. Позже я изучил ещё много классных вещей типа сверхбыстрых асинхронных key-value-хранилищ, или, например, такого необычного подхода к обработке данных, как map-reduce.
Это уже был другой я, новый, обновлённый. С незашоренным взглядом, с жаждой новых знаний и незнакомых концепций. Я летел вперёд, оставляя за спиной ступень за ступенью.
За пол-года я сменил несколько мест работы, и моя зарплата взлетела до умопомрачительных сумм. Сотни замечательных мест открыли передо мной свои двери. Любые, самые изысканные девушки проявляли просто чудеса изобретательности, чтобы находиться рядом со мной.
А ещё, я никогда не забуду тот момент, когда на одной из конференций я впервые в жизни поймал на себе завистливый взгляд. Это был взгляд какого-то сливающегося с толпой неудачника, взгляд преисполненный ненависти, презрения и желчного вожделения, направленного на мой Олимп. Наверное, он всю свою никчёмную жизнь писал на каком-нибудь си-шарпе или там на джаве, проводя долгие дни в одиночестве. И теперь начинал подсознательно догадываться, что долгие годы безуспешно пытался построить замок из навоза.
Шесть месяцев назад я нашёл в Интернете книжку "Dive into Python". Странная книжка, толстая, да ещё на не русском языке. Усердно прочитал её, методично и вдумываясь, но таки ничего и не понял. Но что-то не отпускало меня - я пошёл на python.org и стал изучать стандартную библиотеку, старательно, скурпулёзно, от корки до корки. Гугля примеры кода, я наткнулся на пост в блоге одного гуру, где было написано про PEP8. То, что рассказывал этот умудрённый опытом кодер, настолько впечатлило меня, что я словно в припадке безумия бросился зубрить эту конвенцию по написанию питоньего кода. У меня тряслись руки, по телу прокатывали волны возбуждения, я, можно сказать, бился в экстазе всё это время - и теперь могу процитировать наизусть любой пункт, даже если меня разбудить посреди глубокой ночи.
Новые знания окрыляли меня, я бросился писать (что бы вы подумали?) очередную имиджборду. Я не писал раньше имиджборд, эта была моей первой. По пути пришлось освоить азы вёрстки на html и css, но там всё оказалось совсем не сложно.
Я плавно двигался вперёд, наращивая функционал. И знаете что? Я упёрся в недостаток производительности. Ну, так мне показалось. Я делал замеры, устранял места с тяжёлым кодом. Тысячи раз запускал ab, но так и не сумел перейти порог в 300 запросов в секунду. Я как-то ожидал большего и был немного разочарован.
Гугл, снова гугл. Десятки статей и тем на форуме... Довольно быстро я заметил, что люди часто пишут про какие-то "асинхронные веб-сервера". Часто встречались названия Tornado и Gevent. Я прочитал про них подробнее - и был просто ошеломлён. Как мне это раньше не приходило в голову?! Это же, это просто гениально, чёрт меня побери!
Исходники в ведро, всё переписать! Меня переполняло новое знание, поток мыслей ровно ложился в строчки кода. Я просто не мог остановиться. Чашка кофе... Ещё чашка... Мой небольшой кусочек софта приобретал кристалльную чистоту, я смертельно устал, но продолжал в умилении полировать его зудящими руками, нанося последние штрихи.
Пять тысяч. Я получил производительность в пять тысяч запросов в секунду. В ту ночь я так и не смог заснуть.
Наиувлекательнейший мир хай-лоада открылся передо мной. Позже я изучил ещё много классных вещей типа сверхбыстрых асинхронных key-value-хранилищ, или, например, такого необычного подхода к обработке данных, как map-reduce.
Это уже был другой я, новый, обновлённый. С незашоренным взглядом, с жаждой новых знаний и незнакомых концепций. Я летел вперёд, оставляя за спиной ступень за ступенью.
За пол-года я сменил несколько мест работы, и моя зарплата взлетела до умопомрачительных сумм. Сотни замечательных мест открыли передо мной свои двери. Любые, самые изысканные девушки проявляли просто чудеса изобретательности, чтобы находиться рядом со мной.
А ещё, я никогда не забуду тот момент, когда на одной из конференций я впервые в жизни поймал на себе завистливый взгляд. Это был взгляд какого-то сливающегося с толпой неудачника, взгляд преисполненный ненависти, презрения и желчного вожделения, направленного на мой Олимп. Наверное, он всю свою никчёмную жизнь писал на каком-нибудь си-шарпе или там на джаве, проводя долгие дни в одиночестве. И теперь начинал подсознательно догадываться, что долгие годы безуспешно пытался построить замок из навоза.
Это ты ещё сикпи не читал
Судя по коду, species хранит указатель на массив part размером np_alloc элементов. В нём "активных" элементов species->np. Если места под ещё один активный элемент нет, то бросается ошибка. Иначе код добавляет ещё один активный элемент.
int n = species->np;
species->part[n].x = x;
species->part[n].v = v;
species->np++;
Так понятнее?
да, просто не понимаю к чему такие указатели городить
Суть токова: есть 2 класса (Class1 и Class2), каждый в своём файле (Class1.cs и Class2.cs). Класс Class1 содержит ссылку на Class2, а класс Class2 содержит ссылку на Class1. Всё что мне надо было сделать, это просто написать объявления этих классов в разных файлах.
Вопрос: как сделать такое в C++?
Я не гуру, но мне кажется никак. Это же замкнутый круг получится
Пишешь объявление (не определение) класса в ашнике одного из них, ссылки на неопределенные классы разрешены, ибо одного размера, шарп это спиздил из сишки ещё.
Но правильнее делать однонаправленные ссылки на интерфейсы, и в реальном коде по другому не получится.
Я тебе может секрет открою, но в c# твоя хуйня типа Class1 a; не равносильна Class1 a; из c++. Грубо говоря это больше похоже на std::shared_ptr<Class1> a; с неявным вызовом make_shared в консрукторе в конструкторе. А для такой хуйни достаточно forward declaration
Да, в шарпе это ссылка по факту. Значит в C++ объявление с виду будет другое, что-то вроде Class1* class1; Но тут главное чтобы суть была той же - первый класс содержал ссылку на второй, второй на первый, и чтобы они были в разных файлах. (то что это можно сделать в одном файле я знаю, это у меня получалось). Собственно проблема у меня сделать так чтобы они были в разных файлах.
двач сожрал указатели. Можешь (даже лучше) использовать unique/shared ptr.
>ErrorC2664: cannot convert argument 4 from 'int *' to 'PDWORD'
В винде фирменные проприетарные указатели? Если тупо кастить в PDWORD оно вообще запустится?
Опять проблемы. Классы объявил, но не работает интеллисенс и не получается их использовать.
Конкретно эту проблему удалось убрать написав:
#include "Class1.cpp"
Но в самом файле Class1.cpp есть такая же проблема, и таким способом её убрать не получилось, потому что взаимные инклуды, насколько я понимаю, невозможны.
Решил вкатиться в libevent (простенький CRUD запилить с веб мордой) стоковая документация ищет только по LIKE% и причем только на функции (структуры приходится искать на этом же сайте через гугл, лол), гайды уровня как нарисовать сову.
Смотрю, http модуль libevent по ходу сам выставляет куки, опять же в документации на эту тему по запросу cookie ничег не выдает, а гугл выдает все страницы где есть просто libevent, угадайте почему?потому что на каждой странице снизу есть плашка предупреждающая что "мы используем cookie" лол
Кароч здоровья вам и терпения (ну и мне). К слову сказать у sqlite все достаточно понятно, и документация годная.
Вроде получилось сделать как хотел. Классы в разных файлах (правда каждый класс в двух файлах - в .h и в .cpp, но это не проблема, меня это тоже устраивает), ссылаются друг на друга, могут использовать функции друг друга, интеллисенс есть. Спасибо.
На гитхабе поищи проекты, где эта либа используется. Обычно там можно подпиздить куски годного кода. Я так в одной либе буста разбирался, хотя там на весь интернет две строки документации
Был класс A, я захотел сделать функцию, принимающую A, вычисляющую всякую хуйню, используя protected const методы класса A, думал, ебану friend и все будет норм, но хуй там блядь! Автор A почему-то не сделал этот важный функционал public, не предусмотрел, и мне теперь либо копипастить тот код (что плохо, так как дублирование), либо наследоваться.
Да, почему-то сделал class B : public A, там float f(const A&a) const {
return a.protectedfunc()++; }, но такое тоже не хочет работать.
Есть ли нормальный вариант? Как быть, если автор либы в чем-то ошибся?
class B : public A, {
static float f(const A&a) {
return a.protectedfunc()++;
}
private:
B(){}
}
>>659912
А, стоп, с лонгами нормально.
да так и делаю, то тут, то там, но блиииииин........
Что сейчас на крестах пишут как правило? А что нет?
std::next(lst.end()) гарантированно возвращает lst.end(), или зависит от реализации?
Вектор это 2 инта (текущий и максимальный размеры) и указатель, который будет переаллоцироваться
А как освобождаются ресурсы, аллоцированные вектором? У него есть scope как у локальной переменной и при возврате вектора из функции нужно возвращать его копию, дабы не возвращать адрес на мертвые данные?
то есть
std::vector<int> vec;
vec это указатель на кучу, где была выеделена память? Другого объяснения у меня нет, так как массив не может быть динамическим в стэке.
> vec это указатель на кучу
vec это сруктура, один из элементов которой - указатель на динамически выделеную память для хранения элементов вектора.
В стэке есть адрес на кучу, где был аллоцирован вектор. Ты прав, данные вектора хранятся в куче, ибо стэк не может хэндлить динамические массивы.
Если ты хочешь создать вектор в функции - возвращай его копию. Но это плохая привычка, лучше в вызывающую функцию запердолить пустой вектор и передать его в вызываему функцию как ссылку и там заполнять всем чем надо.
Скоуп у вектора как у обычной локальной переменной, ибо деструктор там работает как в умных указателях. Вызод за скоуп - вызов деструктора.
По производительности это равно дрочке с ссылками? Чет я сомневаюсь, кажись по старинке передавать ссылки все же лучше, не?
Нет, компилятор сразу биндит вектор куда нужно, без расходов.
Палю лайфхак: видел в продакшн коде одной популярной либы
#define private public
#include <parasha,h>
#undef private
Енжой ё ооп
в коде: __try { for(;;); } __except(exception) {...}
Важен ли его приоритет, если исключение надо обрабатывать максимально быстро, или разницы нет?
Я лично подозреваю что винда зовёт все обработчики исключений поочерёдно и показывает им задницу эксепшона, пока одному из хэндлеров она не нравится. Прикольный механизм. То есть по итогу я задаю приоритет хэндлингу исключения.
Вопрос остаётся в том, компилируется ли for(;;); во что-то жрущее ресурсы. Здесь я подозреваю, что на ассемблере это просто nop с безусловным прыжком. Но я не знаю, отжирает ли это ресурсы. Менять указатель на инструкцию IP - это тратит время процессура.
Исключение обрабатывается в том же потоке, что его выбросило. Эта хуйня с вечным циклом ничего ловить не будет.
Только тебе нужно перед этим заинклюдить все хидеры из stl
Я же обрабатываю исключение винды, не родное сишное. Скажем там, EXCEPTION_GUARD_PAGE.
Ну так чтобы его обработать средством __try __except ты должен вызвать его в блоке __try, а не где-то там в другом потоке. Для того чтобы ловить все исключения есть VEH
Тебе никогда вот эту парашу использовать не надо абсолютно нигде, кроме кернел драйверов. Забей, что оно вообще существует
★(int★)0 = 228; только так поймать можно. Либо в настройках компилятора шаманить чтобы через try(...) ловить, но тогда типо исключения уже не определить
Сам синтаксис ловли в виде таких штук как EXCEPTION_CONTINUE_EXECUTION и EXCEPTION_CONTINUE_SEARCH намекает мне что механизмами исключений в винде ловится что угодно, как бы намекая про VEH
>Vectored exception handlers are an extension to structured exception handling. An application can register a function to watch or handle all exceptions for the application. Vectored handlers are not frame-based, therefore, you can add a handler that will be called regardless of where you are in a call frame. Vectored handlers are called in the order that they were added, after the debugger gets a first chance notification, but before the system begins unwinding the stack.
Звучит очень вкусно.
https://docs.microsoft.com/en-us/windows/win32/debug/using-a-vectored-exception-handler
Кажись вообще могу без треда обойтись, но хуй знает. Всё равно интересно создаёт ли for(;;); доп нагрузку, ещё пригодится потом
>>660339
Детектить изменения в памяти?
скорее всего присутствие EXCEPTION_CONTINUE_SEARCH обосновывается так:
__try {поебень}
__except (GetExceptionCode() == 1 ? EXCEPTION_CONTINUE_EXECUTION : EXCEPTION_CONTINUE_SEARCH) {}
__except (GetExceptionCode() == 2 ? EXCEPTION_CONTINUE_EXECUTION : EXCEPTION_CONTINUE_SEARCH) {}
__except (GetExceptionCode() == 3 ? EXCEPTION_CONTINUE_EXECUTION : EXCEPTION_пойти_нахуй) {}
нет, нихуя
Схуяли это неопределенное поведение? Если память присутствует и доступна для чтения, она считается. Иначе процессор создаст исключение которое можно обработать. Вполне себе определенное поведение.
>>660353
внизу пример кода о котором вы говорите
там есть хэндлер под access violation
вполне можно выпрыгивать
https://docs.microsoft.com/en-us/cpp/cpp/try-except-statement
> В __try нельзя юзать объекты требующие уничтожения.
Память не освободится? Можно же в __finally это сделать (правда, оно быдлокодится через вложенные __try, это вам не питон)
http://habrahabr.ru/post/229963/
>стандарт C++ объявляет «неопределённым действием» бесконечный цикл без изменения внешнего состояния — поэтому компиляторы C++ вправе считать любой такой цикл конечным.
Ну охуеть. Почему возврат переменного значения нельзя условно считать изменением внешнего состояния?
Интересно, что если всунуть укорачиваемую часть после бесконечных циклов в отдельную функцию, скорее всего она не укоротится.
Смотрите, кто-то не знает про оператор ,.
https://ideone.com/A499Ih
Чего ты вообще хотел добиться этим: a[i,i+1] ?
Я случайно когда раьгтал с массивами вместо a[j] написал a[i,j] и думал че за хуйня происходит
Так, сделал исключение через VEH, не проверял ещё как работает, дофига всего надо поделать. Тред хочется чтобы всё равно висел, даже если пока не надо.
Можно использовать прибамбасы крестов: https://stackoverflow.com/questions/36711131/how-to-sleep-forever-only-using-c11
Но всё ещё хочу узнать, не за тормозит ли подобный >>660694 ассемблер систему, т.к. это простая реализация сна без стандартных библиотек, а я свистелки не люблю
эммм...
Ну, например, в том же VEH хэндлере я смотрю на тред и прыгаю его из инструкции бесконечного цикла во что-то другое.
Так этот тред с бесконечным циклом не вызывает исключений и не триггерит вех. Для вечного ожидания есть WaitForSingleObject или SuspendThread
Так я это уже осознал. После того как система вызывает мой обработчик на событие, обработчик заставляет основной тред подпрыгнуть кабанчиком и благополучно завершается.
Когда можно будет нулевой указателель дереференсить, отхватывая не от языка, а от ОСи
>зиродеи
Во первых, как что-то плохое.
Джава уродлива, поэтому создаёт много рабочих мест. На сях легко говнокодить, поэтому они создают много рабочих мест. Кресты невозможно знать полностью, поэтому они создают много рабочих мест. Индусы рентабельны, поэтому для белых багтестеров тоже есть рабочие места. Боинг 737 падает, разбивается и убивает людей, так что теперь кто-то решает эту проблему за деньги.
Раст не создаёт рабочих мест.
Во вторых, нужно всё-таки определиться, низкоуровневый ли это язык, или администрирующий криворукого индуса, потому что выбирать меж 5 типами указателей никто нахуй не хочет, а терять производительность ради безопасности - для этого уже есть жаба, там это оправдывается либо банковским сектором, либо тем что каждому оленю надо дать право писать приложухи к андрюше.
>Раст не создаёт рабочих мест.
Возможность писать полностью безопасный софт на уровне ОС, дровти прошивок, не теряя при этом производительность (Раст по скоростью равен С++, а в некоторых моментах и быстрее) - не создает рабочих мест? Интересно
Безопасность раста обеспечивается:
1. встроенным статическим анализатором, которые есть и для сей
2. прищемлением яиц программисту, которого в дизайне языка быть не должно
fn _merge(left_slice: &mut [u32], right_slice: &mut [u32]) -> u64
vs
fn _merge(vec: &mut [u32], left: usize, mid: usize, right: usize) -> u64
3. тысячей реализаций одной фичи, чтобы каждая была безопасной и уникальной
Возможно что чтобы общаться с оборудованием, вообще по итогам нужен заветный unsafe, ибо там отсылки к кастомным адресам (вроде).
Спрашивается, почему не писать сразу на сях?
VS Code. VIM = kal
Да никак не отвечает. Отсутствие рабочих мест под раст - самоочевидный факт, под него не нужно подводить доказательства.
Например, есть класс с координатой в полярных, и
enum CoordType ={deg, rad};
А класс уже
template<CoordType ct>
class Coord
{
}
Отличия градусов от радиан в поведении класса только в том, что для тригонометрических функций будет перевод в радианы.
Да, я знаю, что лучше хранить все в радианах и перевод выполнять только при выводе
Erase-remove idiom
for (auto i = vector.begin(); i != vector.end();)
if (надо удалить)
i = vector.erase(i);
else
++i
Я просто предпочитаю enum class вместо enum, если возможно.
И вообще, я так понимаю, что компьютерное зрение - это одна из самых популярных сфер, где С++ используется?
Можно ли вкатиться человеку с техническим (не математическим) образованием? Базовые матан, линал знаю. Теоревер стоит подтянуть.
И вообще, насколько перспективный рынок компьютерного зрения? Вижу много вакансий связанных с разработкой систем видеонаблюдения, в России это наверное будет популярно в ближайшие годы.
Хотя нет, эта тема какая-то слишком сложная и непопулярная. В Москве по вакансиям особо ничего и нет
Вот почему никто не сделал роадмап для джунов?
Даже джависты осилили
Это зависит от контекста. Если вне класса, то это значит, что её можно вызвать только из того же файла, она может быть скомпилирована только в соответствующем объектном файле. Если в классе, то это значит, что она как бы глобальная для всего класса и в то же время этому классу не принадлежит, от неё нельзя наследоваться и в ней доступны только такие же статические методы и переменные класса. Но из нестатических методов её можно вызвать.
>>роадмап для джавы 2020
>>spring в стороне на побочной ветке вместо орма/микрносервисов/веба/тестов/баз данных вместе взятых. Про аналоги спринга вообще ни слова.
Вам точно нужен такой же устаревший на 10-15 лет роадмап?
>spring в стороне на побочной ветке
Там указано же must know, лол
А куда его впихнуть предлагаешь?
Есть исходники кода,из них нужно собрать программу(проект, хуй его знает как это в вашей терминологии).
В общем мне нужен экзешник, чтобы я его тыкнул и всё заработало.
Реально ли это сделать человеку ранее не знакомому ни с C ни с программированием?
И где можно найти того кто может это сделать?
Да там много всего, и c++ далеко не один аспект. Сначала советую в целом начать изучать тему, чем доступнее будет инфа и инструмент (питон, матлаб, возможно R), тем лучше. В компьютерном зрении а далее в моей трековой обработке много относительно типовой математики, хотя тема очень обширная. На c++ предполагается конечная реализация продукта (хотя это тоже далеко не так, питон имеет либы, написанные на крестах и сопоставимые по скорости с с++), хотя также есть связка xilinx + matlab, что иногда ставят в камеры.
Короче, математика - основа, язык - инструмент, дерзай.
Алсо, изучая сабж, ты столкнешься с уймой схожих и крайне сейчас полезных задач, типа обработки изображений, линал в прикладных задачах (декомпозиции, eigen, вот это всё), нейросети, которые стоит вписать в резюме.
Все зависит от состояния проекта. Может быть от простого make install до ебли на несколько часов.
Пользуюсь Eclipse CDT и немного CodeLite (там cppcheck работает из коробки, в отличие от эклипса).
Из вима помню только :q!
Там он как web фреймворк, а спринг это целая пачка фреймворков и в первую очередь dependency injection. Потом идет бут (всего понемногу чтоб сразу изкаропки все работало). Есть спринги для микросервисов, для тестирования, для работы с данными (включает в себя тот же самый хибернейт, но знать хибернейт для использования не обязательно). Его надо или в главную линию включать или в каждую ветку вписывать по спрингу.
Разве что захочется написать десктопное приложение, там спринг не нужен. Андроид тоже отдельная тема.
ты все самое хуевое собрал, что есть. Молодец
Микроконтроллеры хоть и не совсем С++, но тоже не интересны.
Дык есть еще куча middleware в виде всяких браузеров/системных либ/рантаймов (языков, виртуальных машин итд).
>А что делать на плюсах, если я не хочу идти в геймдев и не хочу заниматься нейронными сетями/машобом/etc?
>
https://hh.ru/vacancy/36447247
В последнее время видел много плюсов в сторону мк на с++. Действительно, c++ строже си, имеет прекрасный стл, стд::аррай, вектор и шаблоны, почему бы этим не пользоваться? А вся работа с регистрами прекрасно оборачивается в сишечный код, хотя касты тоже никто не отменял.
Ну вот тут написано, что должен делать человек на такой вакансии, но лично я не вижу ничего конкретного. Написано, что ты должен делать какой-то йоба-софт.
>Где можно начать карьеру и какие для этого есть возможности?
В яндекс и мейлру стабильно требуется дохуя крестовиков.
Нихуясе, выглядит впечатляюще.
Вот только как к ним попасть? Наверняка нужно годами обмазыаться всем, что связано с компьютерной графикой и низкоуровневыми вещами
тут был анончик, который собесился в эту команду. Я ему еще по почте запиливал, что да как к ним проходить. Мб отпишется, если увидит.
> решить онлайн контест на алгоритмы.
Ну так вперед задрачивать. Просто так в мире ничего не бывает.
В яндексе я обосрался, в хуавее меня послали нахуй, в мейл не подавался, но там вроде бы и нет открытых стажек или вакансий джуна для таких дебилов как я.
>>661440
>Ну так вперед задрачивать. Просто так в мире ничего не бывает.
Я уже довольно долго решаю литкод, но по словам многих знакомых, попасть на вакансию джуна как правило легче, чем на стажировку к ним - челики, которые со школы дрочили кодефорсес рейт 1800-1900 и тимус, были призерами олимпиад, и те не осилили.
Правда вот джуны и миддлы им сейчас не особо нужны.
Если б я брал на работу программиста и ко мне пришел чувак, который с порога сказал про рейтинг кодефорсес, яб его нахуй послал
Так-то понятно, но там был онлайн контест именно на алгоритмы и задачки с сюжетом. Причем на время. Без онлайн контеста на стажировку бекенд разраба не брали.
>Через 5-10 лет весь рынок будет забит вакансиями на раст
А что на нем будут писать?
Так кстати говорили про многие языки, вот только далеко не на всех есть огромные количества вакансий.
Критический софт в плане безопасности. Блокчейн там разный, браузера потизоньку на него начнут переписывать, новые ОС писать, новые либы - работы непочтаый край, надо же как-то дырявый Си заменить.
Потихоньку будет уступать более современным и безопасным системным языкам (в данном случае Расту)
Так вакансий С++ в РФ тоже нет, кроме нескольких городов, которые можно пересчитать по пальцам одной руки.
Мне кажется, что c++ тоже безопасный. Компилятору ничего не мешает по-умолчанию считать за ошибки сырые указатели например, или си-подобные массивы
C++ не безопасный, так как в нем есть возможность выходить за границы массивов, как и в Си.
Если бы С++ был бы безопасным языком, то в таких продуктах как, допустим, Хром не было бы уязвимостей, связанных с порчей памяти (memory corruption), а на деле там каждый год что-то находят. Ну и в гугле далеко не дебилы работают, засим подобные ошибки в языках типа С и С++, да еще и в огромный кодовых базах, неизбежны, даже если код пишет профессионал высокой квалификации.
>Ну и в гугле далеко не дебилы работают
Rob Pike, по опыту, считает иначе:
“The key point here is our programmers are Googlers, they’re not researchers. They’re typically, fairly young, fresh out of school, probably learned Java, maybe learned C or C++, probably learned Python. They’re not capable of understanding a brilliant language but we want to use them to build good software. So, the language that we give them has to be easy for them to understand and easy to adopt.”
Цитата ни разу не говорит о том, что они некомпетентные, так что к чему ты цитировал Роба Пайка яхз.
Учти, что Хром 24/7 находится под фаззингом, а фаззит его кластер с 15000 процессорами. И все равно независимые исследователи, не связанные с гуглом, находят там дыры в памяти, можно даже открыть CVE, начиная даже с прошлого года, и посмотреть. С++ небезопасный язык и никогда таковым не будет, ибо безопасность влечет за собой потерю перформанса, причем ощутимую, как ни крути. И рыбку съесть, и на хуй сесть - такого не бывает в этой теме. Всегда за что-то платят чем-то.
Так напиши контейнер который при доступе по индексу будет чекать границы массива. В чем проблема?
> Так напиши контейнер
Уже написано до нас. Вектор чекает, если получать через at() а не operator[]
Ну что ты делаешь.
Сейчас этот сектант вернётся и опять будет засирать тред мантрами с конференций полутора землекопов.
Лол, не знал. А какая там разница в перформансе? Когда выдрачивают из софта на крестах все соки в плане скорости - избегают? Или для таких целей уже лучше не ебать мозги и писать на чистом Си?
мимо другой анон-крестовик
Допустим я хочу использовать библу https://bitbucket.org/tunnuz/json/src/default/ ее нужно качать и скомпилировать? Есть какие-то пакетные менеджеры? У нас в питоне requirements.txt в нем прописывается пакет и версия, или ссылка на гит, если пакет тащится с гита, и pip по большей части сам все резольвит, как дела с этим обостоят в плюсах?
Спасибо за ответыДобра и здоровья в это нелегкое время
vcpkg search json
Я что-то пытаюсь смотреть и не могу понять, это вообще возможно?
И что это за параша? Если бы я мог это прочитать, сюда за примерами бы я не приходил.
В общем понял в чём была проблема, шаблоны нельзя разделять на .h и .cpp, но уже C++20, разве ещё не ввели какую-нибудь фичу что-бы это было возможно?
Съебал твою твою мать в жопу, пидар тупой.
Ну не совсем уж без документации. Обычно есть документация уровня "int sum(int, int); // сложение двух чисел", из которой примерно понятно как это использовать, но иногда появляется по десять перегрузок и хуй пойми какую выбрать, приходится копаться в логах коммитов.
std::unique_ptr<Test> test;
test->func();
Я бы думал test создатся на стеке? А почему работает доступ через ->? И какой памятью тогда владеет unique_ptr? Я думал он только кучей владеть может.
test создается на стеке и просто указывает на местоположение объекта в куче. Если его не инициализировать то никакой памятью он не владеет и ты просто дерефнеш нулптр вызвав краш.
std::unordered_map
Ну так то я понимаю, в простом случае
Test* test ;
test->func()
дерефернс разумеется тут же приведет к крашу, но в данном случае unique_ptr работает! Т.е. там не мусор и не NULL. При чем конструктор/деструктор которые я определил не вызываются, что логично. Только почему все равно работает - непонятно.
А вот как только я в func пытаюсь получить значение внутренней переменной класса - тогда segmentation fault. То есть создается какой-то кривой объект, память аллоцируется, но конструктор не вызывается. Не хочется время тратить на этот бред, но все равно интересно, что там по умолчанию в unique_ptr происходит.
Когды ты вызываешь функцию класса (невиртуальную) по сути ты вызываешь обычную функцию в которой есть неявный аргумент this.
Соответственно пока ты не обращаешься к полям класса, ничего удивительного что она вызывается нет.
Если у тебя func не юзает переменные внутри класса и она не виртуальная тогда все логично. Она просто преобразуется в func(Test* this) и вместо this нулевой указатель, соответственно дереференса не происходит и все нормально. Так же будет и с сырым указателем.
Как именно ты его присваиваешь?
Нуль-терминатор не забыл?
Пару тредов назад был спор по такому поводу и выяснили, что это все же UB.
Не делай так, анон. Нужна функция без определения объекта класса - сделай ее статической, например.
Не затыкай меня, манюня. Совет выключить компьютер и никогда больше его не включать - это правильный ответ на твой вопрос.
Как сделать чтобы было сайтом??
По типу этого ideone.com только чтобы можно было работать без интернета.
ну то есть
main.cpp
int Foo = 0;
static int Foo2 = 2;
В чем разница?
Влияет на линковку. Это примерно эквивалетно
namespace
{
int Foo2 = 2;
}
Статическая переменная не видна за пределами еденицы трансляции. С нестатической ты можешь сделать вот такую штуку в другом cpp файле:
extern int Foo;
и получить доступ к первой Foo.
Ввиду того, что пишу на vim'е встал острый вопрос с быстрым получением знаний в этой сфере, раньше молодой был, зеленый и ide все делало за меня, а тепень столкнулся с суровыми реалиями и статьями: "делаем йоба-аллах сборку", где нахуярено миллиард всего и непонятно че как зачем.
Есть какие-нибудь факи проверенные, книжки? Просто советы?
Че лучше юзать? У кого был опыт с Grandle?
По статьям на Хабре
Чтобы нормально писать на раст системное, нужно сделать его небезопасным, однако менее противным он быть не перестаёт в unsafe.
И вообще, ну нафиг этих зумерков со своими жрубями
но ведь небезопасен не весь код, а только ансейф блоки. Что увеличивает вероятность не пропустить баш в прод вообще, ибо проверки на безопасность концентрируются в определенных местах в коде
баг*
> Только почему все равно работает - непонятно.
Один из вариантов это то что так как вызов operator-> у неинициализированого каким-то объектом unique_ptr это UB то компилятор в таком случае может делать что хочет, в том числе просто игнорировать этот вызов в рамках оптимизации.
>дерефернс разумеется тут же приведет к крашу,
и с обычным птром ptr->hui() сработает, если нет обращения к внутренностям, те дереференса this
Там пидоры видимо при компайл тайме чекают в код хуйню какую-то вставляют которая сразу крашит. https://wandbox.org/permlink/XXKOLu9CNT8g9LK8 но я таки смог наебать компилятор и все работает как надо.
Можно ли как-то поймать эксепшен, находясь на уровень выше? То есть не там, где я вызываю функцию, бросающую эксепшен, на на один call выше? Делать re-throw в каждой функции адаптера не хочется
> эксепшен, находясь на уровень выше
Должно быть возможно. Обработка ошибки на любом уровне без ручного пробрасывания - единственный профит эксепшенов. Уточни что у тебя за ситуация и почему не получается. Может там какие нюансы у тебя.
Собираю примитивную многопоточную программу в консоли и всё ок, выполняется как нужно
Но в qt creator'e почему-то программа падает
От чего может быть такое?
Нужно было искать летнюю практику, отправил резюме в пару контор, выслали тестовое.
Кое-как сделал, получил отказ, написали, что слабовато (хз, какие требования для ебучей ЛЕТНЕЙ ПРАКТИКИ в ебучих конторах, писал аккуратно, STL, потоки, классы везде).
Недавно было онлайн-интервью, это был пиздец.
Вопросы задавал чел, у которого был пиздец какой микрофон, постоянно приходилось переспрашивать, потому что слышал только ебучий шорох.
Ответил почти на все вопросы (не ответил на вопрос "как сбалансировать бинарное дерево", хотя и говорил, что можно выбрать в качестве корня другой элемент, но т.к. не прозвучало "поворот дерева", ответ не засчитан), написали, что "не хватает теоретических знаний для них.
Как попасть хоть куда-то?
Я уже и не понимаю, что учить
Что падает? Какая ошибка? Хотя бы дебаггером пройдись посмотри, где у тебя SIGSEGV или что там кидается.
Ты в QT собираешь или отдельно сам через cl/mingw? Судя по гуглу первое, и QT требует своих бинарей в зависимостях. Попробуй одно из:
1) Подложить исполняемый файл в папку, где лежат все dll от кутей и запустить оттуда
2) Проверить через depends.exe, какие либы исполняемый файл требует
Пока что есть только одно задание.
FTP-сервер.
Вводишь будь директория для хоста, клиенты подключаются, видят список файлов, вводят id и скачивают.
Здесь код для одного клиента, на другом ПК прикручена функция Select.
https://pastebin.com/013akARv
А всё ок, кажется
Не знаю в чём была беда, но скопировал dll'ки из папки компилятора к бинарнику и всё ок запустилось
Хотя раньше такого не было, да и из консоли всё запустилось сразу же
> Ананасы, как найти первую работу на ебучих крестах?
Я вот тоже пытался, в ДС. Так и не смог найти. Конечно, можно было податься писать десктоп приложения под винду в какое-нибудь НИИ, но я решил для себя, что уж лучше вкачусь в другой стек, все равно пока студент и родители содержат меня.
На каком курсе это было?
Я сейчас на предпоследнем, после лета учусь полгода, потом практика, диплом и все.
Летом думаю выучить Django и HTML/CSS))0
Я сейчас на втором, вот недавно совсем пытался попасть на плюсы и понял, что
а) Бек разработки на плюсах мало, даже в столицах. Я пытался попасть в яндекс на стажировку, но требования по алгоритмам для стажеров выше, чем для джунов. Но джуны им сейчас не нужны.
б) Я нихуя не умею. Для успешного вката в плюсы нужно знать предметную область. Нужно быть прошаренным в низкоуровневой разработке под железки, хорошо знать как работают оси, знать устройство ядра линукса, уметь прогать под ARM. Либо нужно уметь в компьютерную графику, если хочешь в геймдев. Еще есть датасаенс, но там помимо самих плюсов, нужно хорошо знать питон и все библиотеки для него. Ну и математика само собой.
В железки я не умею, учиться долго и сложно, геймдев абсолютно неинтересен, датасаенс как-то не зашел. Решил вот переквалифицироваться в бекенд макаку, сейчас досдам текущие долги по учебе и примусь за js наверное.
Мда, история невеселая, но у тебя хотя бы чуть-чуть времени есть.
Скорей бы тебя отчислили.
Сложна. Вот как мне 20 стандарт включить? Они ахуели требовать руками конфиги править?
>Вот как мне 20 стандарт включить?
set(CMAKE_CXX_STANDARD 20)
>Они ахуели требовать руками конфиги править?
Лолчто?
А после завода куда?
Или на заводе тоже самое, что и в конторах и меня сразу же возьмут после завода в SPERMASoft?
МНЕ 30 ВКАТЫВАЮСЬ В ПЛЮСЫ
ЗЕМЛЯ МНЕ ПУХОМ
ДЕРЖСУ В КУРСЕ
ДАБДАБДАБ
ИЗВИНИТЕ
Двачую этого.
Сужу по своему заводу: студентов берут отлично, особенно если есть связь с институтом. Работа для меня турбоинтересная и уйма возможностей, правда, в основном саморазвитие, нет гуру рядом со мной. В итоге, за 5 лет, я сейчас неплохо (субъективно) знаю кресты, qt, программирование для мк, си, схемоту, немного цос, линал/тервер с питоном и матлабом, даже как-то линуксы собирал.
Почему такой разброс тем? Детская организация работы программистов, никто меня не ебет за сроки и методы, на интересные для меня проекты я вызываюсь сам, в итоге имея неплохой (надеюсь, востребованный) багаж знаний
>163298
Спасибо, сам разобрался уже:)
Открыл солюшн, сделал ретаргет и собрал, попутно решая возникшие ошибки, которые в основном будут связаны с two-phase name lookup, который там наконец-то починили.
нихуя как ты дохуя всего знаешь, разве на заводах нужны прогеры? там же производство всякое, нахуй там матлаб с линалом и теорвером?
Пример:
int yobaint {};
Это типа чтобы точно быть уверенным, что в инициализированной переменной нет мусора или как?
быстрофикс - инициалицированная:
int yobaint {69};
Но можно еще так:
int yobaint {};
В первом случае какая-то ебанутая инициализация, во втором случае - непонятная ебанина, но предположение уже выдвинул сообщением выше
Uniform initialization
Примеры из NVIDIA NGX SDK.
Потому что наследие си: то, что может быть декларацией функции - декларация функции, была проблема с дефолтными конструкторами из пустых скобок.
Когда ексепшены завезут.
Я в конструкторском отделе сижу, поэтому занимаюсь разработкой всяких новых вещей. Матан активно используется в инженерии, представь себе, сколько математики присутствует в какой-нибудь стиральной машине (теория автоматического управления), или в радаре машины (там различная нейросетевая обработка + приемы вычмата + линейная алгебра). И это все нужно разрабатывать, тестировать, моделировать и внедрять. Если делать как-то по-простому, или хз взять либку для ардуины, то вероятно будет работать ненадежно, не говоря про то, что опенсорс проекты далеко не самый топовый матан используют.
>>663466
У меня в среднем за месяц около 70-80, не ДС.
70-80 после 5 лет это, конечно, не фонтан.
Вот тебе и востребованный багаж знаний.
Мог бы в ДС 500кк/сек зарабатывать веб-программированием.
freudian slip
> Насколько сильный оверхэд у исключений?
Большой. Зависит от количества исключений которое будет генерироваться. Если пару десятков в секунду то похер. Если сотни/тысячи то скорее всего будет заметное падение производительности - там уже нужно профилировать и смотреть подходит такое или нет. Плюс еще важна глубина на которой ловится исключение. Если на каждом исключении стек раскручивается на несколько десятков вызовов - понятно что быстро это не будет. Просто чтобы приблизительно понимать вот две равноценных программы https://ideone.com/6PmOav https://ideone.com/EzHI0F (одна с исключениями, одна нет). ideone нивкоей мере не подходит для оценки производительности - отличия в скорости между несколькими выполнениями одной и той же программы могут отличатся в разы. Но он позволяет приблизительно оценить порядок отличий - блок с исключениями медленней на два порядка (приблизительно в 100 раз).
Обрати внимание что важен не факт использования исключений, а именно количество выброшеных исключений. https://ideone.com/Cl0BMk - тут ideone уже не позволит оценить производительность. Я примерно чувствую что должно быть падение процентов на 30% в скорости.
Бросать эксепшены дорого.
Активное бросание эксепшенов сильно влияет на производительность.
Наличие эксепшенов в коде, который условно никогда не бросает эксепшены - тоже влияет на производительность, так как препятствует code-reordering, а значит и другим оптимизациями
>не говоря про то, что опенсорс проекты далеко не самый топовый матан используют.
неужто для линейной алгебры, вычмата и нейросетей вы пилите велосипеды, т.к. ваш код качественнее, чем в TensorFlow и lapack?
PS: я конечно понимаю, что написал хуйню, но блядь... почему оно собралось вообще?
Почема не выводит 0?
Каво? Это же не символы. Да и прикол в том что оно не компилируется
а крестики так умеют?
> out = 0x100000000000000000000001000000000000000000000000000000 ^ 0xffffffffffffffffffffffffffffffffffffffffffffffffffff
> "%x" % out
'10fffffffffffffffffffffeffffffffffffffffffffffffffffff'
Ну, сделаю, добавив пару постфиксов и auto... Ты гордишься синтаксическим сахаром которым никогда не воспользуешься?
На сам деле я часто использую питон для кодогенерации, про питономакаку была цитата)
Читай про приоритет операций. Да, это неудачная перегрузка оператора << вместо обычного метода.
>Как это называется?
Псевдокод? Живучесть си в том что он лёгок для интерпретации, а препроцессор может как сильно сокращать размер кода, так и менять его просто риздец как - никаких скобок может не быть.
тебе раз его предвзятый тон не нравится,иди нахкй на Пикабу
о членах класса, public и private
Посоны, помогите нюфагу-пизданизду-веб-макаке. Хочется пощупать программирование так как оно есть, а не так, как я делаю сейчас на бэкэнде.
Решил вкатиться в плюсы, хотя бы чисто для себя. И обнаружил что у меня дикие пробелы в CS (если можно так назвать). Работа с потоками, памятью, вот это вот всё - не понимаю.
Что почитать для совсем нюфагов? Может даже не про язык, а про то как всё работает
Что бамп-то? std::bind возвращает неизвестно что, в твоем случае он вернул что-то из чего смогла создаться std::function<void(C)>.
Научись делать минимальные примеры. У тебя куча лишних вещей, которые отвлекают.
https://godbolt.org/z/dvs3Ra
Колбек вызвался успешно потому что там нет разницы с каким количесвтом агрументов ты его вызываешь, до тех пор пока их хватает - потому чт оагрументы не передаются напрямую в колбек, а вызывается std::invoke (который получается все переданые аргументы) - и из них выбираются нужные в соответсвии с std::placeholders которые ты передал при вызове std::bind. А так как ты ничего не передавал то все агрументы просто игнорируются.
Почему пройден статический контроль неясно. Скорее всего результат std::bind неявно приводится к любому callable. Наверное это из-за того что у результата std::bind нет как таковой сигнатуры - его можно вызывать с любыми аргументами, ошибка будет только если std::invoke не найдет всех нужных агрументов.
>В НИИ ты наименее вероятно будешь писать десктоп на крестах, вероятнее какой-нибудь клёвый матан или управление на си
А как такое искать в ДС? Типа есть какие-то НИИ, которые выставляют вакансии на хх, но то видимо нормальные заведения, куда нужны нормальные кадры
Спасибо. Доходчиво объяснил.
Дело говоришь. Даже длинную арифметику приходится переписывать под задачу.
ЕМНИП там треды, семафоры и критические секции вполне нормально сделаны. Что не так?
Оно дизайнилось чуть ли не в 90ых на сишечке. Абсолютно вся "красота" современных языков - тупо обертка над этим.
альтернативы обычно из разряда: что-то специфическое лучше, но в остальном сосет
Напиши код, вынеси его в отдельный неймспейс, протести
Скажи им там в этом майкрософте тогда, как надо было сделать! А то хули, сколько десятков лет уже всё криво и косо.
Начни хотя б с opengl, если с графикой не работал.
Анимедебилы спокойно пишут транспиляторы шиндусятской директхуйни на вулкан, пока вы тут ряясложнаете
Если ты хочешь научиться - бери либо OpenGL, либо DirectX 11, ни в коем случае не трогай ни вулкан, ни DX12
Юнити задрачивай
Vulkan это не апи для рисования, это апи для программировани видеокарты. Подумой.
И че там по мате. Надо что нибудь знать для изучения opengl, или математика пригодится только в моих собственных проектах?
Тогда ещё не знали, как надо правильно программировать. Сейчас тоже не знают, но знают, как не надо.
>Сейчас не знают как программировать, но знают, как не надо.
Всё верно, программисты остались в 90-х, сейчас макаки которым программирование не надо.
Тащемта вулкан лютая хуйня. После него DX12 выглядит как годнота для людей. Писать под вулкан на Винде - себя не уважать. Тем более технологически вулкан всегда в позиции догоняющего. Майки переработанную версию DXR выкатывают, а в вулкане только первую версию трассировки выкатили, на которой только хэллоуворлды есть.
DX12 чето пиздец как переусложнен. Тредсейф убрали, контекст убрали, и самый пиздец это то, что теперь ты САМ должен контролировать все дескрипторы ЦПУ и ГПУ т.е. писать свой диспетчер этих дескрипторов.
Ну в вулкане ещё хуже. DX12 под многопоточных рендеринг заточен, если разобраться, то ничего сложного. Просто куча шаблонного кода для синхронизации и управления памятью.
>После него DX12 выглядит как годнота для людей.
для макак, которые выучили dx какой-то версии и пишут шинда-only преложухи
Без математики никак. Почитай какие нибудь учебники по линалу и матану. В особенности по линалу, без него никак.
Ты про еблю из-за ассинхронности самого api - ну фенсы там шменсы-барьеры?
Если ты изучаешь язык, то конечно нет. Если ты учишься программировать, то конечно нужно.
А что там с матаном?
Ну я же вызываю terminate process
>The handle must have the PROCESS_TERMINATE access right. For more information, see Process Security and Access Rights.
Наверняка кто-то доки плохо читает.
и уж наверняка среди каких-то из твоих нулей (подсказка нубу: 0=nullptr=false) есть какой-то с access rights флажками.
чому в вакансиях 11/14 стандарт хотя вот вот выкатят 20?
Потому что ленивые хуесосы не могут пересесть на 17 стандарт кококо зависимости кудах нам заебись и так
Легаси, у меня от 17 до недо 11 например приходится использовать. Причем 17 мои личные.
Легасихуйня или бездари девелоперы. Мы перевели у себя все проекты на 19 студию\17стандарт, но потратили время
Где-то месяц суммарно на все проекты одного разраба, но разраб сильный, и проектов немного.
В чем переход заключался? Я переводил около двухсот проектов, тоже где-то месяц заняло. Пересобирал штук 15 библиотек, исправлял сборку, выпиливал некрокод (в т.ч. части буста, которые вошли в стандарт), фиксил шаблонные конструкции и всякие ошибки, которые раньше не проявлялись
std::experimental::filesystem, хуева гора деприкейтов, новых варнингов и прочего. Ну и бонусом мы там еще меняли CI\CD и еще мелочи.
А если нужна графика с 2д примитивами, нарисовать там линии, квадратики, битмап вывести, без сильной динамики. Кроссплатформенное и без qt?
другой анон
Можешь вообще руками всё рисовать, ёпта.
>expected an expression
Что не так?
Ты тредом ошибся, тебе в си.
конструктор отваливается ещё хуже
const struct timeval(.tv_sec = FM_MODWORKER_TICK, .tv_usec = 0);
>Designated initializers are indeed very useful as you point out, if only they could be used in code-bases that are supposed to be portable. If your code needs to be compiled with the Microsoft C compiler – tough luck! Microsoft still stubbornly refuses to support C99, and as a result, designated initializers as are not supported.
Лямбды есть, а вот этого нет.
Плюсы: c++ безопаснее, 80% дефайнов меняются на енумы, шаблоны-шаблончики, стл, вектора и карты, и миллиард написанных библиотек.
>шаблоны-шаблончики
https://en.wikipedia.org/wiki/FLTK
>It also avoids complex macros, separate code preprocessors, and use of some advanced C++ features: templates, exceptions, and run-time type information (RTTI) or, for FLTK 1.x, namespaces.
Для 98 это был плюс. В 2к20 с нормальной иде и цлангом нет проблем работать с шаблонами
Нет проблем вообще написать эмбеддед-софт на жабе. Ну почему нет? Посмотри на смартфоны, взлетело же.
Для этого ему нужно приблизиться по скорости к Си. Что в свою очередь ведет к отказу от фишечек Си++ так как они ведут к дополнительным тратам ресурсов, т. е. ты на плюсах будешь писать как на сях.
Сам создатель, который с гим работает всю жизнь, не умеет на нем писать. В этом нет ничего зазорного. А то что ооп это компромисс между производительностью и структурированнностью кода - давно известный факт.
Хотел попробовать переводить в sleep_for обычное сишное значение, а не std::chrono::seconds. Дожно конструироваться же.
Посмотрел в заголовок и нихуя не понял.
Как я понимаю, ява разрабатывалась с идеей создания унивирсального байт-кода для любой платформы с использованием какой-то ебаной ява-машины, но мир на самом деле родил не так уж и много разных аппаратных платформ, арм везде пустил свои щупальца, а гцц/цланг позволяет генерить код под все популярные (и не очень) архитектуры. ИМХО, ява обречена, ее популярность сугубо из-за легаси.
Да и c++ родной с си, без проблем один в другой можно включить, что хорошо для плавного перехода HAL.
>>666114
Многие мои коллеги не компилируют под мк с -O3, типа что-нибудь отвалится, изменятся тайминги и не будет работать. Да, люди игнорируют варнинги.
>Да, люди игнорируют варнинги.
Я тоже игнорирую их т.к. приходится просто. Вот взял ты либу какую-нибудь с гитхаба, подключил и сразу получил 100+ варнингов. И что мне блять с этим делать, самому их фиксить? Мне проще вырубить их нахуй и все.
Брукшир информатика и ВТ
Вряд ли взлетит
О, что тут у нас, долбоеб пишущий говнокод, который думает, что этот код крут потому что написан на плюсах? Может перестанешь на бьерна дрочить и собой займешься?
SFML ?
SDL
Скажи, ты тот же ебалдяй, который с пеной у рта доказывал про опасность goto или другой? У вас очень похожий мыслительный процесс, если это словосочетание вообще применимо к вам.
Это обычный человек, без мозгов, привыкший подчиняться чужой воле, настолько, что даже когда никто не приказывает, думают что приказ существует. В реальности проявляется так: вот есть в С++ классы, шаблоны, етс. етс., значит НУЖНО это всё юзать, иначе ты лох-пидр бла-бла. Тямы нет осознать, что это не принудиловка спущенная "начальником", а свободный выбор, где только ТЕБЕ ЛИЧНО решать использовать или нет. Потому что сами думать и за себя решать не способны в принципе, на генетичсеском уровне не способны.
Всё работает, но есть проблема при считывании файла. При создании объекта класса String в функции Get_file_Content содержимое файла успешно считывается туда, но при возвращении ничего не сохраняется. Приходиться передавать объект класса по ссылке - 2 скрин и делать её void. Что я упустил? Написать отдельный метод, чтобы возвращать содержимое в случае return ?
Ну какой нахуй собственный класс строки в 2020 году? Без мув конструктора тем более. Вангую, в консрукторе копирования у тебя там string_ = other._string
Если хочешь ООП ради ООП возьми Qt и педалируй там интерфейсы. Тут тебе и наследование, и инкапсуляция, и полиморфизм, и композиция и ещё куча умных слов
Они во всех трех компиляторах есть уже. Тот же микрософт в проде уже минимум год использует, например.
Бтв раст екзист
Зачем доказывать то, о чём тебе Бог-создатель сам рассказал? goto нельзя использовать из-за того что он дает слишком много возможностей.
Насколько можно понять из твоего хуевого описания, проблемы в конструкторе копирования, ищи там
Плюс мув-конструктора нет, что скажется на эффективности работы.
Как и еще кучи вещей по типу виртуального деструктора, мув-присваивания, инициализации итераторами, определения типов размера, отдельного чара и тд.
Если целью не стоит заимплементить именно юзабельный тип, то лучше тренить ооп на чём-нибудь попроще: animal, cat, dog и тд
Ясно, значит ты всё-таки тот самый опарыш
что-то мне подсказывает, что люди так и останутся сидеть на хидерах, причём это коснётся как всяких системных бздей, так и прикладных к ним утилит
Я не могу тебе взять и достать код из какого-нить внутреннего гита Микрософта. Я подписан на твиттеры челиков из MSVC, они писали, что у них внутрях уже модули во всю используются.
>>666611
Ну, вот тут я не согласен. Как только в IDE появится полноценная поддержка модулей (Вижуал Студия 2021?) - мы на работе переедем в ту же секунду.
современные компы и компиляторы спокойно компилят файлики под сотню тысяч строк
Ну хз. Вроде здесь конструктор копирования простой (пик 1). И он нормально работает при создании объекта (пик 2).
Книгу Вильямса гугли про параллельное программирование
>У тебя комплюктер пополам треснет при попытке открыть и отредактировать файл на 1кк строк.
гугли Amalgamation builds
Я не про то что не скомпилится, а про то что большинство текстовых редакторов (с подсветкой синтаксиса особенно) едут крышей когда открывают файл >1 Гб. даже швитой ВИМ - по крайней мере в 2014 не вывозил
>Они во всех трех компиляторах есть уже.
3(2), причём судя по описаниям везде не full featured. Я готов хоть на ебучий текстовый редактор, дайте модули, сука.
Вопрос таков: каков самый быстрый способ (в рамках ОС, без ебанутых хаков с кастомными гипервизорами) наплодить N процессов и в бесконечном цикле кормить их разными вкусняшками? Я линуксоид, поэтому на ум пришло расфоркаться N раз (имеем в итоге одного отца с N дитяток), батя кормилец, а все N детей потребляди.
Попрошу заметить, что каждый из детей вызывает одну и ту же программу через execve, поэтому треды здесь не покатят.
Это часть функционала одной программы, которую я пишу на плюсах вперемешку с Си (кресты нужны из-за ООП в очень многих местах + банально удобнее работать с данными в некоторых моментах).
Что скажете, есть быстрее способ или я вообще хуйню несу?
Вопрос таков: каков самый быстрый способ (в рамках ОС, без ебанутых хаков с кастомными гипервизорами) наплодить N процессов и в бесконечном цикле кормить их разными вкусняшками? Я линуксоид, поэтому на ум пришло расфоркаться N раз (имеем в итоге одного отца с N дитяток), батя кормилец, а все N детей потребляди.
Попрошу заметить, что каждый из детей вызывает одну и ту же программу через execve, поэтому треды здесь не покатят.
Это часть функционала одной программы, которую я пишу на плюсах вперемешку с Си (кресты нужны из-за ООП в очень многих местах + банально удобнее работать с данными в некоторых моментах).
Что скажете, есть быстрее способ или я вообще хуйню несу?
Вим, имхо, нихуя не показатель быстрого редактора. Да и миллиард разных обвесов не позволяют судить где сам вим а где что-то ещё лагает.
Самый быстрый всё же саблайм.
Алсо, даже в вскод кто-то пытался впихнуть инкрементальный парсер для подсветки кода (https://github.com/microsoft/vscode-go/pull/2555), что как бы намекает что сварганить из готовых инструментов открывалку для гиговых файлов в 2к20. Правда кому это нахуй надо кроме полутора долбоёбов поехавших на перформансе.
>в рамках ОС
Тащемта без задней мысли берёш и делоеш. Гуглируешь API создания процессов и IPC для своей любимой ОС и всё.
> У тебя комплюктер пополам треснет при попытке открыть и отредактировать файл на 1кк строк.
Кошерные редакторы могут грузить файл по частям. Это не такая уж и сложная фича. Самое сложное в этом - составить карту памяти новых строк, чтобы какое-то подобие классической навигации было.
Ну а вообще я надеюсь что тот анон шутит так.
Я объяснил как я это делаю, ты читал вообще сообщение или остановился на "в рамках ОС"?
Я спрашивал есть ли способ БЫСТРЕЕ это делать?
Если тебе нужно решить какую-то задачу — не страдай хуйнёй и возьми готовый ивентлуп (libuv/libev/итд) на вкус, если хочешь более хайлевел решение — возьми какую нибудь либу с корутинами и шедулером.
Если в целях образования — то возьми либу по вкусу из совета выше и ковыряй её исходники. Если будешь вслепую писать на найденных апишках — скорее всего просто проебёшь кучу времени и придёшь к тому же результату в конце концов.
>>1187897
С копи конструктором все норм. Но там еще вызывается Resize, и непонятно как именно используется Get_File_Content: инициализируешь новую переменную - вызывается копи конструктор, присваивание к уже существующей - operator=
И раз ты подебажил и понял, что файл действительно успешно читается, то в чем проблема посмотреть что там происходит в месте вызова Get_File_Content?
val was 0xDC6E168000. Хотя до этого 2 раза нормально прочел два других региона с state commit, правда protect read
Наверное это связано с описанием про read write здесь, но я не собираюсь исполнять этот код. Почему тогда ошибка?
Хотя такое же описание у ридонли, но ридонли спокойно читается
Ананасы, изучаю многопоточку
Дошёл до атомиков и мем_ордер
Как в этих мем_ордерах разобраться-то? Ну кроме дефолтного
Анончики, почто я так бездарно просрал свои студентские годы? Писал свои велосипеды на Си вместо того, чтоб окунуться в кресты. Довыебывался, работаю теперь черти на чем вообще, а ведь мог без задней мысли, рекурсивного захлебывания инфой из толстых книжек и прочего педантизма юзать мощь крестов в свое удовольствие и постигать дзен в бою - давно бы уже крестовиком трудоустроенным стал.
Что именно можно?
Если ты про компайл-тайм вычисления, то это просто что то типа встроенного продвинутого калькулятора. Приятно, но в целом хуйня.
Представляю как ты охуеешь, когда дойдешь до темплейтов и узнаешь про всякие metaprogramming штуки
На заметку.
На пике один ты инициализируешь size_, а потом выделяешь в string_ size_ +1 элементов в списке инициализации.
И все это работает только потому что в самом классе ты сначала объявил size_, а потом string_. Было бы наоборот - падал бы твой конструктор и ты бы очень долго искал ошибку.
Потому надо инициализировать члены класса в порядке объявления.
Свой собственный
Не особо понятно, куда ставить этот флаг. В списке флагов функции createprocess такого нет, а если все же его там выставить, процесс просто не запустится.
Но что самое странное, код успешно работает, если в качестве приложения выбрать например internet explorer, или foxit reader.
Может есть какой то запрет на terminateprocess именно у калькулятора?
Самый лучший стиль у линукса
а чем тогда CodeForces&
>Попрошу заметить, что каждый из детей вызывает одну и ту же программу через execve, поэтому треды здесь не покатят.
Какой-то изначально ебанутый дизайн, если честно. Тебе так в любом случае придётся делать процессы через стандартное АПИ оси, от этого ты никуда не денешься никогда. Вопрос лишь в том, как процессы общаются между собой - через пайпы или Posix Message Queue или shmget или сокеты или что придумаешь.
Посмотри настройки VS или переменную среды _NT_SYMBOL_PATH
Короче смотри. В виндобс до недавнего времени юникод был реализован через жопу UTF-16, соответственно все методы из windows.h при наличии макроса UNICODE имеют постфикс W и принимают wchar_t. Если таргетишь Винду версии 1903 и выше, то можно вроде как отказаться от этого макроса и в настройках винды включить utf-8
Какой же я тупица. Я все понял
void CustomAreaTool::floodFill(int x, int y)
{
QColor color = selectionMask.pixel(x, y);
if(x >= 0 && x < selectionMask.width() && y >= 0 && y < selectionMask.height() && color == Qt::black && color != Qt::white)
{
selectionMask.setPixelColor(x, y, Qt::white);
QColor colorE = selectionMask.pixel(x + 1, y);
QColor colorW = selectionMask.pixel(x - 1, y);
QColor colorN = selectionMask.pixel(x, y + 1);
QColor colorS = selectionMask.pixel(x, y - 1);
qDebug() << "x = " << x << ";" << "y = " << y;
if (colorE == Qt::black)
{
floodFill(x + 1, y );
}
if (colorW == Qt::black)
{
floodFill(x - 1, y );
}
if (colorN == Qt::black)
{
floodFill(x, y + 1);
}
if (colorS == Qt::black)
{
floodFill(x, y - 1);
}
}
view->setCanvas(QPixmap::fromImage(selectionMask));
}
void CustomAreaTool::floodFill(int x, int y)
{
QColor color = selectionMask.pixel(x, y);
if(x >= 0 && x < selectionMask.width() && y >= 0 && y < selectionMask.height() && color == Qt::black && color != Qt::white)
{
selectionMask.setPixelColor(x, y, Qt::white);
QColor colorE = selectionMask.pixel(x + 1, y);
QColor colorW = selectionMask.pixel(x - 1, y);
QColor colorN = selectionMask.pixel(x, y + 1);
QColor colorS = selectionMask.pixel(x, y - 1);
qDebug() << "x = " << x << ";" << "y = " << y;
if (colorE == Qt::black)
{
floodFill(x + 1, y );
}
if (colorW == Qt::black)
{
floodFill(x - 1, y );
}
if (colorN == Qt::black)
{
floodFill(x, y + 1);
}
if (colorS == Qt::black)
{
floodFill(x, y - 1);
}
}
view->setCanvas(QPixmap::fromImage(selectionMask));
}
Но ведь челы в уроках как то красят этим алгоритмом. Если рекурсию нельзя, то как красить?
Переделать в цикл. Или думаешь у тебя в стек влезет 70к вложенных вызовов?
void floodFill(int x0, int y0)
{
vector<pair<int, int>> store(1, {x0, y0});
int dx[] = {1, 0, -1, 0};
int dy[] = {0, -1, 0, 1};
while (!store.empty())
{
auto pos = store.back();
store.pop_back();
auto col0 = selectionMask.pixel(pos.first, pos.second);
for (int dir = 0; dir < 4; ++dir)
{
int x = pos.first + dx[dir];
int y = pos.second + dy[dir];
if (x < 0 || x >= selectionMask.width() || y < 0 || y >= selectionMask.height())
{
continue;
}
auto col1 = selectionMask.pixel(x, y);
if (col1 != Qt::black) { continue; }
store.push_back({x, y});
selectionMask.setPixelColor(x, y, Qt::white);
}
}
}
Переделать в цикл. Или думаешь у тебя в стек влезет 70к вложенных вызовов?
void floodFill(int x0, int y0)
{
vector<pair<int, int>> store(1, {x0, y0});
int dx[] = {1, 0, -1, 0};
int dy[] = {0, -1, 0, 1};
while (!store.empty())
{
auto pos = store.back();
store.pop_back();
auto col0 = selectionMask.pixel(pos.first, pos.second);
for (int dir = 0; dir < 4; ++dir)
{
int x = pos.first + dx[dir];
int y = pos.second + dy[dir];
if (x < 0 || x >= selectionMask.width() || y < 0 || y >= selectionMask.height())
{
continue;
}
auto col1 = selectionMask.pixel(x, y);
if (col1 != Qt::black) { continue; }
store.push_back({x, y});
selectionMask.setPixelColor(x, y, Qt::white);
}
}
}
Спс, чел, попробую.
А что тут происходит вообще?
То есть ты создаешь свой стек store с пикселями. Потом достаешь из него по одному пикселю и одновременно суешь еще несколько его соседей. Так ведь?
1. Используй тайпдефы из хэдеров (ULONG/PVOID/ULONG_PTR итд)
2. Получи верхнюю и нижнюю границы адресов пользовательского режима, вместо сканирования вслепую с нуля до бесконечности.
3. Исключи из поиска регионы без нужного тебе доступа
4. Проверь доступность страницы в рабочем наборе, сканируй только те страницы, которые присутствуют в физической памяти и помечены системой, как доступные для использования
Windows NT style, самый чистый и правильный кодестайл, ноудискасс.
Батя кладет данные в расшаренный буфер от mmap, детки хавают это. Проблема producer-consumer решается семафорами.
Почему ебанутый? Запускаешь программу, она плодится на N процессов-детей. Отцовский процесс готовит данные, дети их хавают. В итоге у каждого из N процессов есть разные данные и все они исполняются параллельно (насколько позволяет цпу машины). А учитывая, что IPC через расшаренную память является самым быстрым из всех других видов IPC, то получается вроде как неплохо. Быстрее - только высрать кастомизированный гипервизор со специально спроектированной моделью ввода-вывода.
Да я уже понял. Я забыл что адресс не моего процесса, и тупо обращался по адресу другого процесса в своем. Естественно вылетало.
> 2. Получи верхнюю и нижнюю границы адресов пользовательского режима, вместо сканирования вслепую с нуля до бесконечности.
От нуля до 7FFFFFFF. Так написано на в доках майкрософта. Дальше процесс распологаться не может.
> 3. Исключи из поиска регионы без нужного тебе доступа
Сделано
> 4. Проверь доступность страницы в рабочем наборе, сканируй только те страницы, которые присутствуют в физической памяти и помечены системой, как доступные для использования
Сделано
Все работает. Причем довольно быстро. Спасибо за ответ
Чуток ошибся. For a 32-bit process, the virtual address space is usually the 2-gigabyte range 0x00000000 through 0x7FFFFFFF. For a 64-bit process on 64-bit Windows, virtual address space is the 128-terabyte range 0x000'00000000 through 0x7FFF'FFFFFFFF
Я HPC не занимался и не знаю как у вас принято, но я просто не вижу смысла городить процессы там, где можно обойтись простым тред пулом. Судя по постам код подконтролен тебе и поэтому я не очень понимаю, зачем так нужен execve. Да, по скорости не должно отличаться если всё правильно сделано хотя кто там знает, как в glibc межпроцессные семафоры реализованы, но плодить лишние тяжеловесные сущности со своими (хоть по большей части и расшаренными) виртуальными пространствами - как-то не то это.
Насчёт второй части оригинального вопроса - о "скорости кормления" - зависит от специфики твоей задачи, и плюсы тут не помогут. Какой размер у единицы работы, как сильно влияет false sharing, много ли ядер одновременно дёргают общие переменные - только ты знаешь. Тут уже не важно, треды или процессы, физически страницы одни и те же. Лично я до таких мелочей никогда не оптимизировал, поэтому подсказать не могу.
Ответвление. Опенгл может и дальше развиваться независимо от вулкана, как С развивается независимо от С++.
Пчел, повторяю, каждый ребенок вызывает ДРУГУЮ программу. Это часть задачи, какие нахуй треды, если из-под них нельзя вызвать другую программу? Execve из треда, а не из отдельного процесса, накроет пиздой весь process image той программы, исполнение которой я хочу поддерживать в бесконечном цикле. Именно поэтому в виду специфики задачи я должен плодить именно ПРОЦЕССЫ, а не треды. Причем не по кд, а высрал N процессов, а потом только подохшие заменяю по мере поступления сигналов к отцу. Сам форк имеет copy-on-write, ощутимый оврехэд есть разве что у execve, ибо он вайпает все виртуальное адресное пространство и заполняет его новыми данными.
Спасибо
Спасибо
stack это адаптер, ни на чем он не реализован, а просто внутри использует один из контейнеров, причем на выбор пользователя.
И да по умолчанию это дек, потому что есть подозрения, что лист со своими оверхедными ссылками хуже по производительности
А возможность доступа по индексу в queue - пиздеж скорее всего, или подгони пример использования
Спасибо
Вот это да, но тут проблемка воникает. Скачиваю адреналин от амд, обновляю драйвера и комп начинает нихуева лагать. Фризы, мерцания и тд. Сейчас конечно еще попробую, но мне кажется ничего не изменится
Так для дека-то ясен хуй что есть, я думал ты про std::queue
Mysql++ ?
Во вкладке OpenGL report каждый уровень подробнее расписан
Хорошо, установка пошла
Если страшно, то всегда можно в жопоскрипт перекатиться
всех АМДкретинов теперь буду посылать читать эти посты
У меня в зависимостях стоит файл opengl32.lib, хотя в папке винды я также нашел OpenGL32.lib . Поменять имя?
Каво? Я просто обновился с помощью адреналина выпил баночку7. Не думал что тут какие то приколы есть
Сейчас скину. Но смысл? Он и так говорил что 4.3 поддерживается . А мне программа ругалась на то, что у меня версия ниже 3.2
Следовал этим урокам. Может тт не то написано или я криворукий?
1 пик не тот
попробуй директЫкс 11. Чуть сложнее ОПЕНГЛ (COM-блевотина не лечится), но зато есть полноценные книги (вроде даже с переводом) от Frank D. Luna
Т=2,Е=4-эти значения должны вводиться с клавиатуры . Вектор состоит из 7 чисел которые вводятся с клавиатуры. Нужно найти сколько раз встречается Т и Е среди чисел в векторе
начал писать код,но че с ним делать не знаю:
#include <iostream>
using namespace std;
int main()
{
double T,E,N;
int i,K[7];
for (i=0;i<8;i++)
cin>>K;
if (i%2==0)
T=K;
}
int i,K[7];
cout<<"Введите 7 значений вектора К "<<endl;
for (i=0;i<8;i++)
cout<< "T="<<T<<endl;
DirectX всегда был ком-парашей, насколько я знаю
Я использую CLion IDE в котором CMake для сборки используется, так что нужно как-то через него это сделать. Нужная либа DuckX для чтения и записи docx файлов.
Проблема в том, что когда просто копирую репозиторий к себе, добавляю в свой CMakeList.txt add_subdirectory(DuckX) и потом дописываю target_link_libraries(project duckx).
Оно вроде как заводится, но когда я начинаю пробую открыть docx какой-то в коде - у депенденси этой библиотеки вылетает какой-то эррор (Assertion failed: (s), function strlength). И я просто из-за отсутствия опыта тупо не могу понять, это либа не работает вообще или я криворукий дебил. Подскажите, пожалуйста, руки опускаются, мне просто нужна возможность открывать док файлы и немного изменять их.
Вот мой CMakeList.txt
cmake_minimum_required(VERSION 3.16)
project(untitled)
set(CMAKE_CXX_STANDARD 14)
add_subdirectory(DuckX)
add_executable(untitled main.cpp)
target_link_libraries(untitled duckx)
Прошу прощения за очепятки, у меня стресс, целый день страдаю
>первую программу на плюсах
>парсит ворд
В CMakeLists.txt все верно вроде. Проверь, не выводит ли cmake какие ошибки во время сборки. И раз у тебя есть весь код, тебе религия не позволяет воспользоваться отладкой и посмотреть в чем там дело?
Есть варик отдельно сбилдить эту либу и уже потом подключить нужные файлы в основной проект, хотя это то же самое так то
Ну и комп ребутни ессно
>у меня стресс
Тебе в JS-тред, там тебя приголубят
Завтра хотелось бы сделать
Попробуй в сторону posix_spawn посмотреть. Говорят быстрее, чем обычный fork+exec
Валится оно в pugixml библе. Я так полагаю ему тяжеловато взять strlength от NULL. Такие ошибки в плюсах могут быть из-за неправильного подключения библиотеки?
>Тебе в JS-тред, там тебя приголубят
не, спасибо
Ладно, похуй на эту сломанную библу, я понял что док файлы это просто zip архивы, так что просто юзну libzip (распакую и запакую заново). Только странно что там написано что он работает только с zip архивами, как-то это странно. Может есть какой-то более народный инструмент для архивации? Просто реально не хочется опять какие-то ошибки сейчас словить
Блять, так поэтому и падает на ассерте. contents я так полагаю - содержимое файла? Если да, то видать эта хуета просто файл не смогла прочесть. Попробуй другой попроще. Либо вообще ищи альтернативную либу
И да, скидывай код твоей проги. У меня закрадываются подозрения, что ты не отлавливаешь ексепшены/ерроркоды
Спасибо тебе, из-за этого ответа я понял, что я очень ТУПОЙ. Я неправильно указывал путь к файлу, надо было абсолютный. Программа там уровня Hello World, все заработало. Но как указывать относительные пути к файлам я так и не понял.
Как правильно обернуть в try catch, чтобы понимать из-за чего ошибки? Они супер неочевидные, почему оно просто не сказало что не нашло файл например?
класса могла получить адрес, по которому этот ОБЪЕКТ находится?>Как сделать так, чтобы при вызове объекта класса, некоторая переменная внутри ОБЪЕКТА
Ёбанное ООП!
Vulcan
Если надо не игровой движок собрать, а пару шаров нарисовать, то нахуй он нужен, этот твой вулкан.
П Е Р Е К А Т https://2ch.hk/pr/res/1668936.html (М)
Е Р Е К А Т https://2ch.hk/pr/res/1668936.html (М)
Р Е К А Т https://2ch.hk/pr/res/1668936.html (М)
Е К А Т https://2ch.hk/pr/res/1668936.html (М)
К А Т https://2ch.hk/pr/res/1668936.html (М)
А Т https://2ch.hk/pr/res/1668936.html (М)
Т https://2ch.hk/pr/res/1668936.html (М)
А ебать, сорян тогда
Ну, это я гиперболизировал. Может, ему какую-нибудь небольшую визуализацию данных надо сделать, несколько нестандартную. Вулкан ради этого пердолить смысла нету.
Признаю, что мне неохота обсуждать с тобой всё это конструктивно. Отчасти, от тона, не предвещающего продуктивное обсуждение. Поэтому, пожалуй, просто проведу аппеляцию к личности собеседника -- ты долбоёб, иди нахуй.
Я рад что ты признал свою неправоту и решил съебать
ГЕТ
Прочитал в справочники Qt о QTranslator и ничего не понял.
Вопрос именно с созданием qm файлов.
Спасибо.
Это копия, сохраненная 19 августа 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.