Это копия, сохраненная 13 ноября 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
• https://github.com/sosachbot/cppthreadhat/wiki
Ответы на вопросы:
• https://en.cppreference.com/w/
• https://www.cplusplus.com/reference/
Прошлый тред: >>1693081 (OP)
В федоре и толстовке от Яндекса
Лол, ты адекват?
Че, тоже хотел перекатить, но не успел?
>2
А если я хочу прогать на языке D, можно я не буду, как говорил какой-то анон "D сделан для тех, кто уже поел говна на С++". Хоть я и знаю язык C++ более менее и писал на нему пару небольших петпроектов, но "говна" таки не поел, зато очень хочется сдриснуть с этого говнистого языка на более красивый. Можно?
Верно, я что-то упростил все. Но судя по всему можно снизить число connect'ов если все внутри одного класса находится.
>>1708768 →
Я читаю, но все равно сложно пока ориентироваться. Я даже не понял, есть ли там дефолтные значения для selectionbehaviour, если самому не задавать.
>>1708772 →
Да, видимо так и есть все, я готовый класс использовал безо всяких переопределений.
В телеге он выглядит так
> The initialization order of member variables is determined by their order of declaration, not their order in the initialization list.
Это с каких пор так?
Всегда так было
Gotcha! Ну какой же классный язык...
const char& b = i;
std::cout << b;
i++;
std::cout << b;
Вот тут я охуел b никак не связана c i
> не связана
> ссылка
> ссылка - Вид наказания — пребывание на поселении в отдалённом месте в качестве сосланного.
предлагаю коллективно признать этот и предыдущий треды нелегитимными и продолжить отсиживаться в 110 ом
Выбор у меня между растом и крестами, хочется в каком-нибудь охуенном месте сидеть охуенные задачи решать (лол).
В рашке только в яндексе на крестах норм вакансии и нет смысла даже соваться или как?
Вообще, где есть НОРМ разработка, отличная от мобилок (фу) и веба(фуууууу)?
И какие вообще перспективы у 30-ти летнего чмони (меня), сующегося в кресты в первый раз?
Осилить ГО -- пара недель, Джаву -- месяцок-другой.
Кресты -- блядь, тут судя по первому взгляду год уйдёт на синтаксис и понимания указателей, какого хуя так мало платят?
Как рекомендуется в модерновом С++ аллоцировать массив чтобы его не нужно было освобождать? unique_ptr/shared_ptr и туда прямо массив засовывать вместо make_unique? Для char[] я думаю проще всего string использовать
Да где блять мало, джуны 1к-1.5к, миддлы от 2к, сеньоры от 3к. В хороших конторах могут и джунам по 2к платить, это не говоря о том, что когда ты станешь сеньором а то и мидлом, то работа будет искать тебя сама, там же и удалёнка подкатит. А для джунов требуют не так и много, за первые два курса универа учится спокойно
Пойти что ли программистом работать.
Вот я и говорю, из буста даже thread в стандарт включили, почему опции не хотят?
Включили урезанный, я не ебу чем стандарт занимается и почему они даже скопипастить готовый код не хотят
Сокеты планируют в 23-м вместе с рефлексией. Юникод не нужен хуй знает когда будет. Опять же, хотя-бы для консольных приложений, в чём проблема скопипастить boost::nowide в стандарт? Бля и пары человек для ревью хватит, а так хотя-бы консольные приложения страдать не будут
Вектор лучше всего. Уже много раз слышал правило, что если нет везких причин не использовать вектор, то надо брать именно его. А специализации для массивов у шареда нет не осилили скопипастить с буста вместе с самим шаредом
ну ты не охуел ли? на твоём скрине от силы 10 вакансий за 200к и для них надо блядь пахать и пахать
на джсе за пару лет платят 200к+ почему вас крестовиков так унижают??
>унижают
2 моих друга из-за нужды в деньгах в 2015 тупо начали рассылать резюме во все фирмы. Оба нашли работу. Сейчас оба мидлы за зп не знаю, не бедствуют. Были почти нулячие на тот момент, в старших классах учили что-то вроде. Жсер так может? Мне казалось там на одну вакансию 5 тыс. резюме, а эйчарши могут отказать из-за непонравившегося шрифта в CV. Вакансии там кстати не особо то и требовательные, вот тебе пофоткал парочку из мск, и пара из моего города. Средняя зп у нас 10к если что, медианная 5-7к или типо того
std::chrono::duration<double, std::milli> fp_ms = t2 - t1;
// integral duration: requires duration_cast
auto int_ms = std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t1);
Аааа блять что это за говно. Нахуя было так все усложнять.
Все что нужно timer.Start() timer.Stop() timer.GetSeconds() or milliseconds. А в этом хроно ебучем какие-то бесконечные касты.
Да. Только не обязательно присвоит, а просто возьмёт значение и использует в выражении. Например, при вызове функции.
ну что ты мне яички выкручиваешь, дружище. Я тебе о том, что сейчас мне за Ноду/Пхп платят 200к+, а знаний у меня хуй да нихуя, только всякие библиотеки да фреймворки как бибизяна выучил.
Вакансий миллион, если завтра решу поменять работу, новую найду за дня три макс.
А тут получется, что если я захочу настоящим программистом стать и убить годы на понимание мультитреда и перекладывания байтов, у меня будет условные 10 вакансий в москве с потолком в 250к, и то там конские (по сравнению с вебом) требования, фиг знает, что возьмут и работу менять в случае чего сложно (всего контор раз два и обчёлся).
Короче, хуй знает, но на мой взгляд джс-макаки, вас унижают как только могут за ваши знания
Мимо-неон, а что тут удивительного, никакой связи между сложностью и рыночком. У ембедщиков такая же хуйня. Там еще и железо нужно знать и байтоебство. А не платят не хуя. А с другими индустриями сравнить - вообще пиздец. Математики там всякие, и прочие физики.
> вас унижают как только могут за ваши знания
И что делать с этим будем? Нормальный крестокодер сможет себе без проблем место выбить с устраивающей его зп. Я вообще знаком с победителем ICPC, сегодня уже сеньором, там знаний блять как у профессора математики, препода по алгоритмам и 10 жс макак, работает за 3к, говорит как-то похуй на деньги, хотя не раз уже офферы и за бугор были, и местные мск на 5к. Думаешь ему не похуй, что о нём какой-то недопрограммист, который семафор от мьютекса не отличает, думает?
>сейчас мне за Ноду/Пхп платят 200к+, а знаний у меня хуй да нихуя, только всякие библиотеки да фреймворки как бибизяна выучил
Я тоже так хочу, откуда начинать?
семафор пропускает n потоков, мьютекс один
учи жиэс, учи фреймворк, подавай на джуна, потом через год перескакивай на двойную зп и через год ещё раз так же делай
Бамп
Ну как бы есть разница, порядок исполнения другой
++i > 1 // это сначала сложение потом сравнение
i++ > 1 // это фактически сравнение и сложение можно запускать одновременно. Надо скомпилить вывод посмотреть, я не уверен можно ли один регистр двум командам использовать, но если что можно все равно сложение делать в другой регистр а сравнивать текущий.
int chlen = 8192;
Это не то, что вы подумали. Это chunk length при записи файла по кускам.
penetration - хорошее название для переменной типа double.
float ing;
char acter;
short penis;
short incel;
Обосрался со второго пика. Больше не буду такое писать, ну его нахуй. ОП, ты жжешь.
Зачем ты выбрал именно топовые вакансии на плюсах? Я сам видел, так как регулярно просматриваю хх по мск.
Как мне показалось, очень много предложений работы связано с говном - программирование под винду, mfc, c++/cli, qt. Или байтоебство какое, где предлагают 120к за 6+ лет опыта работы.
У жс и джава макак все намного лучше в среднем
>Вообще, где есть НОРМ разработка
Интересные задачи встречаются как ни странно в НИИ разной степени паршивости. Правда платят мало.
А так в РФ есть самсунг и хуавей, в последнем платят прилично, в пером нет. Яндекс по уровню зп считается ниже среднего по рынку.
Да и вообще, что по твоему норм разработка? В большинстве случаев на плюсах делают либо очередное видеонаблюдение, либо контроль трафика, либо какие нибудь штуки с железками. Чем это принципиально интереснее веба - не знаю. Еще компьютерная графика есть, но это сильно на любителя.
На твоём месте я бы дальше сидел в вебе на хорошей зп. Просто скорее всего окажется, что перейдя в новую отрасль, ты обнаружишь, что задачи по прежнему говно и скучно, а зп и условия работы в разы хуже.
Яндекс, Мейлру, Нвидия, дойчебанк, Сбербанк, Озон думает начинать кресты пердолить, как Сашка Фокин туда уехал.
Дохуя чо есть.
курсы -- говно, по книжкам и можно и нужно. Ну или на юдеми какой курс купи разве только, но вообще немного книжки, много практики и много гугления за глаза хватит
>>09601
смотрю у яндекса дохуя крутых вакансий, по описанию все выглядят интересно
>>09600
может быть, ты и прав. Мне сложно описать, что я понимаю под норм разработкой, скорее это что-то вроде создания алгоритмов и решения каких-то абстрактных задач, наелся я бизнес-говна сполна, не могу больше скачивать и использовать библиотеку, хочу написать свою
>хочу написать свою
так напиши. если чо полезное будет - отгребешь звезд и будешь мега звездой. а если ты кукаретик мамкин, то хуй сосать будешь де скончания веков. вот тебе мое проклятье
Сбер и дойчебанк это логово джавистов, что собственно неудивительно.
Яндекс и нвидия - да. В остальном плюсовики нужны в крайне малом количестве.
Я всего ~5 вакансий просмотрел, выбрал адекватные, они в моём посте и прикреплены, как там в мск дела не знаю, из своего города вообще выбрал джуно-слабомидло вакансии. Хотя и у нас говно есть, одна фирма набирает стажёров со стеком Qt/Boost/WinAPI/MFC, не ебу в душе чем они там занимаются, но звучит не очень.
"для интереса" делай свои домашние проекты или в опен сорс вкатись. Просто смирись, что на дворе 2020, библиотеки уже все написаны. Остался только бизнес. И дальше будет только хуже. фреймворки, облака, saas/paas. Все за тебя напишут, только деньги плати. Базы данных, алгоритмы, криптография, обработка изображений, или вон AI еще не успел развиться а уже есть всякие AI paas в облаках. Для вебсервисов весь plumbing за тебя сделают. Что еще писать? Только веб бизнес. Положил в базу, достал из базы. Больше ничего не будет. Ниш никаких не остается. Если какая-нибудь тема станет популярной, ее тут уж МС/Амазон/Гугл к рукам приберут, в облако засунут и убьют конкуренцию. Я реально не знаю, чем будут погромисты заниматься через 10-20 лет?
такой маленький а уже МАМИН СИНЬЁР за технологии поясляен. таким в индустрию путь заказан
вот этот знает. через 10-20 лет у вкатышей будет вариант: быть гением или сосать хуй. вкатывайтесь пока не поздно в менеджмент. дальше только пиздец и купола
Для открытия hh.ru нужно проработать 15 лет? Ты чего порвался то?
>То есть всегда?
всегда, когда жаба треда нет на доске, манявкатыши начинаю считать, что плюсы охуенное место для вката?
Проведение auto же указано в стандарте?
const и & компилятор сам не вставляет, читай матчасть
Бизнес - это service layer с дохуищей логики и сотнями абстракций. Круды на фоне этого - капля в море, от всего процесса разработки они берут ну процентов 5 времени от силы. Решение давно есть, называется ORM. В задачах бизнес-логики же конца-края не видно, что там
> 10-20 лет
мимоджавист
круды и околокруды; придумали решения, вот мы их и "имплементируем" за сотни тысяч деревянных
Просто пиши auto&& и оно там само без копирований работает
1)Как сделать так,чтобы оно сейвило с именем screen1,screen2 и т.д
2)Как скриншот запихнуть в отдельную папку?
3)как это счастье сжать,ибо 5 метров/скрин это дохуя знаю,там реализация длинная
Весь код:
TPicture p=new TPicture;
HWND hwnd=GetDesktopWindow();
HDC hdc=GetWindowDC(hwnd);
TCanvas C=new TCanvas;
C->Handle=hdc;
int w=Screen->Width;
int h=Screen->Height;
p->Bitmap->Width=w;
p->Bitmap->Height=h;
p->Bitmap->Canvas->CopyMode=cmSrcCopy;
p->Bitmap->Canvas->CopyRect(TRect(0,0,w,h),C,TRect(0,0,w,h));
ReleaseDC(hwnd,hdc);
delete C;
p->Bitmap->SaveToFile( "screen.jpg" );
delete p;
Ну и тип, поставить любой count, если тебе прям нужно что бы было чередование 1 2 3 и т.д. но, вообще, как по мне, лучше просто подсосать time.h и просто в строку вставлять дд.мм.гггг
По поводу сжатия, тут хызы, посмотри реализиции в своей WinAPI, более чем уверен, что там есть реализации работы с форматами и их сжатие
//А поч bmp ? Помимо того, что это дефолт винды
Есть ли еще какие-то продвинутые инструменты для визуализации?
Бля, чел, ты чё, борланд C++ в 2к20 юзаешь? Ты шо, ёбнулся?
Юзай Qt если тебе надо интерфейс в попу ебать, или https://github.com/ArashPartow/bitmap если тебе только сам bitmap нужен.
> Как сделать так,чтобы оно сейвило с именем screen1,screen2 и т.д
> Ну и тип, поставить любой count
Не, тут надо проверять наличие файла, и если файл есть добавить к названию (1), или (2), или (3), и так пока цифры не кончатся. Так винда делает если ты новую папку с тем же именем не создашь. А хранить count в оперативе не поможет, так как если файл с таким именем уже есть - он его просто не создаст.
> лучше просто подсосать time.h и просто в строку вставлять дд.мм.гггг
Ну или так...
> Как скриншот запихнуть в отдельную папку?
Путь в SaveToFile( "./folder/screen.bmp" ) передать вот так. А как создать папку сам позырь. Надо проверить есть ли она, и если нет создать.
> как это счастье сжать,ибо 5 метров/скрин это дохуя
Чел, смотри.... bmp - это формат изображения где данные хранятся БЕЗ ПОТЕРИ КАЧЕСТВА.
То есть, если у тебя изображение - чёрный квадрат 3x3 с белой точкой по центру, то это будет двумерный массив из 9 rgb точек
[[rgb(0,0,0), rgb(0,0,0), rgb(0,0,0)],
[rgb(0,0,0), rgb(0,0,0), rgb(0,0,0)],
[rgb(0,0,0), rgb(0,0,0), rgb(0,0,0)]];
Ну, там я конечно упрощаю, ибо есть определенные механизмы LZW сжатия без потерь, но всё таки это не то.
А всякие жпеги - это алгоритмы сжатия с потерями, но они гораздо сложнее чем тот же BITMAP.
PS:
> p->Bitmap->SaveToFile( "screen.jpg" );
Это хуйня. Просто назвав файл jpg ты не сделаешь его jpg. Надо либо юзать либу для закожевания этого говна в jpg, либо реализовывать самому. Это не очень сложно, но за 5 минут не объяснить. Погугли как это делается.
Бля, чел, ты чё, борланд C++ в 2к20 юзаешь? Ты шо, ёбнулся?
Юзай Qt если тебе надо интерфейс в попу ебать, или https://github.com/ArashPartow/bitmap если тебе только сам bitmap нужен.
> Как сделать так,чтобы оно сейвило с именем screen1,screen2 и т.д
> Ну и тип, поставить любой count
Не, тут надо проверять наличие файла, и если файл есть добавить к названию (1), или (2), или (3), и так пока цифры не кончатся. Так винда делает если ты новую папку с тем же именем не создашь. А хранить count в оперативе не поможет, так как если файл с таким именем уже есть - он его просто не создаст.
> лучше просто подсосать time.h и просто в строку вставлять дд.мм.гггг
Ну или так...
> Как скриншот запихнуть в отдельную папку?
Путь в SaveToFile( "./folder/screen.bmp" ) передать вот так. А как создать папку сам позырь. Надо проверить есть ли она, и если нет создать.
> как это счастье сжать,ибо 5 метров/скрин это дохуя
Чел, смотри.... bmp - это формат изображения где данные хранятся БЕЗ ПОТЕРИ КАЧЕСТВА.
То есть, если у тебя изображение - чёрный квадрат 3x3 с белой точкой по центру, то это будет двумерный массив из 9 rgb точек
[[rgb(0,0,0), rgb(0,0,0), rgb(0,0,0)],
[rgb(0,0,0), rgb(0,0,0), rgb(0,0,0)],
[rgb(0,0,0), rgb(0,0,0), rgb(0,0,0)]];
Ну, там я конечно упрощаю, ибо есть определенные механизмы LZW сжатия без потерь, но всё таки это не то.
А всякие жпеги - это алгоритмы сжатия с потерями, но они гораздо сложнее чем тот же BITMAP.
PS:
> p->Bitmap->SaveToFile( "screen.jpg" );
Это хуйня. Просто назвав файл jpg ты не сделаешь его jpg. Надо либо юзать либу для закожевания этого говна в jpg, либо реализовывать самому. Это не очень сложно, но за 5 минут не объяснить. Погугли как это делается.
>sourcetrail
Да нету, блэт. Это прикол такой. Нормальные челы поставили себе neovim vsc и не ебут себе мозг...
Куда перекатываццо?
это радка,но сорта говна,как я понимаю
Залупа разрослась до
TPicture p=new TPicture;
HWND hwnd=GetDesktopWindow();
HDC hdc=GetWindowDC(hwnd);
TCanvas C=new TCanvas;
C->Handle=hdc;
int w=Screen->Width;
int h=Screen->Height;
p->Bitmap->Width=w;
p->Bitmap->Height=h;
p->Bitmap->Canvas->CopyMode=cmSrcCopy;
p->Bitmap->Canvas->CopyRect(TRect(0,0,w,h),C,TRect(0,0,w,h));
ReleaseDC(hwnd,hdc);
delete C;
AnsiString path=ExtractFilePath(Application->ExeName);
p->Bitmap->SaveToFile(path+ "screen"+ IntToStr(nomer)+".bmp" );
delete p;
TJPEGImage *tJpg=new TJPEGImage;
Image1->AutoSize=true;
Image1->Picture->LoadFromFile(path + "screen"+ IntToStr(nomer)+".bmp");
tJpg->Assign(Image1->Picture->Graphic);
tJpg->CompressionQuality = 30;
tJpg->Compress();
AnsiString path1 =ExtractFilePath(Application->ExeName);
tJpg->SaveToFile(path1 + "screen"+ IntToStr(nomer)+".jpg");
DeleteFile (path+ "screen"+ IntToStr(nomer)+".bmp");
delete tJpg;
nomer++;
Единственное,что надо-засейвить жипег в отдельную папку,допустим bin
Вопрос:как?
Куда перекатываццо?
это радка,но сорта говна,как я понимаю
Залупа разрослась до
TPicture p=new TPicture;
HWND hwnd=GetDesktopWindow();
HDC hdc=GetWindowDC(hwnd);
TCanvas C=new TCanvas;
C->Handle=hdc;
int w=Screen->Width;
int h=Screen->Height;
p->Bitmap->Width=w;
p->Bitmap->Height=h;
p->Bitmap->Canvas->CopyMode=cmSrcCopy;
p->Bitmap->Canvas->CopyRect(TRect(0,0,w,h),C,TRect(0,0,w,h));
ReleaseDC(hwnd,hdc);
delete C;
AnsiString path=ExtractFilePath(Application->ExeName);
p->Bitmap->SaveToFile(path+ "screen"+ IntToStr(nomer)+".bmp" );
delete p;
TJPEGImage *tJpg=new TJPEGImage;
Image1->AutoSize=true;
Image1->Picture->LoadFromFile(path + "screen"+ IntToStr(nomer)+".bmp");
tJpg->Assign(Image1->Picture->Graphic);
tJpg->CompressionQuality = 30;
tJpg->Compress();
AnsiString path1 =ExtractFilePath(Application->ExeName);
tJpg->SaveToFile(path1 + "screen"+ IntToStr(nomer)+".jpg");
DeleteFile (path+ "screen"+ IntToStr(nomer)+".bmp");
delete tJpg;
nomer++;
Единственное,что надо-засейвить жипег в отдельную папку,допустим bin
Вопрос:как?
>это радка,но сорта говна,как я понимаю
Ну это переименовали. Раньше называли Borland C++, сейчас RAD Studio.
А куда перекатываться - да куда хочешь. Я бы в qt делал, но если тебе это боль не причиняет - используй так.
Но на qt нет залупы с хендлерами и ручным менеджментом памяти.
На pastebin или gist код кидай.
> Единственное,что надо-засейвить жипег в отдельную папку,допустим bin
Попробуй папку вручную создать и путь указать к ней. Если выйдет, то создай папку как здесь советуют
https://stackoverflow.com/questions/9235679/create-a-directory-if-it-doesnt-exist.
А ты путь кидал как? "D:\\test" или "D:/test"?
Папка существует,мне нужно,чтобы был не фиксированный путь,а путь до программы+папка ней
Пока оно всё сейвит в папку с exe,ибо
AnsiString path =ExtractFilePath(Application->ExeName
https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-getcurrentdirectory
Путь к текущей директории
https://docs.microsoft.com/en-us/windows/win32/api/userenv/nf-userenv-getuserprofiledirectorya
Путь к пользовательской деректории (C:\Users\<CurrentUserName>)
Теперь ещё один вопрос: почему на других компах пишет "не удалось найти указанный поставщик" и как это лечить?
Могу скинуть программу,если надо
Computer = Computer
ФУНКЦИОНАЛЬЩИК сожрал бумажку и высрал работающий системный блок с ВОДЯНЫМ ОХЛАЖДЕНИЕМ и предустановленой WINDOWS 7. На компьютере уже был установлен АЛАН ВЭЙК и ХАСКЕЛЛ ПЛАТФОРМ. Корпус был красного цвета, с наклейкой ТУРБО на прозрачной боковой крышке. Затем ФУНКЦИОНАЛЬЩИК написал в 2 строчки старую версию G++:
Compiler :: [C++SourceCode] → [ExecutableFile]
Compiler source =(Link . Compile) source
СТРАУСТРУП взял исходники своего дома и запустил компиляцию. Компилятор начал дристать СООБЩЕНИЯМИ ОБ ОШИБКАХ. СТРАУСТРУП попытался разобрать первую строчку, но увидев такое, дальше лезть не решился(таблица умножения и так вымотала его):
std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::less<std::basic_string<char, std::map<std::basic_string<std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>,std::allocator<char> > const, std::basic_string<char, std::char_traits<char>,std::allocator<char> > > > >char, std::char_traits<char>, std::allocator<char> >,std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>,std::allocator<char> > const, std::basic_string<char, std::char_traits<char>,std::allocator<char> > > > >std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>,std::allocator<char> > const, std::basic_string<char, std::char_traits<char>,std::allocator<char> > > > >
Высрав 10 000 СТРОК СООБЩЕНИЙ ОБ ОШИБКАХ, компилятор скончался от ЛЕНИВЫХ ВЫЧИСЛЕНИЙ ПРЯМОЙ КИШКИ и из монитора вылетела ЛЯМБДА. Придерживая круглые скобки квадратными скобками, ЛЯМБДА в ужасе съеблась под ближайший камень. Ей еще долго не захочется принимать и возвращать значения. Довольный СТРАУСТРУП плюнул в руку, чтобы наслюнявить хуй и уже решился залезать на мамочку, но передумал и решил вначале запостить эту историю на ДВАЧ.
Computer = Computer
ФУНКЦИОНАЛЬЩИК сожрал бумажку и высрал работающий системный блок с ВОДЯНЫМ ОХЛАЖДЕНИЕМ и предустановленой WINDOWS 7. На компьютере уже был установлен АЛАН ВЭЙК и ХАСКЕЛЛ ПЛАТФОРМ. Корпус был красного цвета, с наклейкой ТУРБО на прозрачной боковой крышке. Затем ФУНКЦИОНАЛЬЩИК написал в 2 строчки старую версию G++:
Compiler :: [C++SourceCode] → [ExecutableFile]
Compiler source =(Link . Compile) source
СТРАУСТРУП взял исходники своего дома и запустил компиляцию. Компилятор начал дристать СООБЩЕНИЯМИ ОБ ОШИБКАХ. СТРАУСТРУП попытался разобрать первую строчку, но увидев такое, дальше лезть не решился(таблица умножения и так вымотала его):
std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::less<std::basic_string<char, std::map<std::basic_string<std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>,std::allocator<char> > const, std::basic_string<char, std::char_traits<char>,std::allocator<char> > > > >char, std::char_traits<char>, std::allocator<char> >,std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>,std::allocator<char> > const, std::basic_string<char, std::char_traits<char>,std::allocator<char> > > > >std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>,std::allocator<char> > const, std::basic_string<char, std::char_traits<char>,std::allocator<char> > > > >
Высрав 10 000 СТРОК СООБЩЕНИЙ ОБ ОШИБКАХ, компилятор скончался от ЛЕНИВЫХ ВЫЧИСЛЕНИЙ ПРЯМОЙ КИШКИ и из монитора вылетела ЛЯМБДА. Придерживая круглые скобки квадратными скобками, ЛЯМБДА в ужасе съеблась под ближайший камень. Ей еще долго не захочется принимать и возвращать значения. Довольный СТРАУСТРУП плюнул в руку, чтобы наслюнявить хуй и уже решился залезать на мамочку, но передумал и решил вначале запостить эту историю на ДВАЧ.
>Compiler :: [C++SourceCode] → [ExecutableFile]
>Compiler source =(Link . Compile) source
Платиновая паста, но ты можешь точно так же выполнить в bash: cmake ..
И зачем тогда ваш маняхаскель, где надо ебаться со всякой функциональной питушней и приседать на штангу?
а 111 без тега был, вот и обосрались
В какую там директорию?
Ну у тебя софт не лицензирован, в нём в манияесте не прописаны ключи-хуючи, и винда по дефолту не рекомендует такое запускать, а то мало ли какие там вирусы. Ну это уже программирования не касается, можешь забить.
std::vector<class> numbers(10, class(x, y, z));
Создается вектор, на следующей строчке срабатывает деструктор.
В конструкторе выделяю память оператором new, если убрать деструктор, на протяжении вызовов методов класса все время вызывается конструктор и выделяет новую память. Вектор передаю в функцию по ссылке. Что за НЕХ?
Я не уверен, что именно в этом проблема, не знаю как в qt с исключениями разбираться. Да и что тут можно скастить в моем обработчике кнопки поиск?
model->setFilter("staff.Id LIKE '%"+searchfield->text()+"%'");
Может relationmodel вообще не поддерживает подобные фильтры?
Задал просто строкой и все отображает как надо. Почему текст не принимает из поля ввода?
model->setFilter("staff.Id LIKE '%1%'");
Нет, Qlineedit возвращает строку как и надо. Я лоханулся, но в другом месте, вынес этот объект в хедер, но забыл убрать инициализацию его в конструкторе:
Qlineedit ^search = new Qlineedit();
на
search = new Qlineedit();
Надо наверное выключать музыку во время написания кода, а я думал, что она наоборот помогает сконцентрироваться мне.
char *arr[] = { "start", ...<empty_len>..., "end", NULL };
чтоб как бы был массив а потом уже в пустые ячейки как бы пихать - нету такого?
Именно надо такой поинтеризованый псевдомассив, библиотека на си как бы принимает это говно.
Второй if будет всегда проверяться невзирая на первый. else if не будет, если первый if возвратит истину.
Не понял. Что конкретно принимает библиотека?
Итератор для типа "char *arr[]", то есть статического массива си-строк сделать можно, он обычный
https://stackoverflow.com/questions/3582608/how-to-correctly-implement-custom-iterators-and-const-iterators
>>11058
Можно и так и так, зависит от принятого стиля и важно чтоб принцип повторялся глобально. Я именно так как ты написал и делаю, например.
сука ебучая, там две звездочки короче, указатель на указатели.
Оптимизацию убери
За тем же, зачем вообще нужны explicit конструкторы - для избежания неявных кастов.
switch (x)
{
case 1: foo<1>(); break;
case 2: foo<2>(); break;
...
А хули ты хотел. Это ж шаблоны - нужно или на этапе компиляции знать значение, или не выёбываться и передать обычным параметром.
Я хотел в коде. Ещё я помню какие-то приемы (писали давно итт), когда создаётся таблица синусов с какой-то точностью. Я считаю, что это ультимейт полезная фича для каких-нибудь МК без fpu
> Я могу вызвать приватные функции класса, если в родительском классе эти функции виртуальные и публичные
Язык пидор
Религия не позволяет написать 5-строчник, который печатает эту таблицу?
Если msvc, то похоже на баг. Недавно натолкнулся на похожее поведение
Ну а вообще, скорее всего ты не понял, как работает копирование
Переписываю код с шарпа, не могу освободить память из вектора. Пробовал clear() + shrink_to_fit(), но память не освобождается. Пробовал переинициализацию вектора делать - хуй. В векторе хранятся классы, в которых нет указателей/new, по идее же оно должно при выходе из области видимости освобождаться само. Что я делаю не так?
> Пробовал clear() + shrink_to_fit()
Значит у тебя что-то другое течёт. Как потребление памяти измеряешь?
> Значит у тебя что-то другое течёт.
Бля, там нечему течь. Там внутри класса два std::byte и пустой вектор. Пробовал даже этот пустой вектор в деструкторе тереть кучей способов, но это явно не он. В методах указатели не использую, чтобы там что-то текло.
> Как потребление памяти измеряешь?
В VS в профайлер смотрю. Пробовал через диспетчер задач проверять, думал VS пиздит. Не вижу разницы с кодом очистки векторов или без.
shrink_to_fit не обязан освобождать.Попробуй swap с пустым вектором.
И вообще, как ты меряешь расход памяти? У тебя может освободиться память вектора, но остаться память выделенная под кучу (она просто будет помечена как свободная).
Он побайтово переписывает прототип на объекты вектора? Тогда понятно, почему у меня все объекты выдавали одинаковые значения на динамической памяти. (Утечка кстати была не из-за вызовов конструкторов, просто я набыдлокодил).
Вообще, странная логика, копировать байты, а потом удалять через деструктор, но, наверное, по другому было не сделать.
Блядь. Напиши нормальный конструктор копирования, который будет делать deep copy, тогда у тебя всё станет логично работать
Понял, но я просто убрал вектор, да и не было особого смысла комбинировать вектор и динамические массивы.
Ок
Вектор сам не вызывает деструктор, просто у твоего временного объекта class(x, y, z) закончилось время жизни, соответственно, после копирования он удаляется. Напиши отдельным оператором
class(x, y, z);
И у тебя здесь сразу вызовутся и конструктор, и деструктор.
Ну а вектор тупо скопирует значения через дефолтный конструктор копирования.
Vcpkg
То есть C не нужен?
Мне кажется, макакера на C++ найти легче, нафигачит код он быстрее. Эффективность продукт будет под вопросом. Больше опасность, что код поломается после ежегодной смены стандарта.
Офк лучше. Можно писать используя сейвовые RAII врапперы для всех ресурсов, а не каждый раз вручную писать free(zalupa) с шансом забыть это сделать и получить утечку.
Смотри, ситуация какая. Код драйверов можно написать как на том так и на том, это не важно так как ты не будешь особо stl или там boost юзать.
https://github.com/torvalds/linux/blob/master/drivers/gpu/drm/nouveau/
Посмотри как выглядит код драйверов nouveau. Ту же хуйню можно и на крестах писать, даже код в классы организуя(законом не запрещено).
> Сетевые приложения.
Конкретнее плес.
>>11660
> Там нужен ассемблер.
Не нужен. Толку от него ноль.
Пиздец, ну и говно. Вместо того чтобы по человечески сделать класс и реализовать у него методы, просто пишут функцию которая принимает указатель на структуру. Вот например гипервизор написанный на плюсах https://github.com/wbenny/hvpp так вот он НАМНОГО читабельнее этой сипараши.
Дык в плюсах это так и реализовано. Можешь убедиться, попробовав вызвать метод в новом поток. Первый аргумент после класснейм::методнейм - указатель на класс.
Я знаю про это потому и говорю, что вместо того чтобы взять плюсы и читабельно писать они эмулируют методы класса таким ущербным способом.
> ассемблер
пизданулся что ли, драйвера это модули к ядру, давай их на ассемблере хуярить в обход апи ага
>>12083
Ты толщину кода и скорость замеряй, а не красоту. Может быть на плюсах и красивее но это работает так же а скорость исполнения кода меньше и место в памяти больше требуется, плюсы помоему только в гайке/BeOS в ядре используются.
Нихуя он не быстрее, вот тебе пример даже https://godbolt.org/z/-7dapo абсолютно одинаковый листинг выдает на идентичный код на си и на плюсах.
Ты бы еще хеллоу ворд принес
Ну что ты набросился то пацана, ебучий волк, ей богу? Очевидно, симулировать, и очевидно, что не по тупости обосрался, а случайно.
WebKit используй, он приятнее будет. Страницу рендерить можно хоть прямо на бумагу, хоть в Dev null
https://chromium.googlesource.com/v8/v8.git
Сишка гораздо быстрее скомпилится, как минимум. Точнее, это пиздец критично бывает. А ещё она элементарная. Не знаю, кому как, а мне очень приятно смотреть на каноничный сишный код. Приятнее, чем на каноничный плюсовый, однозначно.
Ебать, какое же гавнище там в кодовой базе, как будто первокурсник из ПТУ лабу залил.
Документации ноль, из всех щелей лезут меджики, при том что это один из повсеместно используемых модулей.
Вот зачем ты этот линк вкинул, как жить-то теперь
Твоя мать вкатилась в айти? Тогда и ты сможешь скорее всего, хуесос, не расстраивайся)))
Что дозволено Юпитеру, не дозволено быку.
Еще раз напиши про меджикии/галеру, долбаеб
Горит тут только жопа твоей мамаши от трения моего хуя об ее дыру))
Я ни на кого не набрасывался, просто я не понял что тебе надо.
Без гуйни перейти куда то надо (то есть цепочку запросов сделать как от клиента) лучше наверное пхп взять или node-js просто потому что у них работа с сетью из коробки есть, зачем тебе плюсы с qt.
Qt - это гуй
я другой анон
Ну а хуле. Это во-первых код драйвера, во-вторых на ленупс, в-третьих для гпу. Любого из этих пунктов было бы достаточно, чтоб код выглядел как говно.
тян?
В душе не ебу как там с дотнетом, кьюте это инструмент созданный под определенную задачу - написание платформонезависимых гуев. А так - конечно, можно и микроскопом гвозди забивать.
Нет если там можно чисто отдельную библиотеку таскать с вот этими QString QObject QMap то это круто, но это просто удобная библиотека, как jquery
На текущий момент всё вообщем-то устраивает, но возникла мысль открыть резюме и походить по собеседованиям ради интереса, узнать свой текущий уровень и вдруг может перекатиться на мидловую позицию. До первой работы было только одно (неудачное) собеседование по плюсам.
Собственно вопросы:
Что думаете насчёт этого?
Что если HR с работы увидит моё резюме ( мы сейчас в очень активном поиске программистов)?
Что отвечать на собеседовании если спросят что не устраивает в текущей работе? Почему решили придти на собеседование/почему хотите работать у нас?
Кароч ты с ним не работал, проехали.
Приходилось кодить и так и так, для меня уже нет разницы си или кресты, потому что в проектах такого уровня очень редко есть серьёзное ООП. Это вам не курды круды.
На сихе это смотрится очень привычно через определенный промежуток времени.
>>12533
>Ебать, какое же гавнище там в кодовой базе, как будто первокурсник из ПТУ лабу залил.
Еееееееесть такое. Но я хочу сказать что это вообще-то норма в разработке.
>>12436
А, ну это я бы только на крестах делал.
ето я задавал вопрос, суть в том, что нужно сделать продвижение сайтов, тоесть ботярой просто накручивать просмотры, по городу расставлены orange pi zero на которых стоит собственная сборка линукса с кросскомпилятором и сборкой qt, у одноплатника нету выхода под монитор, он будет просто сервером откуда мой бот должен зайти на сайт и обойти защиту яндекса, я пробовал это делать с помощью просто гет запросов, но запроса который у яндекса отсеивает ботов я не нашёл, да и мои регулярки при изменении кода выдачи яндекса слетают нахуй, поэтому решил создать headless браузер который думаю справится с этим идеально, и увидел что QWebEngine на хромиуме, так как все одноплатники берут инфу о сайте и времени когда нужно будет зайти из одного бд, нужно сделать и бота который работает на QT, на котором работает уже бот для гугла. Было бы можно на node js я бы давно скрипт заебашил, это ведь не трудно, а вот заставить вебэнжин работать без гуя сложновато, по крайней мере для меня.
>Qt - это гуй
Не совсем. Это general purpuse framework фреймворк. Gui это что-то вроде wxwidgets
да я студент ебучий, у меня экзамен, препод сказал эту хуергу сделать, он мне блять вообще на вротпрессе предлагал сайты делать, я попробовал и проблевался нахуй, мне эту хуйню с ботом закончить и я никогда в жизни в веб ебаный не полезу.
Ага. Но опять же, единственное для чего qt хоть сколько-то используется - так это gui обёртки для консольных приложений/демонов. Ну тот же VLC написан на qt, но только сам gui.
Qt это вообще в принципе хороший пример того, что бывает когда нарушается юникс вэй...
та я на кедах неон сижу, я с головой просто в qt можно сказать)
Ну смотри, чел, есть такая философия разработки, называется она unix way. И одна из установок - делайте маленькие, простые, прозрачные программы, которые взаимодействуют друг с другом через понятный интерфейс.
В чём же проблема этого вашего Qt. Это по сути глобальный фреймворк, в котором есть всё. Да, там есть неплохой qt widgets, но ещё там есть куча другого говна, и всё они хотят чтобы ты делал "по ихнему". И тесты у них свои, и система сборки у них своя, и сигналослоты у них свои, и там библиотека Qt Network которой вообще пользоваться не возможно.
Они, короче, решили, что они laravel или rails, хотя народу просто нужна нормальная библиотека для гуя. Поэтому на кутэ обычно пишут маленький гуй без функционала, а весь кор на чём-то другом. Возможно на C++ и boost.
Просто сейчас нет нормальной библиотеки для кроссплатформенных гуёв. Либо электрон, либа эта параша.
В одном потоке я изменяю эту переменную и считываю. В другом потоке просто считываю. Будет ли это потокобезопасно? Могу в первом потоке сделать просто запись без проверки.
Понял, спасибо.
ну да, я пишу год на qt, вернулся к плюсам и понимаю что многих вещей базовых не могу быстро вспомнить, постоянно хочется сделать QString->number(a) или для чего то ещё заюзать готовые интерфейсы, отвыкаешь что всё делать нужно руками и привыкаешь что для любого действия есть велосипед.
Очевидно, что не будет. Поток который изменяет может увеличить размер строки, тем самым старая память освободится. А если в это время другой поток читает эту строку, то после освобождения памяти он вылетит.
Ну нет конечно, ну блин, пчелик)))))
Ты понимаешь что при изменении строки ты можешь изменить указатель на сами буковки, потому что там мемори риалокейшон.
>>12807
>привыкаешь что для любого действия есть велосипед.
Причём хуёвый. Мне после работы с ASIO qt network показался такой ересью, шо ебал его маму рот.
вот и мне сейчас либо через вебенжин либо через нетворк сделать до конца июня это говно дял яндекса и приступать к диплому)) хз чё делать, наверное буду симулировать монитор)
Просто на стековерфлоу увидел подобный ответ, поэтому был не уверен стоит ли писать мютекс.
In MSVC, std::string is no longer reference counted shared pointer to a container. They choose to the entire contents by-value in every copy constructor and assignment operator, to avoid multithreading problems
>In MSVC, std::string is no longer reference counted shared pointer to a container.
Бля, я поржу если потокобезопасность строки теперь implementation defined
Если бы string был потокобезопасным, то это наверное бы на cppreference указали? Да и вообще помоему в stl нет ни одного потокобезопасного контейнера изкаробки, какой шанс на то, что string вдруг станет таким?
Простой пример
Есть структура
struct Koo
{
int x, y;
}
и структура
struct Size
{
int Width, Height;
}
Есть некий класс с массивом динамическим в котором перечисленны доступные типы
template Cls_Array1D < bool >;
template Cls_Array1D < int >;
template Cls_Array1D < double >;
template Cls_Array1D < unsigned char >;
Хочу так чтобы было
template Cls_Array1D < Koo >;
template Cls_Array1D < Size >;
Каким бобразом это делается?
Простой пример
Есть структура
struct Koo
{
int x, y;
}
и структура
struct Size
{
int Width, Height;
}
Есть некий класс с массивом динамическим в котором перечисленны доступные типы
template Cls_Array1D < bool >;
template Cls_Array1D < int >;
template Cls_Array1D < double >;
template Cls_Array1D < unsigned char >;
Хочу так чтобы было
template Cls_Array1D < Koo >;
template Cls_Array1D < Size >;
Каким бобразом это делается?
Не знаю, я пытался гуглить, там написано что VC++ strings не являются reference counted shared pointer, но там не сказано что это делает их thread safe. Просто типа COW - плохо для мультитрединга. Ну это всё
> to avoid multithreading problems
Это не обязательно значит что проблема была именно с тем что строки были не тредсейф, скорее с оптимизацией.
// do smth
if (!rareStuffDone && rnd(0, 1000000) == 1) {
// do rare stuff
rareStuffDone = true;
}
// do other stuff
А то получается, что этот if вызывается почём зря, если работа уже сделана. Тут одна проверка bool переменной, но все же как-то нехорошо. Было бы круто вообще этот кусок кода выкинуть после выполнения. В прочем, для этого if и нужен, проще скорее всего не сделать. Но вдруг я чего-то не знаю.
Можно конечно, но нахуя?
Сделай 2 функции, в одной будет этот блок с редким кодом, а в другой нет. Создай глобальный указатель на первую функцию и после выполнения ее просто измени значение указателя на вторую функцию. Вызывать соответственно всегда тоже по указателю.
https://ideone.com/fL4R0y
Ты имеешь в виду что do while врапнуто вокруг case? Ну чел бывает...
> Как это работает?
Вопреки здравому смыслу. Сразу видно, что сишка - это в первую очередь сахарок для ассемблера, а не высокоуровневый язык.
> Просто сейчас нет нормальной библиотеки для кроссплатформенных гуёв. Либо электрон, либа эта параша.
А когда они были?
По поводу электрона и прочих это эпичный обсер, казалось бы html/js/css не зависят от платформы но блять на каждую сборку под каждую ос собирать 200мб файл с браузером внутри это пиздец товарищи + на других архитектурах еще более не очевидно, поэтому сама идея пока нежизнеспособна, вот если бы в каждй ос стоял этот ебучий v8 как платформа для запуска таких приложений, как гарантия что он на клиенте есть, можно было бы эти приложения не собирать под каждую платформу а просто передавать как есть в чем собственно и должен быть их плюс, но сейчас этого тупо нет.
> А когда они были?
В нулевых, назывался winapi. Поддерживал все платформы, на которых тогда люди сидели.
> На каждую сборку под каждую ос собирать 200мб файл с браузером внутри это пиздец товарищи
Ну поставь себе 16 гб и не еби мозг. Электрон юзают не потому что он хороший, а потому что остальное говно. Да и электрон мобилы не поддерживает, а надо бы...
Охуенно, зашёл блять на страничку а там про негров.
Зато почти везде есть браузер. Единственный реальный способ сейчас сделать пооностью кроссплатформенный гуй -: сделать приложение в виде обычного сайта и всем давать на него ссылку. Ну или везде ставить локальный веб-сервер, как питоний jupyter-notebook.
А на электрон забить нахуй, в конечном итоге он ничем не лучше Qt, но намного прожорливее. Сама идея запускать по браузеру на каждую мелкоприложуху никак в 2020 не вписывается. Может, лет через 5-10.
мимо
> Единственный реальный способ сейчас сделать пооностью кроссплатформенный гуй -: сделать приложение в виде обычного сайта и всем давать на него ссылку.
Лел, только электрон кроссплатформенный среди линух мак винда, а на мобилку или плейстейшон нельзя.
В то время как qt чуть ли не на тостере работает
Хуле ж ты споришь? i = 5. После свитча код переходит к case 1, и i инкрементируется. А дальше цикл.
Тебе --n что-нибудь говорит?
Ну хз, тенденция идёт наоборот. Нативные браузеры в мобилках - говно. Народ всё равно в vk, facebook, instagram и даже в банковской хуйне сидит через приложения, а не через бровсер. Да и я тебе скажу сделать мобильное приложение которая api-ху дрючит не сложнее чем сделать сайт который мобайл френдли.
>Народ всё равно в vk, facebook, instagram и даже в банковской хуйне сидит через приложения, а не через бровсер.
Не так давно перешел с обычного телефона на смарт и меня это как раз поразило.
И в результате у юзера на телефоне вместо одного браузера стоит несколько десятков однообразных приложений доставок, магазинов, клубов, кальянных, суш, баров, кафешек занимающих дохуя места и запускаемых раз в полгода. Не знаю, что будет в будущем, но текущее положение дел явно не выглядит здоровым.
Ну, ещё есть тенденция делать "гибридные" приложения, по сути тот же подход электрона, но для мобилок.
> И в результате у юзера на телефоне вместо одного браузера стоит несколько десятков однообразных приложений доставок, магазинов, клубов, кальянных, суш, баров, кафешек занимающих дохуя места и запускаемых раз в полгода.
А шо ты хотел. Там в интерфейсе никто не ограничивает, а ещё и работает быстрее так как вместо жирного запроса с тоннами гиппертекста дергается апиха.
>>13210
Рофел с самого факта использования ГСЧ
Есть две структуры отснаследованные от кучи других, при этом у них есть одна общая.
Как наиболее правильно приравнять эту общую, чтобы не сломались какие-то ссылки, указатели или любые другие данные?
А как ещё, если нужно именно случайное срабатывание, а не на n-й раз?
Из идей у меня только миллисекунды от текущего времени брать, но это как-то костыльно. Хотя, работать может и быстрее, наверно.
Я не сильно много делал гуи, но сейчас, я думаю, наилучший путь - веб-морда и REST с mvc паттерном. Qml так-то тоже идёт путем mvc, мне это нравится, хорошо отвязывается бэкэнд от гуя со свистоперделками и анимацией, и отличная кроссплатформенность вдобавок
Я както решил порисовать, но понял, что в 2к20 сильно использовать ООП (а uml как раз про это) не самый здравый подход. Сейчас мой код имеет много функциональщины и композиции с простыми, мелкими и понятными функциями, и с достаточно простыми типами, и юмл избыточен, так как архитектура проста, а вся связь описана в @brief
Используй std::uniform_real_distribution, диапазон 0:1, сгенерированную вероятность сравнивай с вероятностью твоего говна (у тебя 1e-6), это будет правильный подход.
ну, так-то да.
> if вызывается почём зря
Процессор оптимизирует эту хуйню (branch prediction). Если тебя волнует оптимизация то лучше постараться уменьшить количество вызовов ГСЧ - даже если у тебя там простой линейный конгруэнтный или (в идеале) xorshift - они быстрые но все равно вносят задержки. Один из вариантов - сразу сгенерировать номер итерации на которой на которой нужно сделать редкую хуйню, а в цикле просто инкрементить счетчик. Но тут нужно осторожно так как два этих подхода не равноценны - у них разное распределение, подход с заранее вычисленной итерацией гарантирует максимум итераций через которую произойдет срабатывание тогда как твой подход таких гарантий не дает. Поэтому смотри по производительности. Если ускорять не нужно - то лучше использовать твой подход.
> Процессор оптимизирует эту хуйню (branch prediction).
Только после нескольких исполнений и если бранчь обсирается то начинает профилировать заного.
>>12987
Можно вот так вот оптимизовать:
bool rareStuffDone = false;
...
rareStuffDone ^= (rnd(0, 1000000) == 1) >> rareStuffDone;
сбственно:
^= true >> false; // 1
^= false >> false; // 0
^= true >> true; // 0
то есть регистр перевернется один раз и все. Но к твоему случаю это не очень подходит, подправь алгоритм.
Ну как ты делаешь связь с бэком - это уже другое дело. Если приложение клиент-серверное, то тогда как ты сказал. Если нет, то преложение в виде демона с отдельным гуём.
У Qt хороший гуй, я бы даже сказал самый лучший на рынке среди всех. Лучше gtk, лучше uwp, лучше электрона, лучше чего угодно на свете. Но есть одно "но", Qt это не библиотека для гуя, это general purpuse framework. Но вот кроме гуя мне отних больше нихуя не надо, а они наворотили кала и экосистемы, переписали весь stl, какой-то свой DSL на макросах нахуярили. Зачем?
Только если у тебя C++03. В новых крестах stl-контейнеры в разы лучше q-контейнеров
https://stackoverflow.com/questions/1668259/stl-or-qt-containers
Да и модерн-спп они в попу ебут. Вообще, C++ такой тупой язык что там string_view только совсем недавно появился.
Если честно, кресты так плохи что я бы на этом писал...
> Только если у тебя C++03. В новых крестах stl-контейнеры в разы лучше q-контейнеров
Кулстори. В стл и половины функциональности нет. После qstring стд та еще боль
Ну так отвяжи свою суперлибу от qt. Нужен гуи - используется qt, не нужен - не используется. Предположу, что консольная версия vlc плеера (я ее использую для стрима юсб камеры) вообще не использует qt
> В стл и половины функциональности нет
В std лучше оптимизация по времени. Но строка там да, хуйня. Надо юзать folly. Folly - вещ.
А qt-шные поделия по скорости работы - боль и унижения.
>>13875
>Ну так отвяжи свою суперлибу от qt.
>Нужен гуи - используется qt, не нужен - не используется
А все так и делают.
> Предположу, что консольная версия vlc плеера (я ее использую для стрима юсб камеры) вообще не использует qt
Можешь не предполагать, она точно его не использует. Core написан на чистом си, а интерфейс на кутэ.
Но опять же, так делается не столько от хорошой жизни, а от того что qt пидорское говно, но другого интерфейса нет.
>небольшая программа весит 100мб
Если статически слинковать - меньше 20Мб. С upx - около 10. Если новые плюшки не нужны, то 4.8 около 5Мб c upx занимает.
>В новых крестах stl-контейнеры в разы лучше q-контейнеров
Чем лучше? В qt все гораздо удобнее, человекоориентированнее. Например, у QMap есть метод value(key, defaultValue), который вернет дефолтное значение, если ключ не найден. У std::map только find, возвращающий итератор.
>Можно гайд по этому всему?
В инете куча инфы, если гуглить "qt статическая линковка" (хотя и устарелой, большинство статей по Qt4, но принцип должен быть понятен).
UPX - утилита для сжатия exe: https://github.com/upx/upx/releases
Да, UPX умеет и dll сжимать. То есть даже если динамически линкуешься, можно размер поменьше сделать.
Заинтересовала обработка сигналов. Что для этого нужно знать и уметь?
>Там китайцы работают в основном, и белых они не любят
В московском R&D центре в основном только китайцы работают?
Вроде как слышал, что наших студентов в хуавей приглашают работать.
Пиздеж, кстати. Но без нормальной вышки туда попасть будет сложно, они на собесах трепетно к этому относятся. И английский надо знать на уровне повыше "я прочитал документацию с гуглтранслейтом" знакомый пистех на этом прогорел.
В Нижнем Новгороде 90к платят стажёрам, кстати. Жаль больше не нанимают.
Бамп.
Показывай код
Там по чистой случайности будет работать, как если бы был return. foo(a-1) оставит результат в регистре и он вернется.
Странно, что у него vs его собрала, а когда я пытался это в оноайн компилятор загнать меня послали нахуй
Неужели бывают пистехи, которые не умеют в англ?
По чистой случайности же. В дебаге скорее всего просто в регистре последнее вычисленное значение остаётся, оно и возвращается. Попробуй в конце "вернуть" что-то больше твоего инта и пиздец будет даже на дебаге. В релизе компилятор посмотрит, что ты еблан и либо вернет то же самое, что и другой return, либо вообще какую-нибудь хуйню. УБ всё-таки
start
stop
start
stop
start
loading
play...
блять хочу сразу файл открою, хочу не сразу, че почему - хуй вообще знает
в итоге там че то делал уперся в какую то хуйню, тут какая то хуйня, там это ебаное метопрограмирование фокусы начало показывать (где то ссылку на переменную поставил она динамично меняется и че то не так все работает, но что и как найти тяжело в этой лапше жопу бомбит пиздец лол).
В общем ебатни много а прогресса мало.
Действительно, g++ компилирует. Функция возвращает значение последней строки функции как в Ruby, если компилятор не выкинет его в процессе оптимизации .
Ну и язык, они кусок кода ахуительней другого просто.
Вывод пикрил:
5 4 3 2 1
foo returns 364
Как это вообще в компилятор дошло?
return завершает текущую функцию и управление возвращается в то место, откуда она была вызвана. Если foo вызывает bar, то foo останавливается и выполняется bar. После того как bar завершилась (например, с помощью return), выполняется код, который идет в foo ниже вызова bar. Так должно быть, хотя теперь я уже ни в чём не уверен.
Начало любой книжки по ассемблеру.
В изначальном примере работало потому, что вычисления в функции никак не зависели от возвращаемого значения. С факториалом такой фокус уже не пройдет
А можно сразу интеловскую доку.
Что значит запустить? Запустить приложение? Как обычно, скопировать DLL рядом с exe.
Запустить сборку? Без задней мысли открываешь папку с cmakelists.txt и фиксишь ошибки
Это undefined behavior. Наследие сишки, где по-умолчанию везде int был.
https://wiki.sei.cmu.edu/confluence/display/cplusplus/MSC52-CPP.+Value-returning+functions+must+return+a+value+from+all+exit+paths
Вот это рабочий сишный код:
sum( a, b ) {
return a+b;
}
https://godbolt.org/z/JwGMnk
Почему можно? Просто я когда видеоурок смотрел, долго вдуплял, почему cout << *pointer; выводит значение ptr без обращения к методу operator.
Просто потому, что альтернативный синтаксис для этого. Это как arr[x] и ★(arr + x)
Ну, ещё через синтаксис operatorX можно определить указатель на такой метод:
int (★A::fp)(int) = operator★;
С "сокращённым" синтаксисом так не получится.
Сразу видно нормального человека, который не сидит в МВП-треде.
https://www.youtube.com/watch?v=0GIcP6xvW5Q
А, я понял, "мы вам перезвоним". Ну тут ты ошибся про нормальность, я там не сижу, потому что знаю, что никуда не возьмут.
У меня всё падает с -O2, -O3 или -O1 и работает с -O0 - и всегда так было.
Твой код так же и нихуя там не остаётся в регистре. По этой причине я не выключаю -O1 никогда.
Какие флаги? Подскажи плз
Если функция не возвращает значение когда должна - то это ub, а не проблема в флагах - потому что компилятор никаким образом не может догадаться какое значение вместо возвращаемого подставить.
Вообще разработчикам компилятора стоило бы просто сделать так, чтобы компилятор выпадал с ошибкой при подобном вместо предупреждений на который никто не смотрит. Сразу треть ub в окно вылетит.
Когда ты точку с запятой забыл поставить, компилятор высирает ошибку, хотя научить его распознавать когда они необязательны проще простого (в других же языках это как то делается), тем не менее это категорически никто не делает, потому что это нарушение стандарта языка. А тут значение забыл вернуть похуй компилируем.
Это явно где то проеб в компиляторе, а если еще оптимизации код ломают то еще и в них.
Правила дорожного движения это религия? Или техника безопасности?
Пиздец блять и вот такие люди пишут код.
>А тут значение забыл вернуть похуй компилируем.
>
>Это явно где то проеб в компиляторе, а если еще оптимизации код ломают то еще и в них.
return не обязателен, если функция не возвращает управление.
Кунпелятор не может доказать, что управление возвращается, поэтому он только выдает предупреждение:
ex.cc:2:5: warning: control reaches end of non-void function [-Wreturn-type]
foo(a-1);
~~~^~~~~
>вернёт default constructed
В Qt можно задавать это значение. То есть чтобы возвращалась -1 вместо нуля для интов.
> return не обязателен, если функция не возвращает управление.
А нахуя тогда вводили noreturn?
>return не обязателен, если функция не возвращает управление
Славик, ты опять не принял таблетки? А ну иди сюда быстрей, мама сейчас даст тебе за щеку сосалку
typedef bool (class_name::method_name)(int arg);
А могу вот так:
typedef bool (class_name::type_example)(int arg);
Тогда pointer не будет частью typedef и нужно будет указывать это явно.
Как сделать аналогично с using?
Так работает:
using type_example = bool(class_name::)(int arg1);
Но как сделать без указателя?
Ну-ка, умник, объясни, зачем в языке нужна сущность, которая явно указывает на то, что функция не возвращает управление, но при этом по умолчанию оно так и работает, хотя это в 99.99% случаев является ошибкой.
Тоже не пойму auto до c++11.
ЕМНИП символ, определенный как weak линкер не обматерит при переопределении, а заменит на новый. Типа есть какая-то дефолтная реализация, и ты можешь написать свою, а можешь не писать.
Видел такое один раз, в какой-то либе для МК.
Не обязательно.
На x86 тоже существуют alignment requirements, где required align for certain type is > 8
При этом вручную использовать всякие avx2 не обязательно, иногда достаточно попытаться собрать свой проект с -O3 и увидеть, что работать, внезапно, перестало, так как структуру ты запаковал, а компилятор всё равно охуел.
enum добавь
Это сишка? Так только на плюсах можно, в сишке обязательно писать "struct", "enum" и "union" перед типами. Ну ли определи синонимы через typedef.
Это я в курсе естественно.
>>15083
Нет, никаких simd, просто несколько структур для сохранения в файл.
>-O3
Он разве не должен сам скомпилировать без побочных эффектов с более медленной инструкцией загрузки невыровненных данных, если там стрёмный указатель и информацию про выравнивание он получить не может?
Можешь в общих чертах описать что примерно нужно сделать, чтобы корректный код работал некорректно из-за автоматических simd в O3? Хочу получить это ошибку явно, если она существует - потому что я с O3 компилю всё.
>>15102
Просто в объявлении пиши сразу typedef enum hgfsd{} hgfsd;
> А функции, не возвращающие управление, существовали со времен деда Томпсона.
Перестань говорить слова смысл которых не понимаешь.
Возврата управления нет, есть передача управления и возврат. Это машинные команды и к коду на с/c++ они не имеют отношения. В функциях на си ты пишешь ретерн что бы выплюнуть тип либо выйти из функции где то в середине кода. Машина работает ровно наоборот - ей надо говорить явно куда перейти (куда передать управление), а обратно она вернется сама. И так до тех пор пока не кончится вся цепочка исполнений идущая от ядра и машина просто встанет
Бля, развлечения каждый день.
В прошлом треде нас посетил O(2n)-шизик. А сейчас спешите видеть и обучаться подробностям "цепочки исполнения идущей от ядра". Но осторожней! Она закончится и машина встанет!
Ну во-первых, для возврата из функции нужен собственно адрес возврата, предварительно положенный в стек.
Остальную твою хуйню мне даже читать лень.
> мнум...пук..ну вот как бы ну вот там стек и там адрес возврата как бэ есть а там все дальше понятно.
А что будет если не будет адреса возврата на стеке?
>Он разве не должен сам скомпилировать без побочных эффектов с более медленной инструкцией загрузки невыровненных данных
Должен, но я в некоторых версиях gcc/g++ наступал на баг, когда он этого не делал
Пизда рулю и седлу будет.
> Будет jmp
Но ведь функции без "возврата управления"..
как же так? Машина получается все равно куда то возвращается и куда все возвраты идут?
Можешь не отвечать а идти сушить одежду от своей же струи мочи пущеной против ветра.
void f()
{
}
И забыл в ней написать return. И короче КОМП РАСПИДОРАСИЛО.
Вы согласны, что оба примера подпадают под композицию?
Я согласен только с тем, что тупые терминологические разглагольствования ничем не лучше задрачивания всех паттернов и несколько десятков видов сортировок и деревьев. ООП-теоретики напридумывали кучу лишних терминов, когда в реальности их названия никто не вспоминает, и если кто-то написал код, попадающий под одно из определений, почти 100% он даже не вспоминал, как именно это называется.
Ладно, я перефразирую вопрос. Если я создаю в конструкторе класса объект другого класса через оператор new, то вложенный объект будет уничтожен вместе с объектом первого класса, верно?
Не обязательно, ты можешь потом указатель на объект второго класса передать куда угодно, и он там сохранится и будет валидным, когда объект первого класса удалится. Ну разве что сделать delete второго объекта в деструкторе.
Ну в qt там родительский виджет удаляет все связанное с ним дерево, я забыл уточнить эту деталь.
В Qt есть какой-то сборщик мусора. В общем случае в C++ его не будет.
Почему нет? Кликаешь, скачивается установщик (сам, без уебанских ссылок на сайт, открываемых в браузере), детектит, что программа установлена, и предлагает обновить. Далее - далее - готово. Ну или делать то же в фоне без участия пользователя, прога запустит установщик сама и завершится, а установщик сделает всё автоматически.
>Но ведь функции без "возврата управления".. как же так?
Ну вот тебе самый простой случай, покормил.
f(){ f(); }
Что захочешь, то и будет. Ты же у нас на ассемблере пишешь в обход call, ret и прочих предрассудков для быдла. А конпелятор сишечки всегда кладет адрес возврата в стек перед вызовом и всегда делает return перед }, если ты сам не сделал, и в случае, если функция не void, вызывающий код получит содержимое rax.
хуй знает, а чем ты, но из определения вот этой хуйни O(...) следует, что никакие константные множители не меняют значения, стало быть, излишни
Вариантов много. Смотря что тебе нужно. Qt, opengl, sfml и тд.
> конпелятор сишечки всегда кладет адрес возврата в стек
В рот он тебе залупу кладет, компилятор в файлы компилирует, а стек он в памяти находится, это тупо формат данных котором машина понимает где что находится (агрументы/адреса локальные данные) и до каких пределов.
Как ты вообще себе представляешь адреса куда-то записывать? Откуда ты знаешь какой адрес будет у функции пока ты ее в память не загрузил? Ни ты ни компилятор ни машина не знают этого, а только только знают под каким ковриком он должен лежать си под каким ковриком будут свой держать.
Вообще эти разговоры в железяче должны быть, тут им не место, тут высокоуровневый язык не имеющий отношения к железу и стекам. На эльбрусе вон вообще стеки разделенные - аргументы и возвращаемые значения отдельно в одной области памяти, адреса возврата в другой вообще, локальные данные как обычно просто друг за другом, и как то блять плюсовый код на нем компилируется запускается.
Ну хорош)) Тут перетолстил уже.
Очевидно же, тот анон имел в виду, что компилятор пишет код, который кладет в стек адрес. Обычно это сводится к правильной расстановке call и ret.
>Откуда ты знаешь какой адрес будет у функции пока ты ее в память не загрузил?
Адреса функций в таблице символов экзешника лежат, и они всегда одинаковые, потому что виртуальная память.
Полный пиздеж. В бинаре вообще может не быть символов, абсолютные адреса могут быть разными от запуска к запуску из-за аслр
Ты тоже гавно
Абсолютные адреса неизвестны в момент исполнения, да, но есть такая вещь как относительные джампы, чтобы передавать управление относительно текущего места, а жто уже изи рассчитывается в компайл-тайме
Плюс если аслр отключен, то все абс адреса также не изменяются на этапе компилирования
ASLR работает только для PIE. К тому же ты все равно можешь посчитать адреса функций перед запуском, если знаешь смещения в ASLR.
Паем возможно сделать любую прогу, для этого есть релоки
Если базовый адрес неизвестен до запуска, вычислить его правильно у тебя получится если ты - ванга, и если так совпадет, что аслр будет грузить модули каждый раз по одним и тем же адресам, вероятность чего даже меньше чем твой писюн
Нихуя не понял. Мою собственную программу как обновлять?
Не обязательно копировать, но да, все байты после середины придётся двигать, начинать с конца.
Кажись беруь всякие типо рандномные параметры компа. Тмпа температуры процессора, время отклика и тд
Способов много. Например, юзать аппаратный генератор, ну или создавать несколько тредов, измерять среднее время выполнения и брать наименее значащие цифры. А в простейшем случае - функция типа rand_value = (A*rand_value + B) % MAX, где заранее подобраны хорошие A и B.
https://ru.wikipedia.org/wiki/ГПСЧ
Безопасно в плане не похерить данные? Если операция не прервётся, то вполне.
А если может прерваться (программу убили, питание отрубилось), можно заранее сохранять бекап. Ну или просто позицию, до которой успели докопировать.
Орнул
Установить далёкие координаты, чтобы окно не влезло на рабочий стол. Правда, в панели задач останется, но это мелочи...
Да сразу моник вырубить для верности
>переключиться на другой рабочий стол
А как сразу запустить программу на другом рабочем столе и вообще переключить его? Я хочу что-то вроде desktops.exe (который от sysinternals), но со своими фичами.
> Абсолютные адреса неизвестны в момент исполнения, да, это правда, но нужно учитывать что у каждого процессора интел есть приусадебное хозяйство относительные переходы.
Окей я понял, только я отвечал про стек, в файлах нету стека.
Во вторых ежу понятно что там или локальные/виртуальные адреса какие-то, выравненно все располагается или еще что-то, иначе б не работало нихуя.
> выводятся кракозябры
Что выводится зависит от используемого шрифта. Пиши конвертер из твоей хуйни в юникод, и выводи на что-то поддерживающее юникод.
Тебе в паскаль-тред.
Есть что-то подобное для с++ (желательно без установки sdk на 10 гб и тысяч строк кода в программе), что позволяет из какого-то языка скомпилировать (это важно - интерпретируемые скрипты вообще не подходят из-за быстродействия) в машинные коды функцию в райнтайме? Нужна только работа с математикой и возможность ограничить явное выполнение произвольного кода с доступам к файлам, сети и всего такого прочего (без фанатизма - решать проблему с доступом к чужой памяти не обязательно). Что-то на уровне возможностей шейдеров glsl (си без рекурсии и ещё с некоторым ограничениями) будет достаточно, просто чтобы можно было функции и структуры использовать.
Есть идея прямо на ходу компилить dll-ку через gcc, но я не знаю как это сделать в линуксе (и какой-то там вообще аналог dll) - и не очень знаю как там организовать ограничение доступа к файлом, будет ли достаточно просто все файлы кроме math.h удалить. В общем, посоветуйте что-то, пожалуйста.
Без десятикратной потери производительности добавить возможность что-то делать с вводимой (математической) функцией без перекомпилирования?
>>16984
Угу, он и есть.
Но нужны структуры и функции. Желательно с синтаксисом си, и желательны перегрузки операторов и методы - но их я на стадии препроцессора могу сделать может быть. А вот компилятор не смогу.
Пишешь текст на сях в файл. Вызываешь
cc -fpic -shared -Wl,-soname,libmy.so /tmp/file.c
Подгружаешь библятеку с помощью dlopen, получаешь адрес функции. Перед вызовом функции делаешь chroot в пустую директорию.
Это к тому, что здесь тоже можно написать функцию eval(), следовательно, кресты - такая же динамическая дрисня, как js и пхп.
ну ты можешь вообще влепить libclang и JIT'ить код. Да. Но нахуя?
В qt встроен jit компилятор жопаскрипта, возможно тебе подойдёт. Я им в файлы настроек скрипты включаю.
Подскажите идею для петпроджекта чтобы с многопоточностью и всеми этими современными хуёвинами чтоб.
Я думаю что я пересечение множеств долго считаю. Надо юзать set_intersection
Смотри параметр arch и интринсинки
И ещё некоторые
Оно издевается в общем - я не кликал отправить, и не выделял через таб кнопку - чтобы оно по нажатию enter отправлялось.
И ещё некоторые фичи сомнительны, можно в некоторых местах его отключить, чтобы он никак ничего не трогал - а оставил как есть?
Хуйня шланг формат этот, ставь решарпер, там куда удобнее сделано и настроек больше.
Ничего, не clang-format же. Там же сам clang можно просто для разбивки на токены использовать.
>>17302
Он с ide не стыкуется. Ещё и платная хрень от моей нелюбимой компании.
Написано только про плагины для студии. А у него есть консольный интерфейс, просто запиратить и посмотреть как оно? Меня вполне устраивает форматирование через батник пару раз в день - интеграция с ide и не нужна в общем-то.
Причем здесь шланг и шланг формат?
Так иди тогда через вим пердоль и ручками код форматируй, хули ты выебываешься? Если хочешь как у людей, то качай норм иде.
Почему бы не использовать boost asio для p2p? Это же можно, или я чего-то не понимаю? Или asio для этого не подходит?
Где-то во врезках было, кажись у Липмана, что разница есть: постинкремент создает временный объект; соответственно лучше его не пользовать, там, где фактически не нужен его побочный эффект.
Вопрос: лучше сделать umap от ключа size_t и внешне считать хэш, или прям матрицу сувать туда как ключ? Второй вариант удобнее, но первый как-то выглядит быстрее, так как хэш явно посчитается один раз
umap внутри не моей либы кеша, глубина типа 256 элементов. С хешем в 32 тем более 64 бита быстрее метеорит меня убьет
Почему в мире крестовиков что ни возьми - найдётся дохуя хейтеров этого? WinAPI параша, POSIX API параша, Boost параша, Qt параша, STL параша, COM параша, MFC параша, OpenGL параша, Vulkan параша, OpenCV параша, только C с классами норм.
Ну смотри, WinAPI правда пиздец говнище говна. Qt тоже говно. Всё говно кроме гуя.
POSIX норм, но лучше юзать стандартные std или boost враперы.
COM тоже говно.
wget+tar+cmake.
curl+make
Что думаете об этой конторе? Вроде как интересные задачи, делают геометрию для сапров типа компас-3д и других менее известных.
И как вообще на рынке дела с разработкой сапров и прочего софта для инженерного анализа?
>Что думаете об этой конторе?
ХЗ, видел на конференции пару челиков оттуда. Вроде норм, если угораешь по дифференциальной геометрии и прочему трешу.
>>18749
>И как вообще на рынке дела с разработкой сапров и прочего софта для инженерного анализа?
Цветет и пахнет. Не лезь дебилсукаебаный, оно тебя сожрет
>оно тебя сожрет
А чому так?
Вообще работы не особо много в этой отрасли, но все равно кажется интересным.
>The internal default function will write the data to the FILE * given with CURLOPT_WRITEDATA.
std::string readBuffer;
curl_easy_setopt(easyhandle, CURLOPT_WRITEDATA, &readBuffer);
Qt это фактически другой std, да еще и с гуями.
Некоторые так вообще его считают лучшим по сравнению с std.
Я как-то работал в конторе, в которой была написана полностью самодельная стандартная либа, все ебучие контейнеры, все кроссплатформенные обертки для потоков и всего остального, и даже UI. Ах какие они были молодцы, но наверное загнулись уже сейчас.
Представь приложение для голосовой конференц-связи, размером 600килобайт. Теперь иногда с теплотой вспоминаю, жаль что в те времена не оценил как там было круто.
>как вообще на рынке дела с разработкой сапров и прочего софта для инженерного анализа
Аскон, t-flex, больше ничего относительно крупного не знаю.
И то, аскон в рязане/коломне/нижнем держит свою основную разработку, а не в москве.
Особо много вариантов для трудоустройства нет.
Vcpkg
> А чому так?
Хз, анончик видимо ни разу не разрабатывал САПРы
Имхо, разработка САПРов - это лучшее, что есть в современном it
брат жив, зависимость есть
>Имхо, разработка САПРов - это лучшее, что есть в современном it
>брат жив, зависимость есть
Как вкатиться? И какие возможности для карьеры в студента в Москве?
Вообще слышал, что сапры - очень консервативная отрасль, это правда?
Почему оно вылетает когда пишу char* buffer = new char[10000];
curl_easy_setopt(handle, CURLOPT_WRITEDATA, buffer);
????
> Как вкатиться?
Как и в другие конторы: оставляешь резюме, получаешь тестовое задание, идёшь на очное собеседование.
> И какие возможности для карьеры в студента в Москве?
Что ты понимаешь под карьерой?
> Вообще слышал, что сапры - очень консервативная отрасль, это правда?
Не понял, что значит "консервативная"?
>Что ты понимаешь под карьерой
Стажировки, вакансии для джунов. Хотя бы это пока что.
А то в области сапров этого я почти и не видел, по крайней мере на хх уж точно. Даже непонятно, как искать такую работу кроме как у очевидного аскона.
Все. Починил. Оказывается пробелы в строке запроса очень важны
Странно, мы периодически публикуем вакансии, однако наоборот никто почти не идёт ((
Джунов не мурыжим, обучаем
про стажировки - надеюсь ты имеешь ввиду оплачиваемые?
Интересно, какие доходы у разработчиков сапр?
Я вообще из мира джавы, просто интересно, сколько платят людям за знание геометрии/вычмата/оптимизации/сопромата/etc
Кто-то говорил, что даже до средней до рыночка не дотягивает и люди годами работают за условные 100к в мск.
Это так?
> Ты из c3d? Вы же в коломне, а не москве?
Не скажу, деанон травля
>>18973
> знание геометрии/вычмата/оптимизации/сопромата/etc
Это только джависты думают, что это всё надо. Джуном можно идти с одной только геометрией уровня "знаю как загуглить уравнение прямой на плоскости". Всё, что ты перечислил, знают специально обученные люди, которые в случае чего тебе всё объяснят и проверят.
если тебя в конторе заставляют это всё учить, значит твой босс этим летом поедет в охуенный отпуск за твой счёт
По деньгам - да, с жабой не сравнится, но медиана есть медиана
А какой стек желательно знать, чтобы с большой вероятностью вкатиться?
Помимо очевидного C++, STL, алгоритмов и общих скиллов типа гита?
И как гуглить вакансии? По условным "C++ cad cam", "C++ сапр", и т. д hh выдает только пару вакансий во всей Москве. Я что-то не так делаю?
Сейчас пишу высокопроизводительную программу, и в интернете очень много советов типа не использовать STL, не использовать динамическую память, не использовать мьютексы. А как тогда писать сложные и крупные программы? Открываешь книги по плюсам, и там всегда Hello World, что такое указатели, что такое STL. Что почитать, чтобы научиться писать код без всего этого?
Как будто бы и да, но тогда возникает вопрос: а зачем тогда вообще нужны плюсы? Вот прямо сейчас смотрю книгу Солтера/Кеплера, и они пишут: плюсы круто, мы писали супер производительный код чисто на плюсах, не на си. Но советов каких-то нормальных я там пока не вижу.
> А какой стек желательно знать, чтобы с большой вероятностью вкатиться?
Того, что ты перечислил хватит. Но знать нужно достаточно уверенно. Язык уж точно.
> И как гуглить вакансии?
Попробуй что-нибудь инженерное дописать или без сокращений "проектирование"
> hh выдает только пару вакансий во всей Москве
Да их в принципе немного
> исходники любых крупных библиотек
Каких?
хромиум идет нахуй, это пример того, что получается, если жс-блядь добирается до конпелятора
Как это не использовать API операционных систем? Без использования API ОС все, что ты можешь делать, это заранее выделенную память менять, кек.
Не использовать темплейты ещё не значит не использовать C++. В плюсах есть классы, неймспейсы, более вменяемые строки, лямбды и прочее (нет).
С с классами тоже параша.
1) юзер желательно должен иметь возможность собрать либу с минимальным гемором, поэтому буст, как правило, отваливается.
2) если либа предполагает использование из других языков, то интерфейс всё равно будет на С. То есть, как ни крути, придется работать с указателями, буферами, кастомными функциями аллокации, т.д. Оборачивание всего этого в крестоконтейнеры только всё усложнит.
3) если либа крупная, то она, скорее всего, ещё и старая -- это означает устаревшие подходы.
Ничего, тащемта, просто хотел сделать разными способами одно и то же. Хотя, уверен, кто-то может ещё больше извернуться.
Не шарю, но похоже на псевдокод вывода параметров в консоль.
Многоточие, которое мы заслужили.
Эх прям как жс, хуяк и новый стандарт с лямбдами и классами, сначала противишься плюешься потом ну вот в таких случаях буду писать так шоб без фанатизма, а потом как ебанутый тыкаешь это везде, по старому пишешь только в особых случаях.
Чет начинаю уже полюбливать плюсы.
Я знаю. Я в ахуе именно от троеточия внутри самой функции, где cout
auto в лямбдах тоже самое что template
Лямбда с auto параметрами в данном случае просто превращается в шаблонную функцию.
Ничего сложного, что-то типа
template<class... Ts>
void print(Ts args...)
Самый жыр тут в pack expansion. Как сказано в стандарте,
A pattern followed by an ellipsis, in which the name of at least one parameter pack appears at least once, is expanded into zero or more comma-separated instantiations of the pattern, where the name of the parameter pack is replaced by each of the elements from the pack, in order.
На пальцах, это значит, что ... размножит предшествуещее ему выражение для каждого параметра, подставляя этот параметр вместо имени пака.
На цппреференс приводятся такие примеры
f(&args...); // expands to f(&E1, &E2, &E3)
f(n, ++args...); // expands to f(n, ++E1, ++E2, ++E3);
f(++args..., n); // expands to f(++E1, ++E2, ++E3, n);
f(h(args...) + args...); // expands to f(h(E1,E2,E3) + E1, h(E1,E2,E3) + E2, h(E1,E2,E3) + E3)
Код с пикрила разложится как
((cout << "Hello" << "\n"), (cout << "World" << "\n"), (cout << 123 << "\n"), (cout << 3.14159265 << "\n"));
что вполне легальное выражение, т.к. оператор запятая возвращает свое значение справа которое потом игнорируется и это тоже валидно
Вот и всё. При помощи этой фичи можно писать ещё большую шизу.
Так например можно унаследовать класс от неопределенного количества базовых и прокинуть их операторы или конструкторы.
template<class... Bases>
struct S : Bases...
{
using Bases::operator()...;
};
Лямбда с auto параметрами в данном случае просто превращается в шаблонную функцию.
Ничего сложного, что-то типа
template<class... Ts>
void print(Ts args...)
Самый жыр тут в pack expansion. Как сказано в стандарте,
A pattern followed by an ellipsis, in which the name of at least one parameter pack appears at least once, is expanded into zero or more comma-separated instantiations of the pattern, where the name of the parameter pack is replaced by each of the elements from the pack, in order.
На пальцах, это значит, что ... размножит предшествуещее ему выражение для каждого параметра, подставляя этот параметр вместо имени пака.
На цппреференс приводятся такие примеры
f(&args...); // expands to f(&E1, &E2, &E3)
f(n, ++args...); // expands to f(n, ++E1, ++E2, ++E3);
f(++args..., n); // expands to f(++E1, ++E2, ++E3, n);
f(h(args...) + args...); // expands to f(h(E1,E2,E3) + E1, h(E1,E2,E3) + E2, h(E1,E2,E3) + E3)
Код с пикрила разложится как
((cout << "Hello" << "\n"), (cout << "World" << "\n"), (cout << 123 << "\n"), (cout << 3.14159265 << "\n"));
что вполне легальное выражение, т.к. оператор запятая возвращает свое значение справа которое потом игнорируется и это тоже валидно
Вот и всё. При помощи этой фичи можно писать ещё большую шизу.
Так например можно унаследовать класс от неопределенного количества базовых и прокинуть их операторы или конструкторы.
template<class... Bases>
struct S : Bases...
{
using Bases::operator()...;
};
> f(h(args...) + args...); // expands to f(h(E1,E2,E3) + E1, h(E1,E2,E3) + E2, h(E1,E2,E3) + E3)
Мда
Выражения свёртки, есть давно во многих языках.
https://ru.m.wikipedia.org/wiki/Выражения_свёртки
Тащемта в данном конкретном случае это не fold expressions, а pack expansion. Разница есть. Это ДРУГОЕ, надо понимать
Не знаю почему, но без инициализации *pupaM всегда возвращает одно отрицательное число, хотя там мусор должен быть. Это специфика такая, или у меня оперативка одними числами забита?
>*pupaM всегда возвращает одно отрицательное число
Ну совпало так. Перезагрузи компьютер, или погоняй его, чтобы память засралась разными данными из разных программ - и будет другое.
Он просто попадает в одну и ту же область памяти, судя по всему, и в этой области лежит одно и то же значение в этом сеансе.
>Перезагрузи компьютер, или погоняй его, чтобы память засралась разными данными из разных программ
Перегрузил, забил всю оперативку, все равно одно и то же значение -842150451.
printf не в курсе, какие типы хавает, а эта хрень в курсе, сама цепляет нужные перегрузки
Твое -842150451 это 0xCDCDCDCD в шестнадцетиричном виде, думаешь совпадение?
В дебаге, покрайнем мере в студии, после new выделенную памаять записывается специальное значение чтобы было проще найти неинициализированные переменные.
А хуле не так-то?
Не скачивать с сторонних сайтов?
Не нужно качать со сторонних сайтов. Найди в своём каталоге Qt либы, на отсутствие которых он ругается, и положи их рядом с экзешником.
Запусти qtwindeploy или windeployqt, как-то так называется утилита,
1. в PATH пропиши путь к этой утилите.
2. потом в каталоге где у тебя собрался exe:
qtwindeploy yourexename.exe
и оно подтянет туда всё дерьмо, включая дллки переводы и прочее-прочее-прочее - будет готовый бандл, который уже можно хоть в инсталлер пихать и распространять.
Про все есть порно. Без исключений.
Понятно. Вообще, эта ошибка гуглится: https://www.cyberforum.ru/qt/thread1968544.html
Вероятно, у проги и либ Qt разная разрядность. Ну или у компилятора.
Да. Или всё x64.
Он часть не копирует - те которые не кютешные. Там их несколько, смотри что выводит и бери из кютешного каталога. Всякие libstdc++-6.dll и тп
Дано: две проги, которые делают один и тот же Х. Первая сделана по принципу: main.cpp вызывает функцию 1, та что-то делает, вызывает функцию 2, 2 делает что-то и т.п. Вторая сделана по принципу: есть класс, в котором функции 1 и 2, main.cpp вызывает функцию из класса и далее по списку. Т.е. единственное отличие, что во второй проге я запилил класс, чтоб не передавать миллион переменных из функции в функцию. Вторая прога работает на 10-15% медленней. Это нормально? Или я испортил?
Живой там не?
Это копия, сохраненная 13 ноября 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.