Это копия, сохраненная 11 сентября 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
• https://github.com/sosachbot/cppthreadhat/wiki
Ответы на вопросы:
• https://en.cppreference.com/w/
• https://www.cplusplus.com/reference/
Прошлый тред: >>1668430 (OP)
Таааак уже интересней (или нет, хз).
Я уже такое получал с другой правда хуйней, на стаке пишут копию нельзя чего то блять там
https://stackoverflow.com/questions/1779438/error-with-qobject-subclass-and-copy-constructor-qobjectqobjectconst-qobj
Какую копию, чево блять, у нас же скелет класса в заголовочном файле типа и мы ему просто методы определяем уже в программе не?
Нихуя сука вообще не понимаю чего делаю.
кьют квик кайф темка, завтра за компутером буду - посмотрю, как сам делал, и помогу
мимо с компьютером на вы
Полностью его никто и не знает.
Помоги, а то делаю плеер на говяжем анусе (всмысле на бакенде дедбиф) и сука один метод chfysq прокинуть не могу хоть посмотреть как работает кьюмл этот с плюсами.
А то ни одного плеера нет вменяемого-современного, на линуксах так вообще больше половины тупо на пистоне завязана на библиотеки всякие уродские из окружения. Есть на маке плеер свободный Cog с браузером как в клементине ну и развивается форматы все поддерживает, но там автор упрлся по харткору он сам библиотеки пишет с разбором структуры аудиофайлов на обжектив си (то есть не портируемые нихуя). Я тоже когда то брался чисто для интереса более менее инкапсуляцию Ogg и Flac освоил но не декодирование даже, а форматов хуева гора да еще у каждого там разные версии и методы сжатия и даже порядок байт бывает, поэтому лучше взять что то готовое. Говядина вроде неплохо развита в плане поддержки форматов и кроссплатформенности (ну и эквалайзер надо оттуда как то спиздить полюбому) плюс разработчик наш то есть обратная связь будет лучше.
> скелет класса в заголовочном файле типа и мы ему просто методы определяем уже в программе не?
Не разыменовывай указатель, когда передаешь в конструктор базового класса
Да. Сначала желательно вьехать в плюсы и в ООП.
Но ничего не мешает тебе начать с ковыряния блюпринтов.
То есть, есть файл пикрил1, и нужно, чтобы программа делала пикрил2. Как такое можно сделать?
1. залить контент файла в стринг/масив байтов/...
2. сделать string.replace или заменить в масиве вручную
3. залить исправленный контент в новый файл
Хранишь обе картинки как символы в своей либе. Если на вход поступает первая - выдаешь вторую.
Есть структура, они конвертится в тюпл, а затем переводятся в массив байт (с записью опкода чтобы знать что за операцию выполнить) и передаётся по сети
При получении преобразуется обратно в структуру
https://wandbox.org/permlink/pfQIL5eYzh3AvhpP
Я где-то в реализации обосрался?
> Не разыменовывай указатель, когда передаешь в конструктор базового класса
Да я чет вообще не понимаю что я делаю.
Слева это как я себе представляю наследование классов, а с права я вообще нихуя не понимаю.
Через двоеточие наследование - public от публичной части наследование что ли только?
Через Q_UPRLS это оно типа как макрос всякую хуйню подставляет (пиздец тоже блять объектно ориентированное программирование), тоже кстати что подставляет интересно, может втарую приватную часть из за чего все и не собирается.
Потом конструктор по имени класса который блять наследует конструктор родителя что ли? Плюс в аргументы у него попадают указатель на родителя который мы передаем в родительский конструктор (пиздец ебануться блять)
Снизу зачем эта хуйня с тильдой? Снизу кастомные секции которые надо в хуевой кутешной документации смотреть
Вообще не к плюсам если что претензия, они (понятно дело) берегли сишную "гибкость" так что имеем что имеем.
> что подставляет интересно
АХАХАХА сука, убрал Q_OBJECT и собралось. сейчас посмотрю работает ли вызов метода из qml... ии разумеется нихуя не работает объект есть, а метода пишет что нет
> Долбоёб, прогони свой файлик с макросом через moc
Как бля прогнать то, я ниче не понимаю. в документации нихуя об этом qtcreator сам все прогоняет насколько понимаю
> я ниче не понимаю
Ну так и съебись отсюда и не возвращайся, пока не разберёшься, как работает система сборки твоей хуйни.
Сейчас бы не отделять пробелами арифметические операции и присвоение, кек.
Там есть настройки автоформатирования кода, вроде раздел "текстовый редактор". Мб для таких извращенцев как ты они добавили возможность не ставить пробелы.
Вроде как всякие питоновские ML фреймворки типа tensorflow написаны на C++ и уже юзаются в питоне. Скорее всего такой хуйни много, когда нужно выжать максимум производительности в критических частях. Ну еще в игровых движках поверх самого двигла написанного на крестах юзают какой-нибудь скриптовый язык типа Lua.
Учусь то я пока без. Меня интересует пользуются ли им в реальных проектах. Читаю Макса Шлее, у него в книге только одна глава дизайнеру отведена
Не правда
чекай:
https://www.gnu.org/software/liquidwar6/
У них все скрипты написаны на схеме. Представь себе
И это охрененно! Я всегда считал, что чистый си не очень в 2к20 подходи для микроконтроллеров, если не считать драйверный уровень. В c++ намного безопаснее благодаря ссылкам и контейнерам. Сишное говно на мк у тебя за массив уйдет и начнет память по чуть-чуть хуячить, и будешь ты сидеть с осциллографом искать ошибку и не понимать, почему твое устройство периодически сбоит.
>Сишное говно на мк у тебя за массив уйдет и начнет память по чуть-чуть хуячить
Пиши так, чтобы не выходило. В чем проблема обвязку для массива написать? В крестах у тебя тоже что угодно может произойти, скобочки [] в векторе без проверки работают.
>Представь себе
Ну так gnu.org же. Что у них кроме схемы может быть? Там диды заплесневелые сидят. Столлман вон, даже не знает (и не хочет знать), что в имаксе org-mode и helm теперь есть.
Да долбоебизм делать самому обертки и опять велосипедить, когда уже всё 200 раз было выдумано. Есть std::array, просто прекрасно, и к нему прекрасно подходит range based цикл. Охуенно. И я уверен, что производительность будет абсолютно такая же благодаря const размеру массива, как говнокостыль на си. И таких примеров отличной применимости крестов к мк масса
Гугли тернарный оператор
На МК обычно все это тупо не нужно. Все переменные глобальные, массивы статические. То есть у тебя в цикле izalupa < zalupa_count; ++izalupa - и за границы ничего не выходит.
std::system_error(code, std::system_category()).what()
и what вернет текстовое описание для любого кода ошибки из винапи (GetLastError, HResult, WSA*, и т.п.) -- да ещё и на русском языке.
Чё только не найдёшь в стандартной библиотеке. А я раньше городил свои классы исключений для виндовых ошибок.
Вернет. Но только в кодировке cp1251 (ну или подобной однобайтной). Лучше взять boost::system_category, добавить дефайн BOOST_SYSTEM_USE_UTF8 и получить вывод в кошерном UTF-8
Объект исключения инстанционировать не обязательно. Можно проще сделать:
std::error_code ec{code, boost::system_category}; // ну или std::system_category
ec.message(); // return std::string
>вам реально интересно в этом говнище копаться?
В этом суть крестов - есть решения на абсолютно все вопросы, при этом с хорошим качеством кода.
Угу, только utf-8 на винде -- он имхо ни в пизду, ни в красную армию. В смысле, ни в OutputDebugString/MessageBox (cp1251), ни в консольку (cp866).
>Хуяси, оказывается
Ничего удивительного, наоборот, в этом вся суть пердольного говна - доков-то нет. Доки делает только майкрософт, поэтому когда программист гуглит, он получает GetLastError() и его друзей, вот всю жизнь так и пишут, ведь как ты узнаешь про другое? Никак. Только красноглазики которые свою библиотеку писали и знают, и шизоиды пердолики которые всю либу и её обновления от корки до корки зубрят.
Шизик из ситреда в крестотред протек
А кто по докам язык изучает? Обычно просто гуглят по ходу дела "как в язык-нейм сделать хуйня-нейм", а в доки лезут уже когда знают, чего хотят.
Библиотека это не язык. Библиотеки не изучают, их используют, а чтобы использовать нужно знать о их существовании, а для этого нужна документация, качественная. Но красноглазие это же ШВАБОДКА, а писать доки совсем не интересное занятие, поэтому у пердоговна нет доков, в результате оно никому не нужно, потому что попросту никто не знает о существовании и возможностях кроме самих авторов.
>As of Windows Version 1903 (May 2019 Update)
Микросос 15-рублевый закукарекал за свою дриснятку.
За воду в тексте не бейте, я не умею объяснять.
> Code page conversion
> As Windows operates natively in UTF-16 (WCHAR), you might need to convert UTF-8 data to UTF-16 (or vice versa) to interoperate with Windows APIs.
> MultiByteToWideChar and WideCharToMultiByte let you convert between UTF-8 and UTF-16 (WCHAR)
Щас бы высирать говнокод с конверсией строк на каждый вызов функции. Кампуктиры мощныи - всем хватит, да? Может тогда луччше сразу на джаваскрипте писать, там без базара всё на UTF-8.
звездочку доска сожрала
Не соглашусь с тобой; я считаю, библиотеки — это тоже часть языка. Мало знать синтаксис и операторы чтобы заявить, что ты знаешь язык. Нужно ещё и писать на нём так, чтобы другие люди не плевались от велосипедов. А это уже опыт нужен, километры прочитанных чужих сорцов и ответов на стековерфлоу, чтобы знать, как вообще принято, и что "вот так вообще можно было".
Лабы идут нахуй.
если все выражения составленны правильно, то есть все со скобками, то можешь искать последнюю открывающую и после нее первую закрывающую. Между ними вычислять выражение и подставлять результат. Выполнять пока не останется 1 или 0, либо пока не встретишь ошибку в формуле
Ответ убил, так сказать.
"Не надо делать присваивание внутри проверки условия. Это путь к ошибкам, плохая практика"
А что, всм, что поменять, чтобы было хорошо?
пейст - https://pastebin.com/ePK1bzqU
Ну отдельно сделай while и отдельно n /= 10.
>Цикл работает пока истина
Что значит пока истина? При каком значении n цикл прекращает работать?
>на все вопросы
Правильно. Похуй, что 95% этих решений никогда в жизни не пригодятся, ведь достаточно одного факта их наличия, чтобы преисполниться священным экстазом. Ради этого можно даже разрешить себя насиловать огромным легаси дилдаком с занозами и гвоздями наружу.
>>681738
Двачую
>>681740
Если тебя манит в С++ желание несоответсовать стереотипам о макаках, то у меня для тебя плохие новости
мимо 4 года на плюсах
>А вот тут я кстати не знаю может подвешенная операция n / 10 вещественное возвращать?
Какое вещественное?
while(n != 0)
{ n /= 10;}
Какое тут вещественное будет, о чём вы, я ебу собак.
Ну и кстати ты видимо не вкурсе как железо работает, деление довольно тяжелая операция n /= 10 это сразу
idiv %n1, 0x0A, %n1
cmj %n1, 0x00, .L01
целочисленное деление и условный переход в начало цикла грубо говоря
В твоем же случае изменение переменной n предполагается только после проверки условия и запуска итерации цикла, то есть два деления придется делать еще в какую то переменную записывая при том что переменная n нигде не используется дальше то есть беречь ее нахуй не надо. Наверняка конечно какой нибудь хороший компилятор сам это увидит и переделает, но тебе тоже нет смысла так уродовать свой код, ты лучше ему не делаешь.
К тому же любой компилятор в 2к20 всё это соптимизирует. Код пишется не для машин, а для людей. while(n /= 10) потенциальный источник ошибок, никто так не пишет.
n /= 10 это то же самое, что n = n/10
Хуикосекунда, это несколько тактов во первых, во вторых устройств деления ну вот скажем в интеле любом современном всего два - один чисто целочисленное может считать (без остатков тупо) второй полноценный, в двух каналах которые еще и другое что то помимо этого могут считать, то есть операция деления обречена тупо стоять ждать свое конкретное окошко и ни в какие другие суперскаляр ее послать не может. Благо таких операций в коде как правило не много.
>>681941
Ну так вот именно что соптимизует так как ты бы мог написать сразу а не разводить какой то некрасивый мудазвонский код пряча запись в переменную куда то в тело цикла. Какого рода там ошибки могут быть непонятно
Да плевать, всё равно очень быстро.
>писать сразу
Так хуже читается, пока n не равно 0 лучше чем пока n, которое мы ща делим на 10, не станет равно 0. Затруднение чтения порождает ошибки.
>Ну так вот именно что соптимизует так как ты бы мог написать сразу а не разводить какой то некрасивый мудазвонский код
Ты реально везде у себя в коде вместо деления на 10 пишешь (x * 3435973837) >> 35?
Ну нет конечно, но это ведь выглядит и не проще, и у того анона нихрена не проще выглядит
В первом примере энка самоделится на десять и проверяется на ноль, дальше проверяется меньше ли число минимума и если что записывается. Я кстати не вижу с этим проблем о которых изначали вообще спрашивали что ужас-ужас, переменная локальная локально обрабатывается никуда не сохраняется, ничего вообще ужасного.
Во втором же примере цикл начинается с проверки n на ноль сразу, потом только делится и дальше там все остальное. Потом уже то что мы получается до этого поделили и уже заюзали визде с битовыми этими операциями, на следующем витке цикла получается только проверяется а ноль там вообще был или нет.
Вот так человек борясь с какими то там гипотетическими ошибками сам запутался накосячил и сделал грубейшую ошибку.
void check(int*) {}
void check(int (&)[10]) {}
int main() {
int arr[10] = {};
check(arr);
}
Какого хуя error: call to 'check' is ambiguous. Ведь ссылка на массив лучше подходит, т.к. для указателя нужно лишнее преобразование ( разложение ( decay ) массива в указатель )
Потому что нехуй писать как еблан со своими ссылками на массив, про decay знаешь, а про std::array не знаешь, про span видимо тоже не слышал
>Потому что нехуй писать как еблан со своими ссылками на массив, про decay знаешь, а про std::array не знаешь, про span видимо тоже не слышал
Епта, при чем тут std::array, вопрос чисто в академических целях, а не для того, чтобы чет там пофиксить
> call to 'check' is ambiguous
разве ссылку не check(&arr); надо передавать? А то ты ей тут просто аргумент пихаешь а там оно на что ссылку то должно дать на копию на оригинал, что ожидается то что у тебя в main массив при помощи функции обработается?
>разве ссылку не check(&arr); надо передавать? А то ты ей тут просто аргумент пихаешь а там оно на что ссылку то должно дать на копию на оригинал, что ожидается то что у тебя в main массив при помощи функции обработается?
Не особо понял что ты вообще тут написал. Если ты про
int main() {
int arr[10] = {};
int (&refarr)[10] = arr;
check(refarr);
return 0;
}
то это тоже не работает.
Ну раз в академических целях, то пиздуй читать стандарт, раздел с выбором перегрузок
Так исторически сложилось.
Ну фронтенды связаны наверно, зачем двум свободным проектам средства распылять и пилить каждый свою поддержку стандартов языка, тем более такого как плюсы.
Есть шаблонная структура, она инстанцируется разными типами и всё это упаковывается в картеж
Как получить копию, например, Struct_t<SomeType1> в рантайме?
Или может быть есть другой способ хранить такой список разных типов?
Используются для битовых масок
Это сильно сложнее. В таком случае тебе проще сделать полиморфный класс, хранить все это говно в векторе там
Так и хотел делать в начале, но мне бы всё равно пришлось знать тип в который кастить
Хуй с ними, короче, не буду изъёбываться. Лишний раз лучше напишу так
Ну, читаешь МСДН. В чем вопрос то?
Если в рантайме есть только индекс, то типа у тебя, получается, нету? И что ты делать собрался тогда с этой хуйнёй? Вообще, можешь ёбнуть тупой свитч на каждый индекс.
Кажется в твоей нашлось. Рядом с трупом бомжа лежало.
Поставь MSYS2 и не еби мозг. Там для всех популярных пакетов бинарные сборки, ничего компилировать не надо.
https://www.msys2.org/
Используй паттерн посетитель, правда его нет для кортежей в std, так что придется самому писать - он почти такой же как в variant, только с индексовм.
> И что ты делать собрался тогда с этой хуйнёй?
idx внутри Struct_t это опкоды которые передаются по сети
param это данные соответственно, точнее там не структура, а ещё они картеж (для хранения типов)
Зная какой опкод мне пришёл в пакете я бы его считывал в param (мне бы не пришлось думать о порядке полей), а затем он преобразовывался бы структуру которой я его инстанцировал при упаковке в картеж.
Короче говоря чтобы чуть-чуть меньше ручной работы было.
Наверное, не самый хороший способ это сделать, но хотел попробовать вот такое
И что? Порт gcc на что? К тому же я планировал под разные ос потом собирать приложение, мне нужна кроссплатформенность.
>>682496
С ним я дел не особо вообще хочу иметь. Любая unix среда - костыль, который еще и работает в разы медленней. В частности медленно собирает.
Алсо, я уже нашел способ заставить работать существующие библиотеки gcc с clangом. Надо было добавить флаг -target x86_64-pc-windows-gnu Без этого флага он вообще не мог ни одной либы найти, хоть и в PATH все было прописано. И напрямую, через -I -L я указывал заголовки и библиотеки, не работало нихуя.
А clang я выбрал, потому что вычитал, что его лицензия не требует выкладывать исходники приложения. Но я не проверял эту инфу да и особо пока не вникал в это. Смотрел еще сравнения clang и gcc, первый по производительности опережает немного. И да, под clang я подразумеваю clang++, а под gcc - g++.
> лицензия не требует выкладывать исходники приложения
Тащемта никакая не требует. А вот если ты у них код начнёшь пиздить...
Мне без этой портянки надо.
>И что?
Чел, ну ты реально тугой. Ты пытаешься завести POSIX софт на системе, не поддерживающей этот стандарт, и спрашиваешь почему всё настолько через жепу?
>>682562
>И да, под clang я подразумеваю clang++, а под gcc - g++.
Вот тут я орать начала, ахуеть ты реально тугой. Это линки, блядь, считай что ярлыки на рабочем столе.
>порт
>POSIX софт
Это я тугой? Винда тут даже ни при чем. На любом другом дистрибутиве linux все было бы +- тоже самое. Clang'у так же бы пришлось говорить где лежат библиотеки. И о каком, нахуй, posix речь, когда ИСХОДНИКИ, сука, той же libc++ не содержат в CMAKE параметра для управления теми самыми posix потоками, разве что на unix от них вообще пришлось бы отказываться.
>линки
Хуинки. Че ты несешь, нахуй?
>>682579
Тебе в рот.
Мне нужно чтобы (в данном случае match) возвращался копию этого значения из кортежа.
При этом лямбда не должна захватывать ничего по ссылке\указателю.
Как ты себе представляешь возврат разных типов из одной функции? делай в функторе все то, что ты хотел делать с возвращенным значением
> Как ты себе представляешь возврат разных типов из одной функции?
Вот и выяснял полдня как можно было бы приблизится к этому
>error: invalid operands of types ‘Int’ and ‘Int’ to binary ‘operator+’
Если убрать все из main(), то нормально компилируется.
Зачем тогда нужна именно такая форма operator+ с указателями?
> Не пытайся засунуть банан в жопу
Ну и истории у вас
Пока решил отказаться от этой затеи и отложить её до других случаев
>А clang я выбрал, потому что вычитал, что его лицензия не требует выкладывать исходники приложения
1) Скомпилированные программы не попадают под действие GPL
2) Благодаря GCC Runtime Linking Exception ты можешь использовать glibc, не попадая под действие GPL
Посмотри доклад Полухина про трюки из такси, там вроде что-то похожее в третьей части.
Алсо, можно auto поставить вместо типа возвращаемого значения
>new еще и без delete
>перегрузил + с разными типами (Int, Int*)
>динамическая аллокация без очистки на каждый вызов +
>складывает указатели
Пизда. Ты наверно туториал по С# открыл вместо С++ да и не заметил.
То, во что выводится auto, становится понятно уже в compile-time, а у него runtime. auto -- это тебе не "ну давай как в петоне))0"
> Алсо, можно auto поставить вместо типа возвращаемого значения
Я так и сделаю, но в таком случае мне этот картеж вообще не нужен будет.
А так бы я по индексу делал копию param и получал нужный тип. Ну если бы это работало, конечно.
Этот код нормально компилируется, если оставить main() пустой. За каким хуем в таком случае нужна такая форма operator+ с указателями?
Ты определил Int ^ (Int, Int ^), и на это компилятор выдал тебе справедливое "пощёл нахуй", когда ты попытался сложить Int ^ и Int ^.
Хуя ты дурачек, дружище съебка ты из треда, тебе все равно только в макдаке останется работать с таким подходом
Это само собой. Но код был валидный. Зачем нужен class ^operator (class, class^) ? Почему он компилируется?
Ну вдруг у тебя реально есть надобность в функции типа A★ A::operator+(B★), зачем компилятору такое запрещать. И, да, если тебе интересно, он должен скомпилироваться если ты сделаешь Int ★c = (★a) + b
Так ты определи Int ^ operator+(Int ^, Int ^), тогда будет можно.
>>682686
Потому что можно что угодно определить. Тебя смущает сложение разнородных объектов? Может, я хочу матрицу умножать на вектор типа b = A x, тогда сигнатура должна быть vec operator(mat, vec). Логично? Пиздец как логично.
>Так ты определи Int ^ operator+(Int ^, Int ^), тогда будет можно.
Это через friend определять? А то если в классе пытаюсь определить, то компилер ругается. Говорит, что лишний аргумент ненужон.
>error: ‘friend’ used outside of class
>error: member functions are implicitly friends of their class
Заебали, так и скажите сразу, что перегрузка операторов это фейк. Зачем пудрите мозги нам, сишникам и скриптовикам?
>Тогда почему такой оператор вообще компилируется? Что он значит?
https://github.com/sosachbot/cppthreadhat/wiki#Памятка-нюфагу
Если что, это код из одной популярной библиотечки для работы с utf-8
https://github.com/nemtrif/utfcpp/blob/master/source/utf8/core.h
&& гарантирует выполнение слева направо
Потому что ты не умеешь пользоваться WinAPI. Для этой задачи хватит и обычных std::mutex и std::thread
Что я конкретно делаю не так. Мне надо именно на винапи сделать
Почитай Страструпа. У него есть калькулятор в книге - прочитай, разберись и адаптируй для своей задачи.
Если нужна не рекурсия то формула перегоняется в какую-то из польских нотаций (например в обратную польскую с помощью алгоритма сортировочной станции). Ну а в польской нотации выражение элементарно вычисляется на простом стеке.
Ты долбоёб? Я не хочу портянки этой хуиты писать которые ещё и будут работать только в блоке if
но там нету его
Спасибо анон!
Оберни в IIFE. Вообще, как ты себе видишь нормальное решение своей задачи? Генерировать 2^64 версий std::get? Или может создавать для каждого tuple список из лямбд и обходить его с целью поиска лямбды, которая вызовет нужный get?
И вообще, ты должен знать, какой конкретно индекс у тебя будет в конкретном месте ещё на этапе написания кода. Если ты не знаешь, то пиздуй использовать std::map
Чтобы фундаментально разобраться, читай про сокеты и протоколы - TCP, UDP, HTTP, TLS, и т.д. Всё остальное работает поверх этого.
Потом либо ебош на сокетах по хардкору, либо бери готовые библиотеки и фреймворки. В одной только винде куча всяких апи под разные задачи
https://docs.microsoft.com/en-us/windows/win32/networking
Спасибо за наводку. И ещё тогда вопрос, какими фреймворками и библиотеками обычно пользуются в реальности?
boost.asio
Хотя ты вообще какую-то хуйню пишешь
У тебя что вся программа это запуск гитарпро? Напиши скрипт на повершеле лучше
Блять, ну так и подставь tchar как ты делал выше с buf
Неужели такого подобия нельзя заметить при написании?
Повезло вам, нас ебучий говнинус заставляли учить вместо системы для людей.
А вот и быдло вылезло
Потом мне нужно будет делать процессы на линуксе без каких либо метод, а лекций сейчас нет.
Благодарю.
Ну вот такое у меня задание, нельзя другим способом блять.
Почему дауны из комитета до сих пор не введут стандартизированный ABI, чтобы не ебаться со всеми этими совместимостями между компилерами, линкерами и их версиями.
Есть ситуации, например пукалки с 1КБ памяти, для которых билдить желательно по-другому - ну и пусть делают себе какой-то кастомный тулсет, хуярящий фасткол во все дыры. Но в подавляющем большитнстве ситуаций наверняка возможен единый бинарный интерфейс, который позволит нормально сосуществовать всему зоопарку билд-инструментов
Ваши мысли по этому поводу, коллеги
Ну и нахуя ты создаешь залоченный мьютекс и сразу же ждешь его в своем цикле? Убери из цикла WaitForSingleObject и должно заработать.
> до сих пор не введут стандартизированный ABI
Всё сломается нахер за последние 20 лет написанного.
Все равно не то. Оба процесса исполняются одновременно. А суть задания в том, чтобы сравнить вывод без мьютексов и с ними.
Как мне вот это std::array<std::pair<uint8_t, intptr_t>, 6> a; перевести на вектор?
Titus Winters и пытается как-то>>683417
>В смысле сначала должен выполнится цикл в первой функции, и только потом во второй
Всё равно не понял. А что происходит, если не это? В любом случае почитай, как использовать мьютексы, потому что:
1) создаёшь уже залоченный мьютекс и пытаешься его потом захватить
2) захватываешь один и тот же мьютекс кучу раз в одном треде без соответствующего разлочивания
3) OpenMutexA емнип возвращает ошибку, если мьютекса не существует - проверяй коды ошибок функций
В любом случае возьми и сам пройдись дебаггером.
> А что происходит, если не это?
Циклы выполняются одновременно, в итоге выводятся числа от 0 до 20, вместо 10
Такой сложный вопрос я задал что-ли? Подскажите.
Почему вот так не работает std::vector<std::pair<uint8_t, intptr_t>> a(5, std::make_pair(0, 0));
pair не тот. make_pair возвращает pair<int, int>
Базара нуль, извини
При компиляции - каждый .cpp файл превращается в .o\.obj, и потом вся эта параша линкуется линкером в один .ехе файл, и линкер разрешает всякие внешние функции.
Так вот - это всё ебаная бинарная масса, которая работает четко благодаря неким соглашениям.
Например, как и кто чистит за собой стэк (либо сама вызываемая функция, либо тот, кто ее вызывает).
Как вообще аргументы в функцию передаются (те самые calling conventions)
Как кидаются и ловятся эксепшены.
Из более забавных вещей: какой layout у каждого класса и так далее.
Здесь всё - четко на доверии. Если ты, допустим, эстет, и руками сделал бинарники разными компиляторами\версиями компиляторов - у них внезапно один и тот же std::string может быть реализован по разному (например где-то есть SSO, а где-то нет).
И когда ты этот std::string будешь передавать между разными модулями, скомпилированными разными компиляторами - другая имплементация будет видеть полную бинарную хуйню, вместо строки.
Собстно, вот это "доверие" и некий "договор", как все должно выглядеть - и есть ABI.
>>683481
std::vector v(a.begin(), a.end()); Спасибо С++17
>а что у вас делается для облегчения изучения языка?
Не считая того, что весь интернет забит документацией, блогами, статьями, и выступлениями, а на стековерфлоу есть ответ на любой вопрос "как сделать х в с++"? Ну даже не знаю.
Мы дает от 300к на руки + бонусы, и то ищем специалистов по году. Уже этот пиздец настал.
"Сырые" массивы можно создавать только с дефолтным конструктором без параметров. Вектор в этом плане удобнее, он может делать копии.
Ну или можно перечислить все объекты, но это только если их количество динамически не меняется.
Юзай не то, что модно, а то, что удобно. А если о моде, то модно нынче в очко долбиться. Можешь попробовать.
Зашквар это делать несколько одинаковых методов/классов, которые отличаются только типом данных, вместо использования обобщений. А синглтон это оюычный паттерн, цель которого экономия ресурсов системы.
Зависит от ситуации. Главное чтобы у тебя в этом синглтоне не было мутабельного стейта, иначе ты ахуеешь ходить по всем возможным граблям.
Короче при вызове функции Openmutex оказывается нужно было первым аргументом указать SYNCHRONISE, правда не понятно, в чем смысл не делать его по умолчанию
Shader.h https://pastebin.com/PEEGAcdf
Основной файл https://pastebin.com/bH8tG3pL
Потому что именно этот код и не компилится. Ты же его не вызываешь.
не помогло. Странно, что если начать вводить GLchar, то он подсказывает и подсвечивает, о пототм все также.
VS не причем, криворученька.
Котаны, посоветуйте учебник по C/C++, где объясняется как устроена память, вызовы и так далее по списку. Внутреннее устройство таких простых вещей как определение переменной, функции, вызов функции и др. Заранее благодарю.
Тебе не учебник по си нужен. Почитай например Архитектуру компьютера.
Начни с транзисторов, вентилей. В конце до сишки дойдешь. Гугли "харрис цифровая схемотехника и архитектура компьютера"
Начни с квантмеха, полупроводниковых материалов. В конце до транзисторов дойдешь. Гугли Нейман И. "Математические основы квантовой механики".
Начни с эпистемологии и философии науки. Иначе как ты сможешь понять, что значит "знать"? Гугли Chalmers A. "What Is This Thing Called Science?".
Спасибо большое.
> Более того, крайне нежелательно пытаться изучить его первым, если ты раньше вообще не программировал. С большой вероятностью это приведет к разочарованию и потере времени. Гораздо лучше будет начать с другого языка и базовых вещей алгоритмы, архитектура пека, операционные системы, а уже потом вернуться к крестам.
Наконец-то вменяемость победила!
В самых ранних тредах, то-ли здесь, то-ли в крестотреде, анон рекомендовал как годно после С вкатиться в кресты.
Если ты еще здесь, напиши еще раз пожалуйста.
Спасибо.
>Uncle Bob
Сука, как же он меня выбешивает. Никогда не встречал настолько долбоебов К.О., которые вещают банальщину как откровение свыше.
90% того что он напиздел, уже неактуально.
Оч годно, видел кучу дебилов которые серьезно так считают
"Deep C" презентация есть где-то в интернетах на slideshare.net. Там именно то всё.
напиши мне драйвер на го или расте.
И потом попробуй поискать разрабов-растовиков, которые это поддерживать все будут на рынке труда. Они все будут либо додики, либо борщехлебы.
>И потом попробуй поискать разрабов-растовиков, которые это поддерживать все будут на рынке труда
>This library is just a proof-of-concept of the windows kernel-mode drivers, which can be written in Rust programming language.
>just a proof-of-concept
>can be written
Написал еллоуворлд - теперь ты программист, ведь программа написана, а остальные программы просто как много хеллоуворлдов, тривиально, можно даже время не тратить на банальщину.
Го не системный язык, пчел. Язык со сборщиком мусора априори не может быть системным. А раст - мертворожденная хуйня для хипстеров. Даже Мозилла обосрались с растом и до последнего не хотят этого признавать.
Они никак не чекают типы, и когда ты себе прострелишь ногу — не увидишь даже ворнинга (в типизированном коде, кекус).
Проблема в том, что каст порой нужен только чтобы заткнуть варнинг. Тип в скобочках мне ещё не влом прописать, но уродовать выражение ебаниной static_cast<>-а только чтобы не было варнинга -- уже как-то возмущает.
Я постоянно испытываю дикую попаболь при сборке библиотек/бинариесов из исходников.
Постоянные ошибки, постоянные гуглёжки, как меня уже это достало.
Подскажите куда копать что бы овладеть мастерством компилирования исходников? Желательно бы ещё статейки накидать.
Заранее целую.
Укажите на ошибку плез (код компилится, остальное написал в комментах). Почему я не могу править внутриклассовый вектор таким макаром? Это же, блять, ссылка на него.
upd:
бля, вот я обосрался.
Я почему-то думал, что auto неявно должен забирать в тип ссылку (ибо я возвращаю ссылку на вектор из метода). Но нет, надо написать auto&, чтобы это заработало как надо.
А вообще, такая тема норм? То бишь, это не говнокод возвращаеть ссылку на вектор туда, где я хочу им МАНЯпулировать? Проблем вроде как быть не должно, ибо вектор неявным образом аллоцируется в куче, а не в стэке (ибо это динамический буфер). Но прикол в том, что с обычными функциями, не методами (метод - функция внутри класса) этот финт не работает, есть предупреждение возврата ссылки на оюъект на стэке (щито? Вектор разве не на куче аллоцируется?? На стэке сохраняется адрес вектора, который в куче, какая тогда проблема?). Почему это работает с методами, но не работает с обычными функциями?
>Раст
Мертворожденный высер для мамкиных нитакихкакфсе. Его будущее - теперешнее положение D, не более. Максимум, если повезет, займет какую-то мегаузкую нишу в прикладухе, в системщине у него ноль шансов.
Как же ты ошибаешься. Раст уже выбирают многие крупные корпорации. И это правильно, он действительно во всем лучше крестов, тут ничего не попишешь. А ди был обречен с самого начала, не было поддержки, был gc.
Это говнокод. Либо ты работаешь с классом, либо с вектором и класс тебе не нужен.
> вектор неявным образом аллоцируется в куче, а не в стэке
Нет. Он аллоцируется там где ты его аллоцировал. В твоем случае это автоматическая переменная, тоесть на стеке. Вектор может дополнительно аллоцировать необходимую память в куче - но она очистится при автоматическом удалении вектора. В твоем случае все ок, из-за того что ссылка и вектор находятся в одном скоупе, но если ты передашь ссылку за скоуп в котором создан вектор то ничего хорошего не будет.
а если мне по каким-либо обстоятельствам нужен доступ к переменной/структуре данных класса извне? Или в рамках ооп это недопустимо, так как ломает принцип инкапсуляции?
Значит твой дизайн полное дерьмо?
вывод: вектор при любых обстоятельствах следует передавать по значению из функции? Ну, или же изначально аллоцировать его на куче и вернуть указатель из функции?
Сама Мозилла, родитель этого говна, начинает потихоньку отказываться от раста, потому что они осознали его полный обосралити. Раст - никому ненужная хуйня. Мертворожденная. Кресты мощнее раста раз в 50. Полная гибкость и всемогущество крестов против ебанутого компиля раста, в котором нет кучи фич, которые есть в крестах, нахуй то говно нужно вообще?
Двачую.
Можешь возвращать по ссылке из метода класса, но тогда нужно следить чтобы класс жил все время пока ты юзаешь эту ссылку.
Пруфы будут?
Пока сам в скрипты сборки не залезешь не разберёшься. До сих пор шоке от некоторых дизайнерских решений от разработчиков Qt.
vcpkg install library_name если лень пердолиться.
А вообще - то, что ты говоришь это странно. Во всех +- современных библиотеках есть cmake (ну окей, кроме буста), и там все собирается с полпинка одной командой.
Я не он, но начинаешь в любом случае почти с С, ведь С++ с ним совместим и в нём многое используется тоже, что и в С.
> вывод: вектор при любых обстоятельствах следует передавать по значению из функции
У тебя при этом будет создана его копия - а это не всегда то что нужно. В большинстве случаев ты можешь использовать ссылку при условии что она не будет покидать скоуп в котором получено. Возращения указателя неплохая идея, если ты подразумеваешь какой-то из умных указателей.
Есть один немаленький проектик, где сборка на js. Вот тут я вообще охуел.
Наследование, метапрограммирование (с фичей variadic templates к тому же), гибкость в выборе полиморфизма (статический vs динамический, а в расте вообще ООП как такового нет, его можно только убого костылировать через типажи), также в расте отсутствует нечто похожее на constexpr, нет кастомных аллокаторов и т.п. Продолжать? К тому же, в крестах есть бесчисленное количество библиотек для самых разных целей, когда раст юзает и будет юзать кучу биндингов из С и никогда не будет иметь стольких фич, сколько есть у крестов, потому что всем похуй на ржавый высер. Дебичи в очередной раз пытаются высрать некоего революционера, не понимая, что чтобы свергнуть С и С++ с трона системщины, нужно либо скинуть астероид на Землю, либо произвести технологическую революцию в мире железа, которая поменяла бы в корне современную архитектуру компьютеров. И первое, и второе произойдет с вероятностью ноль целых хуй десятых.
Зачем его вообще пытаются родить? Что не так с С++, что нужно что-то рожать нового?
Конкретно в Qt по умолчанию всё включено, нужно самому искать, какие модули не используются и отключать их. А их состав может от версии к версии изменяться. Не могу даже представить, зачем такое понадобилось.
Тонко
По мне так часто не хватает объяснения в духе - зачем оно вообще нужно, а так же опыта написания программ, не сильно даже больших.
Хуй знает, лично я пока отметил только одно приемущество раста перед плюсами - это возможно как C# около члена класса задать кастомные атрибуты типо #[zalupa_1] и потом можно пройтись по всем членам класса и отфильтровать по атрибутам. Статический метаданные одним словом. В плюсах единственный вариант такого это извращения с макросами.
> Есть широкий спектр его применения, вот и охватывают все их сразу.
Анончик я тебя всё равно не понял.
На разных платформах по умолчанию соберутся разные пакеты. Не понимаю, почему нельзя было добавить флаг --all для "охватывания всех сразу"?
словами не передать, какая жопаболь, когда какой-то модуль не выбран для сборки, если не выбрана какая-то его зависимость. уведомлений при этом тоже никаких нет
Допустим надо сериализовать некую структуру в json формат. Чтобы это сделать нужно для каждого поля вручную писать код сериализации т.к. ты не можешь пройтись по полям структуры динамически. Потом вдруг понадобится добавить еще одно поле в эту структуру и придется править код в разных места.
Вот пример https://ideone.com/4XOpFu
>Внезапно, это макрос.
Ну я там понял там адекватные макросы которые можно программировать как обычный код? Без черной магии как в плюсах с абузом скобок и склеиванием теста.
А если там куча перекрёстных зависимостей?
>почему макроссы это именно извращение
Попробуй понять как это работает без пояснений https://gist.github.com/patrickBerry/8cf7799066aaf01d1b8fdab1622c1186
>И разве нет решений на С++
Получить имя поля строкой средствами плюсов без макросов невозможно
Вопросов не больше не имею.
Как человек, который натрахался со сборкой этой сучары целый день, хочу сказать - не пиздите, там тебе для этого целый тул есть в виде бинарника, который, вроде, configure зовётся. Он расписывает от а до я, что нашёл на машине перед сборкой.
А это есть в планах хотя бы на c++30?
Ставь visual studio. В будущем изучай, как происходит сборка и можешь vs code попробовать с cmake
>1685475307
в C++26 по плану. Очень оптимистично - МОЖЕТ БЫТЬ ++23
Очевидная вижуал студия как вершина IDEстроения. Сверху еще решарпер++ накати и наслаждайся
Хочу научиться настраивать cmake, да и кьюти вроде собирались отходить от qmake
Дебагер в Qt Creator открывает мне qstring.cpp
В кор дамп загляни, если ты на Линуксе. А если на мастдае, то хз, говном не пользуюсь :(
> там тебе для этого целый тул есть в виде бинарника, который, вроде, configure зовётся. Он расписывает от а до я, что нашёл на машине перед сборкой.
Это безусловно круто, но он не пишет того, чего не нашёл. То есть я написал, что не хочу qtdeclarative, значит отвалится ещё и qtwebengine и этот configure ни слова об этом не скажет. Вот и сиди думай, какие библиотеки нужны для каких библиотек, а главное зачем.
Запусти с дебаггером, дождись вылета, посмотри на call stack
и? Главное как она охуенно работает, а не то, что ты тут пытаешься совсем уже обскурное найти.
>Ставь visual studio
>можешь vs code попробовать с cmake
>>685496
>вижуал студия как вершина IDEстроения
Толсто.
Пока отобрал следующих кандидатов (на винду): кдевелоп, кодеблок, коделайт. Если кто-то пользовался этим, просьба поделится впечатлениями, особенно как у них там с тестами дела, на вики пишут что у коделайте нет ковереджа под винду.
Брал кткреатор, создал там хелло ворлд, запустил, и не вижу куда делася сам цпп файл и почему у меня только тхт. Пока экспириенсом не доволен.
Что-то я запутался в циклах, да и гавнокод делать не хочу. Подскажите.
Кдевелоп тоже не прошел отбор на хелло ворлд. Итого пока смогли в простое консольное приложение только кодеблокс и коделайт, рекомендую.
for (const auto &inner_vec : outer_vec) {
for (const auto &idx : inner_vec) {
if (idx is bad) {
//deallocate all the inner arrays + outer array & break
}
}
}
На псевдокодвчах, дальше сам додумаешь.
блять, пробелы не схороняются, земля мне жопаскриптом, прости, анон. Разбирайся теперь в этом говне, надеюсь, что хоть чем-то да помог.
Например, не могу открыть проект в окне слева и вообще пишет что запустить мейн.цпп не удалось. Смейк ему поставил, но не видит.
Сравни например с коделайтом (к нему у меня еще есть вопросы по поводу синтаксиса проги) и кодеблоксом.
Хз, походу KDevelop криво портировали на винду. Я на Линуксе (по стечению обстоятельств, юзаю KDE в кач-ве окружения, лол) и у меня зоибис работает.
Александреску же. Если вынырнешь - то наворачивай доклады Луи Дионне.
Нет, добавил в системны патх смейк и прописал ему -г мингв бла-бла, кдевелоп все запустил.
Что открывается если нажать на руководство?, на винде просится в микрософт сторе.
Определись сначала со стандартом, потому как в c++17 всё метапрограммирование сводится к variadic template, constexpr if и чуть реже std::enable_if. Если типами хочешь жонглировать, то посмотри, как разные методы и типы реализованы в Boost::mp11.
Александреску читай только после всего, что я написал выше. Иначе могут произойти необратимые изменения в мозге.
Эти необратимые изменения в мозге очень полезны, имхо. Я Александреску недоосилил в свое время, но многим пользуюсь до сих пор.
Помню, как коллега подошел попросил написать какую-то шаблонную хуету, и я там офигенно наперегружал всяких шаблонов структур (С++14 у них было).
А какое есть реальное применение у метапрограммирования, кроме компайл-тайм вычислений и статического полиморфизма (ОЧЕНЬ годная штука, чисто бесплатный по рантайму полиморфизм)?
А чем то, что ты перечислил, не реальное применение?
у нас в проде сериализатор\десериализатор самопальный для кернел мода протобафов не завезли с одинаковым интерфейсом в KM\UM.
Чето в духе (тайпдефы как раз для одинакового интерфейса):
auto packet = serialize(L"string", 1234, std::vector<std::wstring>{L"123", L"234});
auto s1 = packet.get<wstring_t>();
auto s2 = packet.get<int>();
auto s3 = packet.get<wstrvec_t();
Плюс, еще на шаблонах + X-macro сейчас переделываю конфиги для софтины.
MACRO(key, L"default value") - автоматически выведет тип (причем для литералов - будет wstring) сгенерирует сеттер\геттер\лукап для runtime-модификации и сброса. Сейчас еще напишу автоматическое выдирание из JSON'а всяких не совсем стандартных значений.
Я бы сказал так - иногда бывают задачки, где нужен generic подход. И вот тут - если ты шаблонный маньяк - как раз есть где развернуться. Но и без них задачи решаются, просто менее элегантно.
Пикрелейтед - пример говна, которое я нашлепал пару лет, и оно сейчас в проде. Я знаю, что write_to_tuple можно бахнуть рекурсивно, а не вот так лениво - но тогда мы еще не переехали на C++17, а мне было лень делать специализации структур.
Пропустил, сорри. Ты не поверишь - я самоучка с купленным дипломом на дистанционном обучении. Я сидел и каждый вечер задрачивал С++ в течении года до первой работы крестовиком.
Касательно выпускников вузов - тут сложный вопрос. У нас смотрят на то, что ты умеешь, а не на то, где ты учился, если мы говорим про позиции разработчиков с опытом.
Если мы говорим про интернов - то тут я ничего не скажу, не знаю.
хожу по гиту, смотрю крупные проекты - многие не делают такую фичу.
Но почему? ведь это нехилый буст компиляции (ради прикола пробовал включать, компиляция была быстрее на 20-40%)
Да и на самом деле код становится чище без миллиона инклюдов
А как посмотреть в чем разница? Смотрю на оффлайн версии, хочется понять без установки.
Мне нравился кодблок. Особенно прокрутка правой кнопкой и дебаг-run-to-cursor одной кнопкой.
Но он не обновлялся с 2017. С ним идет какой-то мудацкий билд mingw со странными багами в случайных местах (например отсутствие std::to_string при том что с++11 очевидно поддерживается). В дебаггер ~10 лет не могут добавить питон и как следствие нормальное отображение содержимого stl-контейнеров. При открытии проектов больше 20kloc всё ложится.
Если собираешься решать что-нибудь кроме однофайловых лаб, подумай еще раз.
Самый лучший вариант - clion
Ну то есть чтобы блядь без ебанутых систем сборки от анунаков не слышавших про мейнстримные системы сборки и живущих в какой-то альтернативной вселенной. и чтобы оно не выглядело как говно на дефайнах
Студия, нодискасс.
doctest, catch2
Лол блять. Зашел сейчас на их сайт.
А там после трехлетнего запора оказывается выкатили обновление в марте, где пофиксили и stl и мыло на fullhd экранах и to_string.
Похоже пора перекатываться обратно.
Ни насколько, не еби мозг
В дебаге? STL вектор медленнее, особенно MSVC. В релизе? Одинаково.
Раст лучше, но на нем пока почти нет работы в россии.
мертворожденная параша для борщехлебов же, ну.
>ну раст же лучше, и писать приятнее ну
Как назвать подобных уебков? Вот есть кабанчики, им 40, а есть вот такие вот "ну че ты ну".
Тобой выбрана неправильная дверь, дружок-пирожок. Тред клешнеруких два блока вниз и там никого нет
Судя по всему столько же, сколько ты готов заплатить разрабам
В с++20 завезли std::format, вот только компиляторы его еще не завезли.
Язык для людей
А теперь давай то же на плюсах.
Билбиотеки есть смысл тащить для чего-то нетривиального, а вот такая хуита на каждый пук — это жс-макакенг.
Чмони, чуханы.
if (vector.size() == 2 && vector[0] && vector[1]) {}
Т.е. продолжит ли он смотреть на другие условия и не вылетит ли в segfault после первого false (т.к. вектор пустой)?
толсто
нахуй ты обращаешься к элементам вектора через оператор [], если есть метод at, который проверяет границы и элиминирует возможность переполнения?
Затем что кроме примера тебе нахуй больше ничего знать и не надо, тем более когда суть в другом.
сейчас бы ты еще хоть немного понимал, что ты несешь, а то твои боевые картиночки смотрятся комично очень.
>даже ради околочеловеческого принта надо тащить сторонние либы
>при том, что нет даже единого пакетного менеджера и при таком подходе для 3 либ модет понадобиться 3 манагера пакетов
>ряяя маааам плюсы ни гавно!111
2050
@
единый пакетный менеджер так и не стандартизировали
@
из-за жс-драйвен-макакенга с пакетами содержащими 1 функцию мир вошёл в сингулярность
@
чтобы собрать 1 утилитку надо поставить 3 компилятора и 293 пакетных манагера
@
а потом подождать пока они скачают кучу пересекающихся зависимостей на пол терабайте
>go get
антибагор
Например, захватываю я пакеты из сети и пытаюсь их выводить в QListWidget. Сую в хэндлер пакета что-нибудь типа listWidget.addItem("пакетнейм"). Причем хэндлер вызывается с бешеной частотой, пакетов в сети то много. Программа намертво зависает.
Или другой пример. Записываю пакеты в файл. Пакетов много, поэтому процесс наблюдаю с помощью QProgressBar. Ну то есть после записи очередного пакета value прогрессбара инкрементируется. Пакеты пишутся в цикле for. И тоже зависает, QProgressBar перестает шевелиться, окно программы не отвечает. Хотя сам процесс идет, если подождать, пакеты запишутся в файлы и программа отвиснет.
Тут ясно, что я что-то неправильно понимаю в построении десктопных программ. Но что именно, я не могу понять? Это как-то связано с оперативкой? Или стек вызовов забивается? Как этого избегать? Больше интересует первый пример.
Браток, накачивай дату в буфер, и с определенным интервалом, например 5 раз в секунду фетчи виджет с буфера. А ты я так понимаю линейно с каждым обращением за пакетом сразу его вставляешь в виджет
> А ты я так понимаю линейно с каждым обращением за пакетом сразу его вставляешь в виджет
Да-да, именно так!
> Браток, накачивай дату в буфер, и с определенным интервалом, например 5 раз в секунду фетчи виджет с буфера.
То есть критична именно частота обращений к методу виджета, так? Если часто его вызывать, комп охереет?
Тяжело сказать не зная что там у тебя. Подозреваю что мейнлуп умирает пока ты пытаешься напихать в него дату, потому что тайм-аут у тебя вряд-ли выставлен. Поллинг или как там это называется, читани доку кьюти. И вообще старайся как можно меньше обращений делать
А почему умирает во втором примере? Там же тупо цикл, внутри которого происходит генерация пакета и запись в файл. Пакеты при этом ничем друг от друга особо не отличаются, структура одинаковая. Виснет, когда пакетов много, например 200к.
Я если честно не очень с куте знаком, и не знаю как там мейнлуп работает, представляю себе что он пытается создать в цикле представление о всех виджетах, а потом проверяет соответствует ли оно актуальному представлению в следующий момент до того как нарисовать, и т.к. пихаешь дату безостановочно, он постоянно заново рисует этот виджет. Короче не скажу тебе что там точно происходит, но опыт и интуиция подсказывают что нужно в буфер накачивать и по типам закидывать в виджет
А если в буфер закачивать, он в это время не будет пропускать пакеты? Или для этого надо параллелизм юзать?
Ну то есть я в хэндлере буду писать пакет в буфер. И одновременно мне надо раз в 200 мс еще отправлять содержимое буфера в виджет и очищать буфер. Это же без параллелизма никак не сделаешь?
Глупый вопрос какой то. Для чего нужен дефайн в с? Для того же и в с++. Как уже писали выше использовать можно например для получения имени поля
#define PRINTER(x) #x
А так много для чего, средство очень мощное. Но вообще использовать макросы дурной тон.
Ну у тебя по возможности вообще не должно быть ключевой логики во фронте. Пихни ее в другой тред например. Куте точно мультитрединг поддерживает, поэтому проблем не должно быть. Но у тебя я так понимаю дата вся создана где-то заранее, а не какие-то пакеты приходящие в реальном времени, поэтому тебе не нужно все пакеты за раз тоже качать. Тяжело понять в общем не зная что тебе нужно
Что за имя поля?
> Но вообще использовать макросы дурной тон.
Я вообще если честно не понимаю, зачем нужен #define, если можно объявить функцию.
Пакеты в реальном времени приходят.
А как пакеты захватывали и выводили в интерфейс в те времена, когда многоядерных процессоров не было? Вот Wireshark например, судя по вики, сделали в 1999 году.
Поток, которым ты оперируешь -- вещь логическая. Можно к одному потоку хардверному цеплять сотни вот таких. Кроме того, ввод/вывод можно совершать неблокирующими операциями, типа если данных в буфере нет, то и хуй с ним, едем дальше.
Вот скажите мне, это один растошизик в треде пытается троллить или их целая секта?
Сорян, с ссылкой на пост промахнулся, ее там не должно было быть.
Бтв предкомпилированные заголовки требуют единообразного начала всех исходников, вроде как, что не всегда на получается поддерживать при несогласованной разработке.
Ну, во всяком случае, я так понял смысл этой штуки.
> А почему умирает во втором примере? Там же тупо цикл
Приведи уже код, а то непонятно, что ты там делаешь
Ну вот код цикла, например.
for (int i = 0; i < totalPacketsAmount; i ++)
{
QVector<Timestamp> timestamps;
for (int i = 0; i < gsPacketSet.size(); i ++)
{
timestamps.append(gsPacketSet.getTimestamp());
}
int index = compare(timestamps);
timestamps.clear();
Packet packetForWrite = gsPacketSet[index];
QByteArray writeArray(QByteArray::fromHex(packetForWrite.getStr().toLatin1()));
file.write(writeArray);
allGSStreams[index].incCurrentPacketIndex();
gsPacketSet.replace(index, getReplaceForGS(index));
progressBar->setValue(i);
}
>Тут ясно, что я что-то неправильно понимаю в построении десктопных программ. Но что именно, я не могу понять?
Чел, ты главный поток вешаешь намертво, ясен хуй у тебя ничего рисоваться не будет.
Давай вместе почитаем доку https://wiki.qt.io/Progress_Bar
Первый же абзац:
>You could use a progressBar widget on your widget and run the operation in a different thread (using moveToThread()).
и в первом же сниппете
> QFutureWatcher<void> FutureWatcher;
> QFuture<void> future = QtConcurrent::run(&this->MyObject, &MyClass::LongFunction);
Короче, RTFM.
Пощады! Я же ньюфаг, я никогда не юзал мультитрейдинг.
И сколько ты напишешь функций?
Хорошо, у тебя есть шаблоны, это круто.
Но там сложные правила для вывода типов и возвращаемых значений, что нужно будет учесть.
template<typename T>
T func(T x) { return x; }
Совсем не всегда одно и то же, что и
#define func(x) #x
Которую написал анон в том посте
А что именно вешает главный поток в моем случае? progressBar->setValue(i)? Или что? Какие действия вообще могут вешать главный поток, и что делать, чтобы этого избегать?
У тебя есть
struct A { int x; };
Имя единственного поля в структуре - это x.
Бтв с шаблонами надо магию уже подрубить в этой ситуации.
В случае макроса
#define func(obj, x) obj.x
И со структурой выше ты кодом
A a;
func(a, x);
получишь значение в поле a.x.
Если честно, хз за решетку, почему ее тот анон использовал, я не настолько плотно шарю в макросах.
С шаблонами лично я не знаю, как это сделать.
Шаблон - это компилирующийся код, который пытается собраться комплиятором(инстанциироваться) только когда его вызывают, причем для каждого уникального набора параметров отдельно, используя значения полей, что ты туда передаешь.
А макрос - это замена текста на аргументы, согласно объявленному твоим правилом, но со своей магией.
float pi{3.14}; //будет выделена память под переменную pi со своим значением.
#define PI 3.14 //все встретившиеся PI в исходном коде(в области трансляции, если быть точным) будут заменены на 3.14 и забиты в исполняемый файл как литералы.
И иногда это больше тебе развязывает руки, чем просто функция.
более щарящий анон поправит, если я обосрался.
Решетка стрингифицирует то, что ты посылаешь в макрос.
#define STR(x) #x STR(std::cout << pidor) станет строкой "std::cout << pidor", а не вызовом соответствующей функции.
>, зачем нужен #define, если можно объявить функцию.
А дефайном ты можешь объявить части функций и создать внутренний дсл, позволяющий коротко и ясно заменить кучу бойлерплейта( и создать больше возможностей выстрелить в ногу). Шаблоны это решают, но не до конца.
>Какие действия вообще могут вешать главный поток
Количество работы выполняемое на нём.
Ты по получении каждого пакета:
а) Парсишь пакет и что-то там сравниваешь, в зависимости от размера может выполняться долго. Алсо, ещё гоняешь очень дохуя аллокаций. Выдели вектор себе один раз до входа в первый цикл (и если знаешь размер приходящих — преаллоцируй память заранее, если не знаешь — аллоцируй при входе в первый цикл, иначе на каждый append под твой массив будет выделяться память по новой и копироваться содержимое, что как бы будет работать пизда как медленно);
б) Если у тебя SSD — запись на диск достаточно дорогая операция, чтобы просто так делать её в главном потоке. Если у тебя HDD — то это просто пиздос смерть гроб, особенно если у тебя там не 5 байт.
в) Не знаю, что именно у тебя в предпоследних 2-х строчках, но что-то похоже на копирование, если в gsPacketSet хранится не пара интов — не надо так.
>и что делать, чтобы этого избегать?
Стараться вообще нихуя не делать на главном потоке, и использовать его только для отрисовки UI и как точку синхронизации. В твоём случае, единственная строчка кода, которая должна работать на главном потоке выглядит так:
>progressBar->setValue(i);
> Не знаю, что именно у тебя в предпоследних 2-х строчках, но что-то похоже на копирование, если в gsPacketSet хранится не пара интов — не надо так.
Это набор пакетов. Я должен выбирать пакет из набора и записывать его в файл. И реплейсить забранный пакет новым.
> Стараться вообще нихуя не делать на главном потоке, и использовать его только для отрисовки UI и как точку синхронизации.
Подожди, а что вообще главный поток в коде? Я что-то вообще запутался. Вот у меня есть MainWindow, в котором все виджеты, кнопочки и прочее. При нажатии на кнопочки программа делает всякие штуки, например, генерирует и записывает пакеты в файл. Что здесь главный поток? Или что должно быть им, если делать все правильно?
Не понял, а почему нельзя просто:
struct A { int x; };
и потом:
A a;
a.x = 2;
Или что ты там с х собирался делать?
Забей на дефайны.
Это никак не отвечает на мой вопрос, не копируй объекты если оне не совсем мелкие, короче.
>>687243
Это поток, с которого начинается выполнение твоей программы (т.е. поток, в котором системным сишным рантаймом была вызвана функция main()).
>Или что должно быть им, если делать все правильно?
То же, что и было, лол. Твой код уже запущен в нём, тебе остальные задачи надо раскидать по другим.
По хорошему, тебе надо сделать 2 потока, в одном все вычисления в другом последовательную очередь с записью на диск, но учитывая твой уровень — просто вынеси всё, что не связано с UI в другой поток, и как я и писал не дрочи сильно память в начале цикла, а результаты лучше складывай в буффер в памяти и записывай одной транзакцией по завершению.
inb4 сразу план действий:
Создай поток, крути на нём свои вычисления, и с помощью сигналов закидывай результаты обратно в главный поток где и меняй прогресс.
с вывода в консольку папок и файлов
Допустим, у тебя есть массив строк, каждая из которых - имя поля конкретного класса
И ты можешь в цикле по этому массиву использовать все его поля, а не перечислять их отдельно, если прикрутишь макросы.
Нет, я не говорю, что это обязательно нужно и используется на каждом шагу. Просто без макросов вроде как нет пока способа так сделать.
https://habr.com/ru/post/475162/ - мой коллега статейку написал - почитай, будет очень полезно
Есть ли какие-нибудь придумки по этой теме? Не думаю, что я первый это придумал
Если ты про то что бы можно было для каждой системы выставлять свои размеры интов, то в си и плюсах так и есть. Размер char в битах никак не ограничен - его могут выставить любым. Есть проблема с тем что подразумевается (хотя стандарт наверное этого не требует) что размер int равен макимально "удобному" для процессора размеру (тоесть обеспечивает максимальное быстродействие), что ограничивает размеры int размерами регистров процессора. Что ограничивает размеры char, так как char может быть любым, но он не может быть больше int.
Многие языки используют длинную арифметику, например питон и хаскель. ЕМНИП в хаскеле используется GMP по умолчанию для типа Integer.
Функция начинает правильно работать только после сдвига указателя на 2.
Почему так?
Я только сейчас понял, что у хаскелля-то реально есть применение. На нём же всякие уравнения можно писать почти как на доске, лол.
было, в перле, в 91 году.
Почему при написании кастомного компаратора для бинарного поиска надо джва раза перегружать оператор () ?
Понял, спасибо.
Ох лол, только недавно была статья на хабре про это, а точнее про собес синьора который не знает про выравнивание.
Гугль тебе в помощь в твоем нелегком деле. Самый первый скилл программиста - умение гуглить нужную информацию;
https://tutorials.visualstudio.com/cpp-calculator/add
https://ru.wikibooks.org/wiki/Язык_Си_в_примерах/Калькулятор_выражений_в_обратной_польской_нотации
https://github.com/yjy0625/expression-solver
Наверное чтобы не ебаться с конвертированием Dummy в int. std::binary_search требует чтобы объекты по которым ведется поиск могли быть сконвертированы в типы обоих аргументов оператора(). А тут они его просто перегрузили и никакой конвертации не нужно. Незнаю наколько это правильно.
Structure alignment же
ну, это работает, можешь сам проверить. Просто эти 2 перегрузки немного с толку сбивают.
Прочитал в справочнике Qt о QTranslator и ничего не понял.
Вопрос именно с созданием qm файлов.
Спасибо.
У меня хорошо заработал из коробки только xcode. Все остальные жалкие поделия либо тащат с стобой 20Гб легаси и не умеют в лигатуры (visual studio), либо не могут из коробки создавать hello world без пердолинга и кофигурирования всяких cmakeов (qtbuilder, clion, eclipse).
Текстовые редакторы для разработки я вообще не рассматриваю. Хотя всякие мастера своего пердольного дела типа Джона Блоу пердолят код в emacs и альттабаются в студию только для дебага (я так не могу)
Конечно сказывается отсутствие единого стандарта для проектов, и требование под каждую платформу пердолить свою ide
>У меня хорошо заработал из коробки только xcode
У которого постоянно отваливается автокомплит проектах больше мелкого и такой же по стабильности дебаггер.
Ну, если тебе важен внешний вид, то икскод действительно самый лучший (да и шрифты на макоси рендерятся красиво, да).
>либо не могут из коробки создавать hello world без пердолинга и кофигурирования всяких cmakeов
Зато вот для взрослой разработки это минус, лол. Я ебал эти проекты икскода и их ебаный XML, конфликты в котором надо мерджить при каждом слиянии веток.
>Конечно сказывается отсутствие единого стандарта для проектов
Тащемта, есть CMake, который поддерживают примерно все.
>и требование под каждую платформу пердолить свою ide
Ты сейчас ахуеешь, но вообще всю инфраструктуру для этих иде (кроме парсера) надо тоже пердолить под каждую платформу свою.
я наверное никогда не пойму гундёж по поводу сборки. стоит 2-3 дня уделить на освоение компиляции и симейка и проблем потом не возникает.
Писал как-то прогу по решению примеров. Понимает приоритет операций и скобки.
Вводишь строку. Пример 2(3-1)^2. И она выводит результат. Может поможет.
#include <iostream>
#include <stack>
#include <string>
#include <cmath>
#include <cstring>
using namespace std;
#define STKDPTH 32
size_t Priority(char symbol);
void Computaion();
void Parse(char s);
char STACK_OPER[STKDPTH];
double STACK_NUMB[STKDPTH];
size_t idx = 0;
size_t idx2 = 0;
int main()
{
char expression[] = "3+24-(6/((6/3)+2))^((22)-1)\0";
size_t N = strlen(expression);
for(size_t i = 0; i < N; i++)
{
if(isdigit(expression))
{
size_t len = 0;
while(isdigit(expression[++i]) && i < N)
len++;
if(!len){
STACK_NUMB[idx++] = expression[--i] - '0'; continue; }
len++;
i -= len;
size_t j = 1;
double numb = 0;
while(j <= len)
numb += pow(10, len - (j++)) (expression[i++] - '0');
STACK_NUMB[idx++] = numb;
i--;
}
else
Parse(expression);
}
while(idx2 != 0)
Computaion();
cout << STACK_NUMB[0]<< endl;
return 0;
}
void Parse(char s)
{
if(s == '(' || STACK_OPER[idx2 - 1] == '(')
{
STACK_OPER[idx2++] = s;
}
else if(s == ')')
{
while(STACK_OPER[idx2 - 1] != '(' )
Computaion();
idx2--;
}
else
{
while(idx2 != 0 && ( Priority( STACK_OPER[idx2 - 1]) > Priority(s) || Priority( STACK_OPER[idx2 - 1]) == Priority(s) ) )
Computaion();
STACK_OPER[idx2++] = s;
}
}
size_t Priority(char symbol)
{
if ((symbol == '+') || (symbol == '-'))
return 1;
if ((symbol == '') || (symbol == '/'))
return 2;
if ((symbol == '^'))
return 3;
return 404;
}
void Computaion()
{
double result = 0;
double right, left;
char oper;
right = STACK_NUMB[(idx--) - 1];
left = STACK_NUMB[(idx--) - 1];
oper = STACK_OPER[(idx2--) - 1];
switch(oper)
{
case '':
result = left * right;
break;
case '/':
result = left / right;
break;
case '+':
result = left + right;
break;
case '-':
result = left - right;
break;
case '^':
result = pow(left, right);
break;
default: break;
}
STACK_NUMB[idx++] = result;
}
Писал как-то прогу по решению примеров. Понимает приоритет операций и скобки.
Вводишь строку. Пример 2(3-1)^2. И она выводит результат. Может поможет.
#include <iostream>
#include <stack>
#include <string>
#include <cmath>
#include <cstring>
using namespace std;
#define STKDPTH 32
size_t Priority(char symbol);
void Computaion();
void Parse(char s);
char STACK_OPER[STKDPTH];
double STACK_NUMB[STKDPTH];
size_t idx = 0;
size_t idx2 = 0;
int main()
{
char expression[] = "3+24-(6/((6/3)+2))^((22)-1)\0";
size_t N = strlen(expression);
for(size_t i = 0; i < N; i++)
{
if(isdigit(expression))
{
size_t len = 0;
while(isdigit(expression[++i]) && i < N)
len++;
if(!len){
STACK_NUMB[idx++] = expression[--i] - '0'; continue; }
len++;
i -= len;
size_t j = 1;
double numb = 0;
while(j <= len)
numb += pow(10, len - (j++)) (expression[i++] - '0');
STACK_NUMB[idx++] = numb;
i--;
}
else
Parse(expression);
}
while(idx2 != 0)
Computaion();
cout << STACK_NUMB[0]<< endl;
return 0;
}
void Parse(char s)
{
if(s == '(' || STACK_OPER[idx2 - 1] == '(')
{
STACK_OPER[idx2++] = s;
}
else if(s == ')')
{
while(STACK_OPER[idx2 - 1] != '(' )
Computaion();
idx2--;
}
else
{
while(idx2 != 0 && ( Priority( STACK_OPER[idx2 - 1]) > Priority(s) || Priority( STACK_OPER[idx2 - 1]) == Priority(s) ) )
Computaion();
STACK_OPER[idx2++] = s;
}
}
size_t Priority(char symbol)
{
if ((symbol == '+') || (symbol == '-'))
return 1;
if ((symbol == '') || (symbol == '/'))
return 2;
if ((symbol == '^'))
return 3;
return 404;
}
void Computaion()
{
double result = 0;
double right, left;
char oper;
right = STACK_NUMB[(idx--) - 1];
left = STACK_NUMB[(idx--) - 1];
oper = STACK_OPER[(idx2--) - 1];
switch(oper)
{
case '':
result = left * right;
break;
case '/':
result = left / right;
break;
case '+':
result = left + right;
break;
case '-':
result = left - right;
break;
case '^':
result = pow(left, right);
break;
default: break;
}
STACK_NUMB[idx++] = result;
}
> не умеют в лигатуры
Не ври, у меня студия с шрифтом Cascadia Code всё прекрасно показывает. Только надо студию перезагрузить после смены шрифта
Пообещай себе, что не будешь так делать
>мне 26 лет и я не жирный, камон, чтоо?!
Ты рофлишь или да? 26 лет - у тебя ПОЛОВИНА жизни уже позади и ты удивляешься что у тебя давление? Лол.
std определяет множество вещей, так что может случится конфликт имен. По этому получишь по жопе если будешь юзать std глоабльно.
Пчел, но я живу в стране, где мужчины в среднем доживают до 81 года, к тому же у меня фул семья долгожителей, включая курящих дедов. Вроде как наследственностью не обременен, не курю, не ширяюсь, не жру все подряд(
Тогда может тебе съебать с русскоязычной борды?
Блин, а я наоборот завидую твоему энтузиазму. Надо делать задание к сессии, а я не могу ни строчки написать себя заставить.
От всего, что ты описал там еще выше, хорошо помогает один очень известный бензодиазепин, но вероятно в вашей стране его даже по рецепту не продают. И вопреки некоторым мнениям под ним отлично работается.
挨拶します、日本人兄弟!
Аноны, шарпист в треде, помогайте. Помню тут были шутки про то как превратить кресты в жабаскрипт. Так вот, чем обмазываться, чтоб использовать кресты как C#? Любые классы обмазывать shared_pointer? Есть какие-то гайды как это правильно делать? Что ещё пердолить?
На кресты вкатываюсь вынуждено, на производительность похуй пока она не ниже шарпа, главное максимально снизить сложность кодинга и подводные камни.
Раст не нужен, ошибки в памяти делают только студентики
И что же именно ты так усердно кодишь? Переписываешь код ядра линукса?
Очевидно, что написание кода - лишь часть процесса разработки. Кучу времени еще тратится на планирование архитектуры, выбора/осваивания предметной области и тд
PS В 26 лет проблем с биодвижком не должно быть, походу и правда что-то ты делаешь не так. Ну и если не сидишь на тяжелой наркоте, то я вообще не понимаю, что ты забыл в C++ треде
Пишу пет-проект, связанный с инфосеком. Долгая история.
Конечно же, я не только пишу код. Планировать архитектуру куда сложнее, код только описывает ее.
Хах, убийцу антивируса Попова ваяешь?
Ну тогда это не 14 часов C++, а 14 часов разработки - и это субъективно нормально, если затягивает
#define var auto
не, антивирусы - юзлесс хуйня. Пишу нечто, что связано с бинарной эксплуатацией (там куча эвристики и лоу-лвла, долго объяснять)
inline constexpr int var1 = 123;
inline constexpr int var2 = 234;
...
Хотел сделать как-нибудь покрасивее, потипу:
using const_t = inline constexpr int;
const_t var1 = 123;
const_t var2 = 234;
...
Но видимо это так не работает. А как сделать чтобы заработало?
Ключики разные пробовал вставлять, но не зашло.
Читал, что нужно пересобирать glibc и туллчейн вместе с ним. Вы что подскажете?
лолмакрос
Тогда бывает нужно интерфейс какой-то навалять, тогда тоже используется
struct это практически тоже самое что и class, отличие только в том что в class по умолчанию все члены private, а в struct - public. Используешь что удобно.
Учился через Sololearn. Насколько это правильно или стоит читать книги, продемонстрированные в шапке?
> Можете порекомендовать, что то годное для изучение медицины начинающему проктологу?
Ну вот и что ты хочешь выучить-то бля? Весь буст от корки до корки? Ну удачи.
Если припрёт, тогда и выучишь, не трать своё время.
Буст - просто коллекция библиотек. Нужны графы? Кури Boost.Graph. Парсеры? Boost.Qi. Метапрограммирования Boost.MPL/Hana. Нетворкинг? Boost.ASIO. И так далее. Не надо - не смотри, там ещё та помойка, чтобы на неё жизнь тратить.
Вот кстати да. Забывается очень быстро, если не закреплять практикой.
Я бы спросил совета где бы опыта набраться? Например в ДС, для мальчика лет 30 имеет ли смысл стажировку поискать? Есть ли конторы где работают до полуночи?
Ну хорошо, а если буду кодить и изучать, что то? Стоит всё таки учить через книги? Ну или через, что ты учил C++
Да что угодно, лишь бы писать. Напиши качалку файлов, напиши чат, напиши хуевую двухмерную игру, напиши архиватор, напиши хоть что-нибудь блять. Да, это в гигатонны раз сложнее, чем читать. Но сильно полезнее.
В процессе написания чего-то часто возникают вопросы. Когда с ними приходишь на /pr/ в профильный тред, ответом часто бывает "ебать ты кассир".
Хорошо, спасибо, Анонче. А вот теперь встал вопрос по трудности использования. Она трудна в использовании, просто слышал, что её очень трудно устанавливать, один чел даже неделю думал, как установить sfml.
Опять я, мне уже всё равно, насколько сложная sfml, я точно напишу на ней. Ещё раз спасибо.
https://docs.microsoft.com/ru-ru/cpp/build/vcpkg?view=vs-2019
vcpkg: a C++ package manager for Windows, Linux, and MacOS
Блядь, погугли 15 секунд
Окъ, а ты уже ей пользовался?
Установил, но не через эту хуергу, потому что clion всё равно ругался.
#include <iostream>
int* main(){}
мой окна защитник матюкнулся. Почему?
Любая программа не из стора с подписью - потенциальный вредонос, ведь может сделать что угодно, никакие официальные инстанции её не проверили и не выдали сертификат..
Опыта можно набраться и коммитами в опенсурс, так и пиши что ищешь ментора который за ручку проведет от интерна до миддла.
Здравствуйте, спасибо что пользуетесь нашим программным продуктом Окна защитник, мы передали ваше обращение техническому специалисту, ожидайте ответ.
ебать ты кассир
>>689898
> Когда я запустил этот код
Нет, не запустил. В си нет кода, только описательный псевдотекст, его нельзя запустить, т.к. он не является программой. Ты запустил совсем другое, сеначала программу-компилятор и прочие утилиты, а потом программу ими сгенерированную.
Если еще не понятно, приведу сравнение. Вот есть, скажем, джаваскрипт, или питон, вот это код, ты пишешь код и этот код выполняется. А в си не так, твой текстовичок не выполняется. Поэтому то что ты напечатал и показал и что проверяет антивирус это разные вещи, причем даже разные категории.
Когда грубо говоря тебе нужен именованный кортеж, без инвариантов, зависимостей его значений от чего-то, не паблик членов и т.п. Можно сделать и классом, но struct явно показывает твои намерения другим и тебе в будущем.
Не придирайся к словам, шизоид.
Уж постарайся, мы не глупые
>блять случайно отравил.
Привет парни, тут ображулил такой момент, но не могу понять такое поведение ожидаемо? или зависит от конкертного компилятора;
list<string> l = {"a", "b", "c", "d"};
auto it = find(l.begin(), l.end(), "e"); // it == l.end()
++it;
cout << *it << endl; // "a"
Вс
чото браузер у меня глючит извиняюсь еще раз, в общем итерация от end() всегда будет указывтаь на нулевой элемент?
Инкремент end() это уже само по себе UB, а его разыменование это вообще гроб гроб кладбище пидор
А что не так? У тебя итератор стал end(), который нельзя разыменовывать, так ты его еще и инкрементировал и вдвойне получил UB.
Пишу программу на С++, GUI WinForms.
Как сделать таблицу подобную пикрилу? Пробовал datagribview, но она какая-то пресная, а я хочу чтобы была как на пике. Скажите, пожалуйста, как такое сделать?
Спасибо
а есть какая-то разница в данном контексте? но работает и так и так. g++ 7.5.0
спасиб
Указатель ты можешь переназначить, а ссылку нет.
HEADERS += songbackend.h
SOURCES += main.cpp
И тогда все компилируется
>>679970
>>680050
>>680508
>>680521
А зачем?
Сокеты
Мааааам, скажи жи нет в плюсах ссылок на функции
А как так вышло, что в про-файле не было этого? У меня автоматически добавляется вроде как.
какое же говно QT. Если еще с verdigris сьедобно хоть как-то, то вот по классике с этими говномакросами и moc'ами - ваще ад.
> А как так вышло, что в про-файле не было этого?
Бабушка не положила
Ну наверно в шаблонах QtQuick этого нету по умолчанию.
>>691604
Это да, но в конечном итоге все равно главное что работает.
qml с кодом на плюсах взаимодействует (кстати типы вроде uint8_t не поддерживаются, круг использования такой типизации все меньше и меньше, по крайней мере в приложениях, в каких нибудь библиотеках на си всегда будет актуально для цветовых каналов, еще для чего то)
Лучше Липпмана почитай
Лучшие бесплатные курсы. За что-то другое уже платить надо. То, что привели выше, уже платное
Палю гайд:
1. Учишь С++
2. Учишь сети
3. Учишь нужный инструментарий для сетевой работы: API ОС/Boost/Qt Network/"github.com/Vasyan9B/SamayaAhuennayaSetevayaLiba"
4. Говнокодишь убийцу nginx с рпс не меньше тоннажа твоей мамаши
И можешь считать что справился
написано "Учавствовать бесплатно" Aspartic
Есть же Asio С++, причем отдельно от буста. Годная либа, с помозью которой можно пилить сетевые приложения, которые будут выдерживать траффик фейсбука (если сервер не на твоем тщедушном камплюхтере с вай-фай соединением офк, лол)
используй вектор
А то иногда такие уебанские имена бывают, шо пиздец
Переключи subsystem проекта в Windows как на пикриле.
И да, для того, чтобы изучать винапи - консольной приложеньки достаточно, зачем тебе WinMain - хз.
Недавно вкатился, прошел пару курсов за 1500, думаю норм получилось. Скоро на собес в майл ру пойду.
нечитаемый пиздец
Надо написать begin и end для своего класса, которые возвращают обьект с операторами *, ++ и !=.
Приложил ублюдочный пример
Спасибо, анон
дефайнами ты хоть аллаха можешь призвать
Просто этому клоуну помимо наговнокоженного клубка из ифов было мало видать
Нормально, как джавоскрипт после минификатора.
void foo() по старинке
или же auto foo() -> void ?
Зачем вообще придумали второй вариант и когда/почему его надо использовать?
Это какая то новомодная ебала из Rust/Swift/Go
Они там ебанулись все и договорились хуячить одинаковый синтаксис причем спорный
Для лямбды удобно использовать типо auto func = []() -> int {return 1;}; Для обычных функций хуй знает вообще зачем это нужно.
Хочу прицепить к проекту mpv так как там есть проработанный апи который позволяет плеером управлять там хоть с луаскриптов хоть с осцилогрофа, плюс он есть собранный на компе с шаредлибой.
Но естественно я чет подзабыл а как он вообще либу то неходит? Ровно так как инклюд указывает?
Это, кажется, для шаблонов вообще штука, чтобы выводился правильный тип, если аргументов шаблона два и какой-то из них предпочтительнее. Где-то у Йосуттиса было в его трактате о шаблонах об этом написано.
Второй вариант устарел с выходом c++14, теперь достаточно просто auto
Это математики опять говна залили со своими нотациями.
В программировании всегда так, если видишь какое-то уебанское соглашение или название, значит это кто-то зачем-то послушал математиков.
И что ты сейчас высрал?
В твоей строке auto используется как тип новой переменной, а у него - в объявлении функции
Всё читал вдумчиво, понимал, задания все делал с первого раза. А как дошло дело до итогового теста завис на первом наипростейшем задании. Просто как будто из головы вылетело всё, что до этого изучал. Пришлось подглядывать в решение. Теперь жопа горит блять.
Подходы - в алгоритмах и идеях, а не в языке реализации.
1). Написать программу, которая будет выводить на экран: «Введи 2 числа», затем считывать введенные с клавиатуры целые числа и выводить на экран «a + b = !результат!», «a - b = !результат!», «a * b = !результат!», «a / b = !результат целочисленного деления!», «a % b = !результат остатка от деления!», «float (a / b) = !результат вещественного деления!»
2). С использованием оператора if () написать программу, которая будет выводить на экран: «Введи 3 числа», затем считывать введенные с клавиатуры вещественные числа и выводить на экран «Максимальное из введенных !результат!»
3). С использованием оператора switch () написать программу, которая будет выводить на экран: «Введи количество углов», затем считывать введенное с клавиатуры целое число и выводить на экран при соответствующем введенном значении одну из фраз: «Это треугольник», «Это четырехугольник», «Это пятиугольник», «Это многоугольник» или «Нет такого многоугольника»
4). Написать программу, которая будет выводить на экран: «Введи свой возраст», затем считывать введенное с клавиатуры целое число и выводить на экран правильно законченную фразу: «Вам !число! год/года/лет», если число находиться в промежутке (1-130), обработать возможные ошибки.
5). С использованием оператора while () написать программу, которая будет выводить на экран: «Введи многозначное число», затем считывать введенное с клавиатуры целое число, считать количество цифр и выводить на экран корректную фразу: «В числе !число! !результат! цифра/цифры/цифр»
6). С использованием оператора do {} while () написать программу, которая будет выводить на экран: «Введи отрицательное число», затем считывать введенное с клавиатуры вещественное число, определять является ли число отрицательным, если да, то выводить на экран «Молодец!», если нет, то снова выводить запрос до тех пор, пока не будет введено отрицательное число.
7). С использованием оператора for () написать программу, которая будет выводить на экран: «Введи размерность», затем считывать введенное с клавиатуры целое число и выводить на экран таблицу умножения вида:
(если введено 3)
1 2 3
1 1 2 3
2 2 4 6
3 3 6 9
8). Написать программу, которая будет генерировать массив из 30 случайных чисел в промежутке от -10 до 10 и выводить его на экран.
1). Написать программу, которая будет выводить на экран: «Введи 2 числа», затем считывать введенные с клавиатуры целые числа и выводить на экран «a + b = !результат!», «a - b = !результат!», «a * b = !результат!», «a / b = !результат целочисленного деления!», «a % b = !результат остатка от деления!», «float (a / b) = !результат вещественного деления!»
2). С использованием оператора if () написать программу, которая будет выводить на экран: «Введи 3 числа», затем считывать введенные с клавиатуры вещественные числа и выводить на экран «Максимальное из введенных !результат!»
3). С использованием оператора switch () написать программу, которая будет выводить на экран: «Введи количество углов», затем считывать введенное с клавиатуры целое число и выводить на экран при соответствующем введенном значении одну из фраз: «Это треугольник», «Это четырехугольник», «Это пятиугольник», «Это многоугольник» или «Нет такого многоугольника»
4). Написать программу, которая будет выводить на экран: «Введи свой возраст», затем считывать введенное с клавиатуры целое число и выводить на экран правильно законченную фразу: «Вам !число! год/года/лет», если число находиться в промежутке (1-130), обработать возможные ошибки.
5). С использованием оператора while () написать программу, которая будет выводить на экран: «Введи многозначное число», затем считывать введенное с клавиатуры целое число, считать количество цифр и выводить на экран корректную фразу: «В числе !число! !результат! цифра/цифры/цифр»
6). С использованием оператора do {} while () написать программу, которая будет выводить на экран: «Введи отрицательное число», затем считывать введенное с клавиатуры вещественное число, определять является ли число отрицательным, если да, то выводить на экран «Молодец!», если нет, то снова выводить запрос до тех пор, пока не будет введено отрицательное число.
7). С использованием оператора for () написать программу, которая будет выводить на экран: «Введи размерность», затем считывать введенное с клавиатуры целое число и выводить на экран таблицу умножения вида:
(если введено 3)
1 2 3
1 1 2 3
2 2 4 6
3 3 6 9
8). Написать программу, которая будет генерировать массив из 30 случайных чисел в промежутке от -10 до 10 и выводить его на экран.
Пошел нахуй.
Хуй будешь?
Чел, я уроки по c++ вчера впервые в жизни открыл и мне этого хватило чтобы знать как сделать вообще любую из этих задач. Тут знания нужны чуть более углублённые чем для написания хеллоуворлда. Именно чуть.
Нахуя это на плюсах писать. Пиши на питоне
Не, это-то понятно. А дальше что? Просто считать, что мы можем обращаться по [] к элементам и получать длину через length?
Сделаю за 450р
Сделаю в лучшем виде за 5 руб + перепихон
Пиши сладкий:
То и высрал, что у меня в примере тип возврата из лямбды так же через стрелочку -> int.
Ссылка на константный указатель на константную строку
Лол но ты написал "удобно использовать". Только вот trailing type - единственный способ указать тип возвращаемого значения у лямбды . Нет никакого альтернативного способа как в случае с обычными функциями: написать int [](){} не получится
Можно ничего не указывать и после return явно написать return (int)1.f; , и будет тип возвращаемого значения int.
кайф. Каждый nullopt будешь создавать вот так вот ручками через конструктор optional, или таки воспользуешься trailing return type и будешь писать return std::nullopt ?
>Каждый nullopt будешь создавать вот так вот ручками через конструктор optional
К чему вообще этот спор? ты мне говоришь, что так нельзя сделать, я показываю, что можно. Офк юзать можно и то и то при разных обстоятельствах.
Я нигде не утверждал, что НЕЛЬЗЯ, а показал вполне юзкейс, где оно отлично заходит.
Толстишь анонче, толстишь.
Если ты после прочтения всех предыдущих глав не смог эту хуету решить с первого раза, то я хз как ты вообще комп включил и по клавишам попадаешь. Тебе не то что программистом, тебе грузчиком только и остаётся быть.
Выглядит сложно на первый взгляд. Если там не важен порядок того как эти скобки закрываются {(}) - считается невалидным то тогда под каждый тип скобок можно запилить вектор, при открывающей скобке пушить, при закрывающей попать, в конце правильность проверить тем, что каждый вектор должен быть пуст.
> Что почитать для вката в олимпиадную прогу
Cracking the code interview, потом дрочить leetcode
> нужно ли знать новые стандарты чтобы быстрее писать код?
Быстрее не быстрее, но знать нужно
А если важен, то один стек под все скобки, каждой скобке -- своё значение.
Вика, ну я же намекал на доп занятия после уроков, глупенькая.
Пчел, ну разберись ты раз и навсегда. Что такое разделяемая библиотека? Это
-include
-lib
-bin
Инклюды ты уже подключил. Теперь тебе нужно указать, с чем линковать твой скомпилированный код, т.е. указать .lib файлы библиотеки (.a в линуксе). Для этого обычно указывают отдельно пути, где искать такие файлы и отдельно сами названия файлов.
Финальный штрих - это скопировать нужные .dll в папку со своим исполняемым файлом или указать путь к .so в линуксе.
но, как мне кажется это наиболее релевантный из всех
что можно почитать (лучше посмотреть) по устройству linux?
Тебе хуем по лбу дадут если будешь юзать из std, что-то помимо std::list. По этому все алгоритмы и сортировки нужно знать самому.
Собсна, хочу попробовать написать софтину для работы.
Выводится только один раз (вывожу в цикле) только часть строки std::wcout << string;
Почему так? Строка является std::wstring
Открыл литкод с самой простой задачи:
https://leetcode.com/problems/reverse-integer/
В целом работает мое поделие, решил проверку диапазона вводимого числа проверить и получается все сую в if. Это не слишком вульгарно, всю программу в иф?
Регулярные выражение можно использовать, если у тебя номер всегда длиннее веса в килограммах.
Типо ищешь выражение длиной в 8 символов, состоящее только из цифр.
То есть будет примерно так?
list = текст из файла или копипаст в листбокс;
regex numb("^[0-9]{8,8}$");
if (regex_math(list, numb))
cout << numb;
Если ты про режим отладки, то просто кликаешь на полосу слева от кода, появляется красный кружок.
В этом месте программа остановиться и ты сможешь просмотреть значения переменных.
С++ это первый язык который я изучаю, пока мне он очень нравится. Стоит ли переходить в другой язык для получения основ или уже не надо ?
Если тебе нравится - обязательно изучай. Вообще - это самое главное, чтобы нравилось.
Благодарю, и еще вопросик(мб банальный) , что в будущем смогу сделать с этим языком (какие программы написать ( только приложения под компьютер/игры/или функционал больше)?
На плюсах возможно все написать . Вопрос в том удобно ли на нем это делать. А вообще все, на что у тебя хватит сил и времени.
на С++ можно писать абсолютно все, от веб фронтенда (зачем, но это уже другой вопрос), до драйверов. Так что ответ - любые программы.
Еще раз очень благодарен
Где-то умную мысль слышал, и тебе расскажу. Звучит невероятно, но так и есть -- в документации всё написано.
https://en.cppreference.com/w/cpp/regex/regex_match
Вектор для трех значений оверкилл...
Я так понимаю, что динамические массивы и regex нельзя подружить? По крайней мере, в интернетах не нашел ничего по этому поводу. С обычной строкой все работает на ура.
Хуй знает зачем я вообще брал динамический массив
Алсо, в последующем хочу в массив запихнуть текст из файла. Потом циклом по каждой строке можно будет пройтись regex_math?
Ты дурак блять? Никто тебе не разрешит ничего, кроме вектора и листа. Все остальное ручками сам. А вообще бросай эту хуйню, олимпиадное программирование ни о чем. Эти дебилы на проде не могут быстро нагуглить нужной информации, а в яндекс за три котлеты устроится не особо и поможет.
мимо другой анон
Костыльно.
Не проще шаблонном сразу реализовать? Так универсальнее.
Мне бы с интами, но массив...
Бумп
Проще ведь нахуярить в дизайнере интерфейс и вручную из него говна повыкидывать
> Ты дурак блять? Никто тебе не разрешит ничего, кроме вектора и листа. Все остальное ручками сам.
С чего ты взял?
Не знаю про прям супердрочерскую олимпиадную парашу - но и яндекс и гугл на собесах разрешают весь STL (я собесился и туда, и туда)
А если у меня цикл и я хочу проверять значение переменных при каждой новой итерации?
Тоже самое.
в гугл не взяли, но я и сильно не готовился. Яндекс прошел, но оффер от Нвидии был сильно жирнее
Собесы и олимпиада - разные вещи.
Если честно, то не пойму, кто из нас дурак. В чём взять match для каждой строки вектора? Или это не то, что тебе нужно?
Красивый язык с++, хоть и не понятный нифига на 1 взгляд.
Короче, как вы оцениваете время, когда до конца не знаете, с чем столкнётесь?
Просто вот есть у меня куча объектов-прототипов, и у каждого по несколько полей-указателей. Я не понимаю, зачем мне заново прописывать инициализации для каждого из полей в методе Clone(), когда я могу просто создать новый объект, и все точно будет работать.
Какие есть варианты интерпретировать uint64_t как double без каста данных? (потому-что каст из числа 4.7 сделает 4, а не то, как хранится это число в памяти на самом деле)
Есть вариант с union
union U
{
uint64_t u64;
double d;
} tmp;
tmp.d = 2.2;
tmp.u; //вернет не 2, как в случае с кастом, а 4616977747989548237
Вот именно такое мне надо.
Есть вариант с тем, чтобы брать указатель на double от uint64_t и... Нахуй его, хуже чем с union
Есть какой-то человеческий вариант?
Надо, брат
Лол, такое окошко сваять пять минут. Дольше тапок искать
std::uint64_t num = ...;
double d = reinterpret_cast<double &>(num);
Более человеческого, наверное, нет. Это тот же самый каст в указатель, по сути. Не знаю, чем он тебе не понравился.
зовозили
Я когда олимпиаду делал пару лет назад, нас не то что не проверяли на использование каких-либо стандартных библиотек, нам вообще разрешалось писать на любом (!sic) языке. В итоге получается: Маша отличница, занимавшаяся с репетитором, сосёт на своём паскале у Васи троечника, который взял питухон и решил все олимпиадные задачки за 20 минут.
Не выдумывай, скачай архив и распакуй его куда тебе удобно
Есть либа - https://github.com/msteinbeck/tinyspline
Без проблем собирается в CLion. Но как её в своём коде использовать? tinysplinecxx.h высерает сотню ошибок при включении в свой код, в том числе на синтаксис. В примерах там просто делают #include "tinysplinecxx.h". Но этот пример тоже не могу собрать. Что за сраная магия? Нельзя просто добавить хедер, а нужен какой-то пердолинг?
Пробовал в VS и CLion, пробовал подключать собранную статическую либу, пробовал стандарт C++ менять - один хуй сыпет ошибками.
А почему я не могу просто взять h/cpp файлы? Зачем именно собирать либу? Почему он срёт ошибками синтаксиса, хотя там всё ровно?
Потому что это тебе не питон, сынок. Если библиотека не header only, её нужно собирать.
Если не хочешь ебать голову, возьми vcpkg
Бля, да я уже столько времени ебусь, раз 10 пересобрал по разному, уже в VS без cmake линкую, один хуй ошибки синтаксиса.
В общем нашёл решение. Как в таких случаях искать где этот пидор? IDE показывает где определение этого макроса, но я не смог найти где инклюд minwindef.h. Он где-то в кишках стандартной библиотеки сидит? Пиздец какой-то.
Подключается неявно в одном из твоих инклюдов, скорее всего cmath
поскорее бы модули блядь, чтобы это говно оставалось в своих хедерах и не пролазило во все щели
Как сокращать подобный код?
Алсо, я его извратил для вас, изменил названия и вообще вы ебанутые найдете еще по куску кода домой придут амбалы пизды дадут
Ехал шаблон через шаблон. Видит шаблон в шаблоне шаблон. Сунул шабло шаблон в шаблон, Шаблон, шаблон, шаблон, шаблон.
Там иначе код раз в 10 больше выходит.
Как сложилась дальнейшая судьба?
Закидывать указатели на функции в массив, я полагаю.
>В общем нашёл решение.
Очередной говнокодер, бля
https://timsong-cpp.github.io/cppwp/n4659/library#macro.names-1
за тебя погуглить или что? В бусте Бойер-Мур точно есть
>IDE показывает где определение этого макроса, но я не смог найти где инклюд minwindef.h
>minwindef.h
>win
>Это же MSVS-specific
Какой сюрприз!
Так вот, как изменить путь установки visual studio? Кнопки такой нет, эта ебола сразу в корень диска С лезет. Не нагуглил ничего
Это "быстрая сортировка". Без рекурсии. Потестите этот код на своих примерах, если вам не сложно. Сообщите о ошибках, если таковые будут. Если захотите наехать на меня из-за кода — аргументируйте. За тестирование с меня как обычно.
Вроде пишешь себе на С++ профессионально. А на собесе задают вопрос по какому-то нюансу и сидишь и не знаешь что ответить.
слушал одно интервью где сеньор приводил пример вопроса на собесе "есть ли аллокации в std::sort"... и далее объясняет почему это важно знать конкретно у них. И все вроде правильно, но... Бля, а где я должен был узнать о таких вещах?
или почему нельзя юзать memcpy...
как? как эти вещи можно запомнить?
>А почему я не могу просто взять h/cpp файлы? Зачем именно собирать либу?
можешь. инклюдить можно даже cpp файлы (но не забыть объявить дефайны). unit cpp называется.
> Если библиотека не header only, её нужно собирать.
нет, не нужно. вот например есть GLFW библиотека.
а вот как ее можно включить в проект без компиляций, копирований исходников и т.д.
https://github.com/raysan5/raylib/blob/master/src/rglfw.c
просто include - это просто вставка текста файла и ничего больше. имея базовые знания о процессе компиляции можно много чего делать
min и max дефайны это тоже MS - это из WIndows.h лезет. поэтому и отключать надо через NOMINMAX
(вообще реально видел идиотов которые пишут #undef min - пиздец сколько говнокодеров)
И у меня такая же проблема как и у автора.
Цитата из статьи: "Первая проблема в том, что во время загрузки приложения картинка сплеш скрина может "съехать" вниз на некоторое (небольшое) расстояние относительно позиции своего первого появления. Не так чтоб это была большая проблема, но неприятно, что такое примитивное действие как показ сплеш-скрина может глючить. Причем это может происходить только в определенных ориентациях экрана (у меня в портретной), а в другой ориентации этой проблемы может и не быть. Почему так происходит - пока не разобрался."
Сплеш скрин немного сдвигается вверх во время загрузки, то есть в момент когда тема у которой бэкграунд задан как сплэш сменяется на сплэш из манифеста. Как фиксить?
Вот в этой статье есть пример этого глюка. http://zmc.space/posts/qt-android-splash-screen
Собственно этот глюк на пикриле
Это делается чтобы сбить зарплатные ожидания, вряд ли кто-то будет в серьез думать, что надо всю подобную шелупонь знать.
То есть они пишут зп миллиард в наносекунду в вакансиях, чтобы потом спросить какую-то бесплолезную дичь, и сказать "ну мы вас готовы взять, но на зарплату меньшую чем в вакансии".
>нарушениями ODR
у нормальных либ таких проблем нет (я уже давно юзаю эту технику).
у говнокодеров не знающих про скрытие глобальных переменных (и вообще их юзающих в 2020 году) решается добавлением еще пары заголовков
>>701182
>дрочеву с namespace и т.п.
вообще нет никакой проблемы - оно же не пересекается с твоим кодом.
и я просто напомню что с библиотеками проблем не меньше - например они должны быть скомпилированы одним и тем же компилятором (что для стороних либ почти нереально). у них ебучие системы сборки которые по полчаса перекладывают файлы из папки в папку (забавно что когда берешь либу, компилируешь еще - полчаса. потом делаешь такой cpp и он компилируется за 3 минуты, а все потому что у даунов окончательная фаза терминала головного мозга поэтому там целый час всякое говно на питоне выполняется
>>701182
>Ты только что Unity Build.
на основе этой идеи да. но нет. unitycpp для ускорения компиляции. тут же сделано для того чтобы не таскать библиотеки
>Бля, а где я должен был узнать о таких вещах?
>или почему нельзя юзать memcpy...
Вопросы про sort & memcpy вполне резонные. Чуваки с опытом использовали и то и другое, смотрели на производительность, смотрели как устроено. фундаметальные же вещи.
a.cpp:
namespace { const int myID = 1; }
b.cpp:
namespace { const int myID = 2; }
Ты ещё скажи, что никто так не пишет
У меня просто есть 4 разные функции, которые отличаются только одним символом. Как-то не здорово.
Макросы.
> собесы по С++ в серьезные компании
> Вроде пишешь себе на С++ профессионально
Это писал неофит?
Ебаться, ебаться, ебаться...
Аноны, как понять когда можно идти собеседоваться? Я учу где-то полтора года плюсы, есть пару петов либа с CI тестами и прочей лабудой, и гуйное приложения для вуза, вроде-бы что-то да знаю. Вот знакомый недавно прошел в какую-то нормальную фирму, сказал там собеседующий охуел от того что он знал про сфинае и какие-то базовые вещи, я выпал прямо. Могу на собесе написать условный шаред или тредпул не на листике, распаковать туплю ну и там всякое. Время в принципе не поджимает, могу хоть года 3 еще учить, но как-то хуёво от ощущения что не самые умные одногрупники уже работают, а я нет. На каком курсе вы бы рекомендовали пойти работать, если будет возможность?
https://www.codingame.com/playgrounds/53661/c-project-oneapi
Это что там за for с двоеточием? Что за мутант такой?
Вуз мусорный, дают свободное посещение при работе по специальности, поэтому про него особо и не писал
Курсе на пред-предпоследнем может смело идти в стажеры.
На лямбды похуй, на темплейт паки похуй, на новую модель памяти и многопоток похуй, а вот сахар для лупов это даа, джвадцать лет ждали
А ты треды и тупли не юзаешь? Тредпулов у вас нету? std::function тоже не юзаете?
я то все это юзаю (ну кроме модели памяти кек), мы на С++17 уже год сидим. Мне интересны другие люди.
>Всё остальное в кодовой базе занимает доли процента.
Серьёзно? Однопоточное легаси, или что?
Весь многопоток вынесен в обертки.
Разве что std::function юзаем довольно часто, но это всё уже сто лет как есть в бусте
> сто лет как есть в бусте
Ох как же я выпал с соурсов бустовой тупли, которую с С++03 не обновляли видимо
Решает задачу и заебись
И как с двоеточием будет выглядеть такой код?
for (int i = 0; i != size - 1; ++i) { cin >> arr }
А тут range-base аналогичный не напишешь до С++20, по крайней мере не стоит, легче обычный цикл или итераторы
Проморгал чёт, если проход не по полному массиву то бери итераторы или индексы лучше итераторы
Потому-что у range-base перегрузка только со стат. массивами, потому-что их размер можно на этапе компиляции узнать через std::size если с шаблонами знаком то можешь соурсы глянуть, там кода 5 строк, у дин. массива таких приколов нет, потому-что размер рантаймовый
>>699750
> Пчел, ну разберись ты раз и навсегда. Что такое разделяемая библиотека? Это
Спасибо за пояснения но мне все таки ликбез по линковке нужен был, а не по системе линукс
в общем короче оказалось все вот так
-L/(путь до папки с собраной либой)/
-l(имя либы без lib и so)
LIBS += -L/home/linuxbrew/.linuxbrew/opt/mpv/lib/ -lmpv
-L я так понимаю нужно как разделитель для нескольких библиотечек
-L/path/to/lib/ -lxyii -lpzda -L/other/lib/ -ljigurda
А это и был ликбез по линковке. Кто же виноват, что ты не понял и перепутал это с ликбезом по системе Линукс?
Разберись тогда уж с флагами компилятора... Надеюсь, ты не руками собираешь?
Сап всем, С++ это реально пиздец? Мимо выучил Python, думал в Веб-макакинг пойти, но чет душа не лежит прямо к этому, да и предложений мало с нулём опыта. Сам только Cython использовал максимум, но понял как в С компиляция работает и бутстрапинг компиляторов, виды типизации. Короче затянуло в вещи чуть поглубже if else, но вот смотрю на вот это все и как-то не верится, что ума хватит это все охватить.
С++ нельзя охватить умом, это бездонная параша, которую перестраивают прямо под задницей. А еще это тормознутый компилятор и гигабайты либ и заголовков. Как же я ржу со слов precompiled header.
> Сап всем, С++ это реально пиздец?
Та же хуйня что и джаваскрипт, идут похожими дорогами - пялят поверх старой идеи новый синтаксис с сохранением совместимости, обрастают какими то фреймворками и либами. И кстати джаваскрипт в основе то имел всегда машину на плюсах и там все такие стандартные методы так или иначе в плюсах тупо реализованы в старых исходниках фаирфокса можно убедится. Так что два брата уродца - один в бакенде реализует все говно с проверками типов другой во фронтенде, хотя сейчас уже хуй пойми.
~ClassName() {}
Вот эта вот хуйня это деструктор, когда объект очищается это говно вызывается, чтоб там free() всякие можно было запускать (этож си)
Есть какие-то подходы из личного опыта как вьехать в большую кодовую базу? Может уже придумали какой то софт для визуализации кода, чтобы его было легче воспринимать и понимать, что-то более эффективное чем прокликивание в ideшке?
Давно хочу разобраться в коде openxray и openmw, но каждый раз на каком то этапе отступаю, потому что слишком много вещей нужно держать в голове и слишком сильно разветвляется код, тупо теряюсь, забываю с чего вообще сюда полез и так по новой, пока не надоест и не забъю на какое-то время, потом жопа заживает и все по новой. А ведь есть кодовые базы на порядки сложнее и больше, и как то же в них разбираются.
Да. Ты после питона скорее всего пойдешь по следующему пути:
>скачал вижуал студио, хеллоу ворд работает
>изучаешь 3-й день базу
>захотел как в петоне написать тгбота по быстрому
>жсон парсеров нет
>инструментов для работы с сетью нет
>подумаешь да и хуй с ним, сейчас либу притащишь и пойдет дело
>смейк ущербен
>пытаешься собрать одну из либ с жидхаба
>undefined reference to ___tvoya_zalupaInternal__
>с третьей попытки нашел собирающуюся либу
>через 5 часов осилил подключить бинари в смейке и инклюднуть директорию с хедерами
>по быстрому написал бота по примерам из доки
>решил залить свой впс
>сосешь хуй без окружения
И это просто базовые вещи. Стандартная либа очень маленькая, там буквально только базовые вещи, графики нет, нетворкинга нет, развитой многопоточки нет даже тредпула блять, при этом из всех билд систем самый популярный это как ни странно самый уебищный вариант. Благо сейчас конан развивают, гляди через пару лет нюфаги смогут без морок ставить либы как в петоне.
Почему питон в отличие от плюсов оброс огромным колличеством библиотек, хотя казалось бы плюсы один из самых популярныз и старых языков?
Спасибо молокософту за вцпкг
Потому-что плюсы более консервативны, это не раст, где разработка языка производится на гитхабе, тут собралось пару сотен серьёзных дядь, и решили что они будут принимать идеи от комьюнити, оформлять их, вырезать лишнее и добавлять потихоньку в стандарт. У этих дядь естественно есть свои принципы, которые уже больше 30 лет стараются соблюдать, та же обратная совместимость например. Ну вот так вот сложилось, плюсы это не язык для написания лайтовых программ для автоматизации, это язык для высоконагруженных приложений, где зачастую критически важна надёжность и производительность, а не то, что ты можешь за 15 минут тгбота написать. А вот почему всё так хуёво с билд системами и пакетниками я не знаю, я и сам зеленый еще
А зачем некоторые мужики носят юбку?
Это же разные вещи, на одну итерацию цикла меньше будет
Один человек и не должен ничего решать. Язык служит разработчикам, а группа стандарта стандартифицирует язык так, чтобы он вписывался в общие методики и ничего не ломал. Было бы странно, если бы слово Страуструпа весило больше, чем слово какого-то сеньора с 40-летним стажем
void Foo()
<%
int a<:10:> = {0};
a<:0:> = 1;
a<:1:> and_eq 2;
a<:2:> =2;
%>
(надеюсь в жизни я не увижу альтернативного синтаксиса)
просто на лямбдах это выглядит как говно
в расте и питоне вроде решает один разраб. разраба питона за это еще и гнобили
Потому что это языки из разных миров, питону питоновое, плюсам плюсовое.
Вообще мир программирования сегодня выглядит так (сразу оговорюсь что выкинул языки типа форт/хаскель/фортран/лисп так как тупо не знаю куда их приткнуть):
C/C++ TIER статические языки которые сами все делают, компилируются напрямую в машкод управляют данными и выделением памяти под эти данные.
Rust/Go/Swift/D TIER по прежнему статически типизированные компилируемые языки отказавшиеся от управления памятью, за них это делает небольшой рантайм прямо во время исполнения.
java/C# TIER статически типизированные языки отказавшиеся от компиляции в машинный код и компилирующиеся в байткод некой абстрактной виртуальной машины которая может запускаться там куда ее портировали.
Python/JavaScript/PHP/lua/Ruby TIER динамические языки компилирующиеся/интерпритирующиеся в машинный код прямо во время исполнения, переложившие проверку типов и вообще всего и вся на свой пухлый рантайм зато освободившие программиста от очень многих рутинных вещей.
каждый тир охватывает какую то свою область в которой он эффективней всего, а внутритировые языки уже обрастают своей инфраструктурой которая так же так же охватывает свои ниши.
Если ещё не привык, то да, это действительно несколько комично.
Чтоб = с == не путать
Больной ублюдок, ты?
Воистину двач образовательный не перестает удивлять как и плюсы.
Только что попробовал скомпилить клангом с этой дрисней, работает. В первый раз вижу эти альтернативные токены.
Зачем вообще это было сделано? Где-то используетя?
Наследие сишки, чтобы можно было писать на ней даже в самых ущербных кодировках. Сейчас везде юникод, можно хоть эмодзи в идентификаторах, так что не нужно.
>чтобы можно было писать на ней даже в самых ущербных кодировках
Т.е. еще что-то более древнее чем ASCII? Ведь там все основные символы есть.
Значит нуждаюсь в помощи. Есть задача следующего рода:
Выполнить копирование выбранных элементов из одного списка в другой, один и тот же элемент дважды скопировать нельзя.
И есть код, который работает через ачько, но иногда работает правильно
void __fastcall TForm1::Button8Click(TObject *Sender)
{
ListBox1->CopySelection(ListBox2);
AnsiString s[100];
for (int i=0; i < ListBox2->Items->Count; i++) {
s=ListBox2->Items->Strings;
}
for (int i=0; i < ListBox2->Items->Count; i++) {
for (int j=ListBox2->Items->Count-1; j >= 0 ; j--) {
if ((j!=i)) {
if (s==s[j]) {
ListBox2->Items->Delete(j);
}}}}}
Как его стабилизировать?
Есть три варианта. Я очень хочу второй и не хочу дёргать указатель (и вообще писать ->) как в третьем, и я просто вертел этот синтаксис через двоеточие из первого.
Что делать и зачем эта концепция нужна?
Предположим, у меня есть переменная, я хочу её инициализировать значением не сразу (и не в конструкторе), а после выполнения некоторых действий в функции. Например, мне нужно из файла считать эти 800х600.
Можно обернуть считывание из файла в функцию и вызвать её после двоеточия - но это маразм же, почему я просто не могу выполнить нужный код и вызвать в конструкторе в удобном мне месте? (inb4 из-за наследования - да знаю я) Вопрос скорее в том, зачем так проектировать свои ебаные библиотеки?
Вот в стандартной библиотеки няшечки, там всё работает - почему нельзя им уподабливаться?
Визуалстудию комп не тянет, а нормальных ide не знаю.
А сидя на линуксе вечно такое ощущение что занимаюсь какой-то херней а не программированием.
Попробуй qtCreator - он у меня нормально работал даже на 2 гб памяти с ноутбучным i3.
Он маленький и на удивление неплохо справляется с подстветкой всякого для шаблоноговна (он же для qt вроде как спроектирован).
угу, мне накидали ссылок, но там было в одной pyqt, а в другой просто расплывчатые ответы не особо относящиеся к сути, сейчас решил не засирать тредами pr и написать в готовые треды, ща в 112 напишу, мб найдётся знающий человек
visual code тебя спасет
>Порекомендуйте, что нибудь для изучения DirectX.
https://docs.microsoft.com/en-us/windows/win32/direct3d
>>719098
Увы, нет.
Вулкан, DX12, Metal - это "низкоуровневые" апи, где надо вручную рулить видеопамятью и синхронизацией цп/гп.
OpenGL, DX11 - они попроще, там драйвер многое делает сам.
thx)
Тогда не можешь ли ты порекомендовать, что либо для изучения OprnGL? Заранее спасибо.
Оу, ну лан, спасибо.
Это копия, сохраненная 11 сентября 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.