Это копия, сохраненная 7 марта 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
⚹ https://github.com/sosachbot/cppthreadhat/wiki
Ответы на вопросы:
⚹ https://en.cppreference.com/w/
⚹ https://www.cplusplus.com/reference/
Для указателей: ⚹
Прошлый: >>1765587 (OP)
Как м помощью STL определить, что какой-то прямоугольник из множества пересекается с другим?
Aleft + Awidth > Bleft and bleft +bwidth > aleft
Потому-что тебе нужен именно стэк, а не вектор для корректности алгоритма, например
push_back вместо push, pop_back вместо pop. И еще че то. Пока не вижу сильных отличий
Да это один какой-то шизик форсил, уже устал видимо
это API такое. Увы и ах, очень старое и сишное. И оно единственное. Все фэнси библиотеки красивые и шарпы - в глубине дергают все тоже говно с int neponyatna
О, аноний, спасибо. А можешь в двух словах пояснить, что там под капотом? Зачем int создавать? Я просто реально не врубаюсь, давай я просто туда 0 буду толкать это же int. Но нет, им нужен именно адрес, но int это 4 байта, а если мой объект, типа говно больше будет? Почему именно int?
Это апи - стандартизированный интерфейс для драйвера.
Эти инты - на самом деле идентификаторы ресурсов, и внутри где-то драйвера. Почему используются инты? А хуй его знает, считай что это opaque pointer
>Есть новое. Вулкан.
А по нему есть уроки русские и толковые? Я просто по openGL ща читаю, реально начал понимать чо и зачем шейдеры, как видяха работает с этим всем, как текстуры натягиваются, я люблю в игрульки поиграть, но узнать как там внутри все фурычит очень занятно. Самому из пары треугольников создать прямоугольник и натянуть текстуру, да все в шейдерах, блин, интересно. А с вулканом есть почитать чего такого?
не в коем случае не мучай вулкан. Для хоббиста в нем нет вообще никакого прока, но хуева гора лоу левел геморрая.
Погоди, да как это работает то?
unsigned int vertex;
vertex = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertex, 1, &vShaderCode, NULL);
Ну вот, например, я создаю целый объект, целый вертикальный шейдер, а по сути это int ебаный, который я потом передаю в метода. Да как так? Я в метод 0 или 635 передаю? нахуя? Зачем? Шейдер это вообще целая подпрограмма, почему она в intе тусует? Как это работает вообще?
Сложна сложна нипанятна
int это внутренний идентификатор обьекта, который создает OpenGL. Так заведено
Можно, куча библиотек, соси
int в данном случае, при передаче просто указывает на определенную ячейку памяти и говорит, что вот отсюда и еще четыре байта это vertex. Чего ты мне рассказываешь, какие идентефикаторы? Либо объясни, если я не так тебя понял
Не ты задаешь. Ты просто создаешь инт, и OpenGL записывает при создании чего-либо туда некое значение. Которое для тебя НЕ ИМЕЕТ ВООБЩЕ НИКАКОЕ ЗНАЧЕНИЕ. Это внутренняя информация для драйвера.
Ты просто знаешь, что вот такой вот инт - это такая то текстура, всё. Ты никогда не используешь значение, кроме как для вызывания API
о, вот ща доходить стало, только не доконца чуть чуть. А как мне понять, что ему нужен int а не bool например? Вот в щарпе все просто, а тут как?
Там нихуя не так написано, там вообще написано, типо *glхуйнямоча
и как я должен из этого понять что ему ссылку на память вообще надо? Это все кресты такие тяжелые или просто опенголый такой замудреный? Я не говорю, что сложный, я вроде все понимаю зачем делается пока. Но вот в некоторых моментах мудрено, при этом я не хейтю кресты, просто интересно
Это не кресты, это си. Так на крестах, как требует OpenGL не пишет вообще никто, кроме ебучих стариков из НИИ.
Указатели нужны для записи по адресу, т.е. закидываешь указатель на уже существующую переменную, и в эту переменную записывается нужная опенгл инфа
в API передастся копия переменной, значение запишется в копию, исходная переменная не изменится.
И почему этот адрес в памяти unsigned int, а не bool, например? ведь по сути тут хранится только начальный адрес, а длина переменной зависит от типа. Но мы же оба знаем, то текстуру ты в 4 байта не уложишь 800*600 так зачем ее хранят типо в int, а не в bool, если, как ты говоришь, динамически память расширяем а тут только начальный адрес хранится?
>еще раз - четыре байта это лишь идентификатор текстуры
Как это работает? Идентификатор текстуры? Я создам инт пустой, в нем будет мусор, как это может быть идентификатором? А если потом у меня в другом инте тоже будет, все, крах и вылет программы?
>Ссылок в С нету классическом
То есть это только по этому? А чтобы понять, как это все робит надо лезть в С что ли? Бля, я решил уйти от шарпа, чтобы понять, как работает, перекатился в кресты, а вы мне в С говорите катиться, а там чо, в ассемблер пошлют?
Блядь, обьясняю для совсем тугих.
Есть инт, в нем какой-то мусор, мы отдаем указатель на инт в какой-нибудь glGenTextures или как оно там называется, в этом инте окажется число. Может быть это будет число 1, может быть это будет число 1488, не важно.
Важно лишь то, что на стороне драйвера где-то будет записана информация, о том, что существует текстура с идентификатором 1488. И когда ты что-то это делаешь, ты отправляешь идентификатор этой текстуры (любого OpenGL обьекта), и он внутри знает, с какими кусками памяти и всяких разных внутренних лоулевел штук это связано.
Опенгл это абстракция, понимаешь. Абстракция. Тебе нахуй не нужны все эти внутренные пердольные вещи, тебе нужно рисовать. Вот и рисуй, при помощи АПИ.
Если ты рандомную хуйню попытаешься отправить в API, которое требует созданный обьект (т.е. невалидное число-идентификатор) - тебя просто нахуй пошлют, вот и всё.
На эту тему есть немного приколов из системного программирования, что эта сама схема (некие opaque идентификаторы) - говно. Но це уже оффтоп.
Пчелик, ты можешь дергать сишное АПИ из С++, этого тебе достаточно. Просто проблема в том, что когда тебе дают сишное АПИ - то увы, никакие фичи из С++ оно не принимает, типа ссылок.
Тебе вообще никто и ничего не мешает обернуть всю эту сишную дрисню в няшное ООП, или как минимум просто в читаемый С++ с RAII. Вполне вероятно, так и стоит сделать.
Мы, например, на проекте, всю сишную блюву типа CreateFile и тд обернули в красивый С++, и им и пользуемся.
>И почему этот адрес в памяти unsigned int, а не bool, например?
Unsigned потому что адресов отрицательных не бывает, поэтому знаковый тип излишен. Почему 4 байта — ну наверное меньше может не хватить для хранения номера адреса.
> Но мы же оба знаем, то текстуру ты в 4 байта не уложишь 800*600 так зачем ее хранят типо в int
Не, в 4 байтах всего лишь адрес памяти, в которой текстура.
так и чо тогда выебываться, почему просто текстуру не отправлять как объекте, тем более я там уже в дату все загрузил?
Что значит отправить? Скопировать что ли? Мы тут в игрушки играем что ли?
По ссылке передать нельзя, выше написали, что это си, в котором ссылок ещё не было. Поэтому получается передача адреса.
что такое "просто текстура"? Текстура с точки зрения это не кусок памяти, это некая структура данных, в которой хранятся размеры, формат, всякие там флажки, мипмапы и прочее. Эта вся информация тебе не нужна, у тебя есть абстракция в виде API.
это почему вдруг? я в ту функцию кроме инта, который сам же и создал больше ничего не говорю, там дальше 4 байт мусор хранится, а ты говоришь текстура.Сначала пространство выделяется, которое я запрошу при создании переменной, а потом уже туда чего то записывается. Ну вот создал, записал инт, а ты тут текстуру в дохуя мегобайт суешь, больной? Нахуй пошел, да?
Ты не ругайся анон, я же понимать только только начинаю. Давай с кодом, чтобы я точно понял.
int texture;
это 4 байта в них мусор
дальше как я пишу туда такстуру?
Господи, у тебя 2 разные операции.
glGenTextures - при помощи нее ты создаешь обьекты внутри драйвера, и получаешь идентификаторы этих обьектов для дальнейшего использования
glBindTexture(GL_TEXTURE_2D, АЙДШНИК ТВОЕЙ ТЕКСТУРЫ); - делаешь свою текстуру... "текущей", "активной", whatever
и дальше при помощи glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data); - бла бла бла - ты в АКТИВНУЮ текстуру записываешь уже свою память.
Это все делается через вот это абстрактное АПИ, а что и как драйвер дрочит память - тебе уже не интересно.
После unsigned int adr = glCreateShader(...) у тебя в adr оказывается просто число. Номер ячейки, с которой начинается текстура. Остальное тебя ебать не должно, как говорится. Сама текстура на много байт вообще где-то в другом месте.
я программировать сам хотел, а вместо этого просто в апи взвожу флаги и пишу инфу, пиздос
Программирование графики еще "ниже" - это кернел драйверы для проприетарного железа. Даже вулкан, который пиздец лоулевелный - это все равно в итоге возведение флажков и пердолькинг АПИ
>у тебя в adr оказывается просто число. Номер ячейки, с которой начинается текстура.
В каком виде? Просто 1553? И что это за число? Как в другом месте, если я только что здесь создал? Или в опенгл в каком то массиве записывается, что в яцейке 1553 лежит адрес с которого начинается текстура такая то, так?
Еще раз, это бессмысленное число, которое имеет значение только для драйвера. Для тебя это число ничего не означает абсолютно.
>ничего не означает абсолютно.
Как программировать тогда? Почему в ссаном шарпе я все всегда толком и четко понимал чего куда и кого, а тут какое то число, а хз чо это и как, странно.
Опенгл где-то в памяти создал текстуру и отдал тебе номер ячейки памяти, с которого эта текстура начинается. Вот на картинке внизу справа есть ptrSum, указатель на объект sum. Просто адрес записан 90000000. А вверху слева по этому адресу уже сам объект sum.
Картинка
Так и программировать, как деды завещали. Используя то апи, которое тебе дали, и играя по его правилам.
Я искренне не понимаю, в чем твоя проблема. Ну идентификатор обьетка и идентификатор обьекта.
погоди погоди. То есть я создал int передал его адрес туда, он создал текстуру, записал ее в память, начальный адрес записал в мой инт и теперь я могу к нему обращаться. Я все верно понял? Оо
Он не отдает тебе никакой адрес. Если ты сгенерируешь текстуру, то ее айди будет 0 или 1 (точно не помню, давно опенгл не трогал). О каком адресе речь блядь.
Да. Ну вон челик говорит, что это на самом деле внутренний идентификатор драйвера, так что я могу ошибаться. Но если createshader возвращает указатель, как ты ранее говорил, то всё так.
Например, почему нельзя было тогда, еще даже до 90-х сказать, челы идите на хуй со своим говном старым, ща все по новому будет и все. Я понимаю ща хуй перейдешь, но тогда то, только умножать научились и делить, а уже кричать нам нужна обратная совместимость
Потому, что все новые версии опенгл являются расширением старых. Т.е. они никогда не убирали или изменяли новое API, Только добавляли новое. Ну и когда у тебя си вместо языка программирования - в выразительности API не разгуляться в любом случае
>Если ты сгенерируешь текстуру, то ее айди будет 0 или 1 (точно не помню, давно опенгл не трогал). О каком адресе речь блядь.
Чего, блядь? Я чо, больше двух текстур не могу генерировать, дегенерат что ли?
кроме идентификаторов, которые в апи скармливать.
Адреса это совсем другое, не мешай терминологию.
Ну да. Короче, по ходу там и правда не указатели возвращаются, а значит, и не голые адреса, но принцип схожий.
указатель, который хранит в себе АДРЕС это тип данных в С\С++. Идентификатор ресурса опенгл - это какая то хуйня, в С\С++ являющееся интом.
а дальше сиди задавай хоть до опиздения ее параметры, а сама она там в цикле крутится и в зависимости от твоих изменений модифицируется.
Все удобно, все понятно, тут нахуя каждый раз в память лазать? Говно же сделали? Пусть переделывают
Это texture tx = new texture уже написали за тебя другие, в обертках. Можешь так же взять уже готовые обертки, хуй знает, например SFML, и играться. А можешь вообще сразу Юнити взять, и не ебаться с лоулевелом.
Ну зато шарп медленнее.
Ебаный в рот, тебе уже несколько раз обьяснили. Потому-что в Шарпе за тебя уже дохуя всего написали, целый дотнет. Вся эта же блевотина сишная заботливым дядей была пережевана и красиво выплюнута.
То есть я сижу и на плюсах пытаюсь написать говно, которое до меня уж 20 раз лучше написали, так как есть фреймворки под шарп? А я тут чо, насрано чо ли, раз пишу все по своему только на крестах?
> То есть я сижу и на плюсах пытаюсь написать говно, которое до меня уж 20 раз лучше написали, так как есть фреймворки под шарп?
Ты понял суть программирования, искренне тебя поздравляю.
Жестоко
http://www.cpp.sh/8b2qu
Сап, плюсач. Ньюфаг в треде. Знакомый препод подсказал учебник Полякова. Вроде норм, потом продолжу Липпмана из шапки. Так вот, мне нужно каким-то образом использовать в visual studio библиотеку graphics.h. Как это сделать? Пробовал скачать graphics.h и запихнуть в папку, где лежит stdio.h. Не заработало. Потом запихнул этот файл в папку с проектом. Теперь #include "graphics.h" не подчёркивается красным, но функции оттуда подчёркиваются. Я так понял, что надо ещё какие-то файлы, кроме заголовочного для работы библиотеки? Можно ли сделать graphics.h встроенной библиотекой, чтобы каждый раз не вставлять в папку с проектом?
Вулкан намного сишнее гл. На фоне вулкана гл по сложности кажется чуть ли не питоном по сравнению с плюсами.
А есть ли какой-то красивый и нормальный способ передачи в функцию не двух итераторов begin и end, а шаблонного контейнера с шаблонным значением?
В C++ нужно руками блять писать отдельный метод который потом еще и не вызвать как член класса. Что мешало авторам стандарта добавить этот метод который бы возвращал вектор разделенных строк? Недостаточно универсально? Хорошо, сделайте метод который будет принимать пользовательскую лямбду которая сама решит куда сохранять разделенные слова.
Это по си учебник? Тогда в си тред иди. Вообще, я не эксперт, но сомневаюсь что эта либа используется где то в норм проектах. Есть ли смысл ее учить? Я бы пропустил.
1) Что такое строка? Из чего она состоит? Ты можешь написать этот разделитель так, чтобы она работала со всеми говнами от KOI-8 до UTF-32? Ни в одном языке ещё не сделали нормально, везде свои костыли.
2) Что этот метод должен возвращать? Копировать подстроки в новые строки? Или возвращать указатели на начало подстроки и её длинну?
3) Как и где выделять память под возвращаемые объекты?
4) Как заставить это работать достаточно быстро, чтобы все не начали писать свои строки? Никак
5) А всякую хуйню вроде определения эмодзи в неё включать надо?
6) итд
Короче, плюсы слишком низкоуровенный язык чтобы это нормально решить.
1) А сейчас по твоему класс строк работает со всеми говнами типо UTF-8?
2) Как я и говорил если хочется прям супер универсальный метод то можно добавить аргумент, который будет принимать пользовательскую функцию которая будет обрабатывать разделенную строку. Типо string_view word(...); user_callback(word);.
3) При описанном выше подходе выделение памяти не происходит
4) Сам метод split никак не затронит остальные методы так что никто из-за него не начнет писать свои строки
5) Нет не надо, это более высокий уровень
>1) А сейчас по твоему класс строк работает со всеми говнами типо UTF-8?
Там этих стрингов просто 2 штуки, лол.
>2)... Типо string_view
Начиная с 11-х плюсов строки не рефкаунтятся, как ты гарантируешь что твой string_view не на мусор ссылается в следующей же строчке? А учитывая современные тенденции — ещё лучше, в соседнем потоке/корутине, которая хуй знает где работает.
>3) При описанном выше подходе выделение памяти не происходит
Происходит, ты массив-то как возвращаешь? Как в шарпе? Сам как нибудь там без аллокаций справится?
>4) Сам метод split никак не затронит остальные методы так что никто из-за него не начнет писать свои строки
Конечно не начнут, у всех и так свои строки везде, лол. А если немного задуматься о перформансе — то внезапно тебе на каждый кейс нужна кастомная логика с сортировкой/структурой данных/чем угодно, чтобы всё делать за минимальное кол-во проходов.
В шарпе ты просто ебашишь в linq-стиле цепочки и тебя это не ебёт, панимаю.
Гарантирую тем, что колбек вызывается во время работы функции split, так что string_view будет всегда валидным. Ты наверное не понял про что я говорю, вот пример небольшой.
template<class Callback>
void split(char delimiter, Callback callback)
{
for (...)
{
//some delimiting algorithm
string_view word(...);
callback(word);
}
}
vector<string> vec;
list<string> list;
string zalupa;
zalupa.split(' ', [&](string_view word)
{
//save it like u want
vec.push_back(word);
list.push_back(word);
});
Там уже предлагали ввести ключевое слово, которым ты гарантируешь компилятору что не конченый долбаёб?
Что-то вроде #not_pidorust
Это инклюзивный подход. Напиши свой сплит и почувствуй себя соучастником, сотворцом.
Но ведь он уже по умолчанию меня за добаеба считает, когда не даёт long к void* кастовать.
Неужели лучше как в js, где всё молча кастуется ко всему?
А зачем тебе это?
А как же (void*)? Кастует все и вся.
Перед выходом из функции делаю проверку:
if (A >= B) {
A -= B;
}
return A;
До этой проверки вызывается функция, которая делает много вычислений.
Если я эту проверку (и вычитание) делаю на ассемблере внутри той большой функции, то у меня огромный (20%+) прирост производительности. Основной проект на плюсах.
Не понимаю, почему так происходит.
У меня конечно очень быстродейственный ассемблер по сравнению с компилятором из-за специфики вычислений, но тут уж совсем простая операция.
На первом пике — я закомментил кусок со сравнением.
На втором — то, на что заменил.
Не могут же два лишних вызова функции (operator>= и operator-=) иметь такой безумный оверхед?
Компилирую с "-std=c++11 -Ofast"
Спасибо
А вот если я изменю значение указателя (он будет указывать на другой адрес), потом как мне удалить массив?
Если проебал адрес объекта, то уже никак, у тебя случилась утечка памяти, и освободится память разве что системой при завершении процесса.
если ты сохранишь адрес - то ты дернешь на него просто delete[].
если ты не сохранишь адрес - то бог тебе в помощь
Где хранится инфа, которая о массиве? Просто я искренне не понимаю пока как это работает: как программа понимает где просто указетель на объект, а где на массив объектов.
Каждая аллокация порождает так называемый чанк в куче, в котором есть хедер, где есть метаданные об этом чанке (chunk - кусок с английского).
То, как выглядит аллоцированный чанк в памяти, я попытался нарисовать в виме, чекай пикрил.
Пысы: освобожденный чанк выглядит по-другому, если тебе это интересно. Там на месте actual chunk data есть указатель на следующий освобожденный чанк в корзине, а сразу после него - указатель на предыдущий освобожденный чанк в корзине.
Все это справедливо для аллокатора ptmalloc3, который есть в glibc. jemalloc или аллокатор в виндовой куче, мб, работают чутка по-другому, но принципы примерно одни и те же. У чанков так или иначе есть метаданные, которые предоставляют разную инфу, в т.ч. и для освобождения памяти.
Короче, есть такое понятие как аллокатор. Оно для тебя полностью абстрактно, но вот тот самый аллокатор хранит где-то всю нужную инфу сам по себе. Т.е. тебе эта информация недоступна по умолчанию.
Это если мы говорим про именно создание\удаление. Если мы говорим про доступ - то такая инфа не доступна, и ты начинаешь читать хуйню, когда переступаешь за границы массива.
быстрофикс
первые 3 бита в поле current chunk data - AMP - дабт доп инфу.
Если бит А = 1, то чанк находится в главной арене
Если бит M = 1, то чанк был получен впоследствие системного вызова mmap
Если бит Р = 1, то предыдущий чанк не освобожден (в использовании).
Опять же, это имплементация аллокатора в glibc, разные аллокаторы реализованы по-разному, но между ними есть общие принципы.
>похуй как оно там работает
Ты понял смысл слова абстракция.
Абсолютно верно. Может быть даже несколько разных аллокаторов для одной платформы.
кстати, ты можешь выделить 0 байт на куче, но glibc аллокатор вернет тебе указатель на чанк, в котором есть место под 16 байт (на 64битных системах), кек. Поэтому ты даже можешь слегка переполнить небольшой буфер без последствий (допустим, у тебя там выделен массив из 5-ти чаров, а ты записал туда 7 чаров), в данном случае формально случилось переполнение, но оно не загадило другую важную память, так как у тебя есть в этом конкретном случае 16 швабодных байт в чанке, даже если ты выделил, мать его, НОЛЬ байт на куче. Такая вот хуйня =D Но никогда так не делай, ибо это хождение по тонкому льду и просто прикольные хаки.
Ты недооцениваешь студентов второго курса, которые освоили сортировку на шарпе, и тут им дают САМЫЙ СОВРЕМЕННЫЙ, САМЫЙ НАВОРОЧЕННЫЙ, ЭТИ ВАШИ LINUX VULKAN СОСУТ КАК ПИРАТКИ У АКТУАЛА, КАК БУДТО КИАНУ РИВЗ ЛИЧНО СТО МИЛЛИОНОВ МИЛЛИАРДОВ ЛЕТ КОДИЛ OOOPEEEENGLL
Сорян просто флешбеки всплыли как мы копались на сайтах начала 2000х чтобы разобраться в этой хуйне
Листал доску увидел ваш тред. Что я тут делаю, я вообще дотнетчик...
Так-то далеко не все сразу понимают, что такое дескриптор.
Разница в вероятности обосраться.
> использованием make_shared
10%
> и его не использованием
100%
заведи хэш-мапу какую-нибудь. Но вообще, чето это как-то изначально архитектурно не правильно
Я пока добавил в struct указатель void data и записываю его в конструкторе. Все еще плохой дизайн?
при использовании make_shared объект разрушается после того, как счетчик weak ссылок становится равен 0, а при использовании обычных shared_ptr - после того, как счетчик strong ссылок становится равен 0.
Пока не понятно. В книге было сказано, что shared_ptr считает колличество ссылок на объект. Как их колличество достигает нуля объект и указатель последний удаляются. Но при этом выделение происходило через make_shared. Ладно. Буду читать дальше, может там уточнят
Облажался, надо читать так:
при использовании make_shared объект разрушается после того, как счетчик и strong и weak ссылок становится равен 0, а при использовании обычных shared_ptr - после того, как счетчик strong ссылок становится равен 0.
Ну такое часто встречается, только называется context. Ничего страшного я в этом не вижу
А если прям взять унаследовать класс от структуры, то может static_cast сработает? Но этот класс надо еще от другого по архитертуре наследовать. Задолбал тебя, извини, надо все руками пробовать.
Ну вот серьезно. В чем вопрос? Тут нужно просто сидеть, читать и вникать в то, что написано. Ну можешь еще посмотреть на паскаль, как там все записывается, потому что тот еблан русский с паскалем намешал
Рекомендую поссать на лицо человеку, который этот псевдокод тебе преподает
Похоже на паскаль.
Я пока на предпоследней стадии. Когда ко мне придут люди и заставят писать на двух килобайтах рома?
>Я хочу передавать в функцию итератор на внешний контейнер, функция по итераторам его изменяет, в том числе его размер, причем заранее не известно на сколько. Это вообще нормальный подход?
Это то что делают стандартные алгоритмы стл когда ты передаешь им back inserter.
А я все же ебанулся и так и сделал. Все работает и кое-где удобнее стало. Даже в функцию сишной либы this можно отправить - полиморфизм срабатывает.
ООП дело другое, а кресты рулез, хотя и трудоемкие при кодировании по сравнению со всяким.
Блин, не отклеилось
Кто придумал такую шикарную аву С++ треда? Да еще и повторяют из треда в тред самую всратую, байтоебы тупые. оп переболеет ковидом столько раз, сколько я раз буду лицезреть эту хуйню в шапке
Чтоб можно было создавать объект.
С приватным конструктором создать объект сможет только сам объект (через статический метод) или friend (builder).
Потому что это копирующий конструктор.
>Я думал, что копирование это когда у функции f(T var)
Да, но функция, которая так объявлена, она не выполняет это копирование сама по себе, она просто получает уже готовую копию. А эту копию кто-то должен сделать, для этого и нужен конструктор копирования, который для этого использует ссылку на оригинал.
std::conditional
А лучше:
auto foo(...)
{
if constexpr (...)
return MyType1();
else
return MyType2();
}
А на c++11?
Немного не то, нужно именно выбрать значение из 2х значений одинакового типа
То, что нужно! Благодарю
Таких один из тысяч.
Так они его знают на уровне циклов и массивов. Олимпиадное программирование про то как решать тысячи наркоманских задач, используя контент первых 50 страниц самоучителя
> Неужели они читают тысячастраничные книги?
Тот уровень языка, который нужен на олимпиаде, учится ну максимум за неделю. Переменные типа int и float, арифметика, if/while/for, ввод с клавиатуры и из файла, вывод на экран и в файл. Всё, больше в школололимпиадах вообще ничего нет. Весь код в main() пишется.
> хитрые алгоритмы
Это ты про задачи уровня "Вася часто ездит на автобусе и захотел написать программу для определения, счастливый ли билет" что ли? Очень хитро, прям днями и ночами надо готовиться.
Нахуя вообще читать книги? Появилась проблема, загуглил, нашел алгоритм, реализовал и решил проблему. Зачем читать 1000 страниц половина из которых забудется, а другая может никогда не понадобится.
Тут и обсуждать-то нечего.
Ты читать не умеешь? Тебе сказали ОТОВСЮДУ! По сути осталось нищее байтоебство в эмбедеде и хайлоад для задротов в яндексах и гуглах.
Я как то раз так попробовал. Делал лабораторную, поиск подстроки в строке и в конце лабораторной была такая безобидная приписка: модифицируйте алгоритм для работы с большим потоком данных и программа-тест генерирующая этот поток данных, которые за один раз в массив не положить. Я долго боролся, но так и не смог и ничего полезного не нагуглил, гуглился только алгоритм поиска который я реализовал, а вот как его адаптировать для потока данных в гигабайты (или десятки гигабайт?) - нет. Вот и всё обучение через практику
Интересные вещи рассказываешь. Ещё не забудь сказать, что на десктопе теперь электрон, в геймдеве шарп, а на сервере питон и джава.
Не так.
На десктопе кутэшного куда больше, чем электронного. Электрон сейчас, по сути, только дискорд и вскод. А кутэ - дефакто стандарт для десктопных приложений, тем более если ты хочешь, чтобы софтина была быстрой и легковесной, а не как говно на электроне.
Геймев - инди игрульки мб и на шарпе, но годные ААА игры с охуенным графоном и сложной физикой - плюсы. Причем из топового геймдева даже раст не сможет выдавить плюсы.
На серверах крупных компаний куча бэкэнд кода на плюсах. Больше, чем ты думаешь, ибо ГОвно со своим сборщиком мусора может внезапно начать сосать хуи в слоумо в самый неподходящий момент.
>нищее байтоебство в эмбедеде
Тут зависит от государства в котором ты живешь. Если ты рабсиянин/уркоинец/еблорус (нужное подчеркнуть), то да, малясь зашкварная отрасль, где требуют относительно много знаний + шарить в железе, а платят меньше, чем ссаной вебмакаке, которая по факту не знает что есть компьютер. В странах типа США, Германии, Израиля (за другие не скажу, за эти просто точно знаю, но думаю, что в Европке оверолл такая ситуация) эмбедщина - элитная айти отрасль и получают они хорошие деньги, порой выше, чем веб-смузихлебы, да и работа у них интересная. Учитывая, что эра IoT находится на заре, равно как и отрасль автономных машин с кучей эмбедщины внутри оных, эмбедщики будут востребованы еще очень долго.
++ этого джентльмена.
И да, реально шарящих "крестовиков" - очень мало.
Тем мы, крестовики, ценнее всяких джавистов и прочих PHP-макак.
Привет из Нвидии
>По сути осталось нищее байтоебство
Ага, поэтому мне предлагают 200к вакансию и 3 релока один из которых в Канаду. Хуй соси еблан.
Вы вымрете* быстрофикс
И это я еще не привел примеры ресурсоемких числодробилок, разных научных симуляций Вселенных, RT, обработки изображений и видеофайлов (вся отрасль CV держится на плюсах, openCV написана на плюсах), медиа-аудио плееры, куча системного софта, драйвера (на винде дрова пишут на крестах, например), вся отрасль компьютерной графики и много чего другого.
Плюсы на пару с Сишкой - оплот и фундамент всего мира компьютерных технологий. Какую технологию ты бы ни взял, в 99.9% случаев ее инфраструктура будет написана на С/С++. Причем именно в случае с плюсами налицо их развитие. Каждые 3 года штампуют стандарты с тонной новых фич, язык явно не станут забрасывать, ибо на это нет никаких, даже косвенных, причин. Можешь считать, что С++ - это рак в терминальной стадии, давший метастазы по всему организму. Убьешь С++ - убьешь мир компьютерных технологий просто К ХУЯМ. Может ли все поменяться когда-либо? Безусловно, теоретически, может, только вот если такое когда-либо и произойдет, то каждый читающий этот пост уже будет давно в земельке.
Вполне.
Какой стэк, какие проекты делал? В чем надо шарить, чтобы быть востребованным эмбедщиком? Насколько глубоко надо нырять в мир железа? Какую литературу по сабжу лично бы порекомендовал? Здоровья тебе, анон.
Мда. Чувствую себя чуть менее греховным, чем плюсеры, ведь я просто пишу на портируемом ассемблере ради максимальной производительности...
мимо сищник
Сишка, какой бы старой ни была, все равно бессмертна при нынешней архитектуре железа, лол.
Просто она менее гибкая и намного меньше напоминает швейцарский нож, нежели кресты, поэтому писать на чистой сишке какой-нибудь фотошоп или движок для очень серьезной и большой игры - лишний гемор, учитывая, что разница в скоростях между С и С++ пренебрегаема в подавляющем большинстве случаев, а порой плюсы даже быстрее сишки (если правильно писать код, перекидывая как можно больше вычислений на компайл тайм с помощью темплейтов и constexpr).
>если правильно писать код, перекидывая как можно больше вычислений на компайл тайм с помощью темплейтов и constexpr
Никогда этого не понимал. Я как программист могу предвычислить всё, что нужно, вынести подвыражения, раскруить циклы, и результат будет лучше (для известных мне архитектур). Компилятору остается подставить static inline и свернуть константы, это с начала 2000-х умеют все.
==Плюсы на пару с Сишкой - оплот и фундамент всего мира компьютерных технологий. Какую технологию ты бы ни взял, в 99.9% случаев ее инфраструктура будет написана на С/С++. Причем именно в случае с плюсами налицо их развитие. Каждые 3 года штампуют стандарты с тонной новых фич, язык явно не станут забрасывать, ибо на это нет никаких, даже косвенных, причин==
Прямо вдохновляет. Но как насчёт суровых реалий? Я живу в городе с населением 300 тысяч человек, областной центр и на данный момент на сайте hh.ru нет ни одной вакансии для C++ программиста, подозреваю что никакого "эмбедед" тут тоже просто не существует
Страны СНГ - технологически неразвитые страны, и, понятное дело, рынок айти это не обошло стороной. Тут я ничего посоветовать не могу. Дрочи дома плюсы, жестко вкатывайся в инглиш и заводи трактор, если хочешь элитной работы в сфере низкоуровневого программирования. В странах СНГ есть шанс, но я бы не стал. Решать тебе.
не, я уже окно возможностей проебал, так прост, интересуюсь. Когда то "гениальный план" разрабытывал, что выучу си, выучу ассемблер, выучу си плюс плюс и на галеру в Воронеж рвану, но встрял уже на первом пункте
Странно, что вакансий на эмбедщину нет, у вас там в рашке нет ведоров железа, которые должны писать кастомные драйвера и прошивки на чипы? Причем эмбедщина есть просто ВЕЗДЕ блять. От микроволновок до истребителей.
>задачи уровня "Вася часто ездит на автобусе и захотел написать программу для определения, счастливый ли билет"
Наивный, там также сложно как и на олимпиадах по математике и физике. Не каждый студент вуза, даже не каждый препод эти задачи решит. Это я не про городскую олимпиаду мухосранска говорю, естественно.
Вот тут двачую, сам с мухосрани 600к, на весь город пара вакансий на плюсах. Вскоре думаю на собес пойду, и если не пройду или сама работа не понравится то походу придется выкатываться и переходить на веб парашу.
27 октября 2016 начал, показывать нечего, на гитлабе было немного кода но я аккаунт не помню, вот с этой лабораторной например не справился, а именно с последними двумя строчками: https://sites.google.com/site/pathofdeveloper/home/programmirovanie-na-azyke-vysokogo-urovna/zadaci-pervogo-semestra/poisk-podstroki-metodom-bojera-mura
Вот с этой задачей на олимпиаде почти справился, но доделал уже вечером после: https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&cad=rja&uact=8&ved=2ahUKEwjW1Zmh453rAhXFs4sKHZ8TA24QFjAAegQIBBAB&url=https://olympic.nsu.ru/files/problems_8.pdf&usg=AOvVaw0dbA4QEfkK6Som77mDTMuZ Вот мой акк на степике: https://stepik.org/users/114171448/courses
предоставляют более специализированный интерфейс
Уточню, задача на олимпиаде "заяц - топтун" в файле она не одна оказалась
>>78202
А в чем сложность то? Там шаблон для поиска всего 16 символов. Берешь сначала реализуешь дефолтный алгоритм поиска подстроки. Далее грузишь допустим первые 1024 байта файла, ищешь в них подстроку, если не нашел читаешь файл по смещению 1024 - длина_шаблона и опять ищешь в этом куске подстроку, повторить пока файл не кончится. И никакие книги для этого не нужны.
хех, подход не очень хороший если следовать дизайну стл
ведь стандартные модифицирующие алгоритмы стл никогда не меняют размер контейнера
и тому есть причины
в новом стандарте можно передавать не пару итераторов а рэндж
Ну вот ты умный такой, а я не такой. Два месяца потратил - так и не сделал. Вот кот кстати, я нашёл: https://gitlab.com/Krogan1987/labs/-/blob/master/lab1-0/src/main.c
Близок хоть к цели то был?
int block = 163;
Это размер блока на которые разбивается файл, меняем размер блока - вывод не должен меняться, причём разбиваем не файл генерируемый программой-тестером, там он слишком лёгкий, а заполняем рандомными цифрами. Сначала получаем эталонный вывод используя эту же программу но прописав блок больший длины файла, а затем тестируем прописывая меньшие длины блока
Когда я сказал много знать не надо, я имел ввиду в плане синтаксиса языка. И то там изъебываются иногда. Используют модифицированный ввод вывод. Но обычно это не требуется. В основном задачи сделаны так, что можно на любом языке написать, НОО иногда бывают байтоебские задачи. Например обязательное условие писать на си и улажиться в очень строгие ограничения по времени и памяти. Или залачи на перебор, где нужно эффективно перебирать. То есть там используют только плюсы.
Он небось на говноланг намекает.
Пиздец конечно, все в 1 функции, неинформативные названия переменных. Это читать и понять что происходит просто невозможно. Вынес бы хоть код поиска подстроки в отдельную функцию.
==Это понять почти невозможно==
Вот я и сам перестал что-либо понимать и любые изменения которые я вносил меняли не только то что я хотел но и то чего не хотел
==код поиска подстроки в отдельную функцию==
Так я не умею для меня функция это то что принимает несколько аргументов и возвращает одно значение, принять массив и вернуть массив - я не знаю как, не прочитал ещё нужную главу в учебнике, ни тогда, ни сейчас
Но сейчас, то есть несколько месяцев назад я научился писать более понятный код. по крайней мере мне самому, но он и алгоритмически несравнимо проще: https://pastebin.com/wd0LDZCp
Ужасно нечитаемый код, особенно в теле цикла. Пиши чище, анон.
Кстати, у тебя, видимо, баг в 6 строчке - fgets неявно вставляет нуль-терминатор после окончания чтения строки. И твой буфер на 20 символов вместит в себя 19 (20ый будет для нуль-терминатора). Если так было и задумано, то пардон, а если нет, то учти.
И все? А если притарабанить какой-то условный джойстик, который присоединяется к I2C шине и накатать на него драйвер?
пчел, ты вкатился в 2016 году и до сих пор не знаешь как передавать в функцию массивы/возвращать из нее массивы?
Не в обиду, но, возможно, программирование - это не твоё.
Это более года назад писалось, я понятия уже не имею что там задумывалось, но скорее всего длина буфера выбрана с запасом
Да, именно так. Никак до этих глав не докачусь. Сначала катился по книге Прата, потом начал в школьную математику вкатываться, потом в школьную информатику, потом в вузе год пытался в код, пот ом снова книгу начал читать с самого начала, где то в апреле этого года снова забил прочитав не намного дальше чем в первый раз. Начал в линукс слепую печать и вим уходить, а на сам си как то взял да и забил, ещё и работать начал на заводе, вообще как то вечером не до самообразования
Да, всё мы можем. Но оказывается гораздо более удобным перекладывать эту работу на компилятор, код остаётся понятнее, времени на его написание и отладку уходит гораздо меньше. Компиляторы со временем становятся всё умнее, и уже сегодня спокойно уделают тебя в оптимизациях в 95% случаев.
Так-то можно и на ассемблере всё писать, но, очевидно, времени на такую деятельность просто нет.
Взять большую сборку светодиодов, написать детектор степени дезориентированности существ в поле зрения камеры и сделать стробоскоп от воров с обратной связью.
сейчас с новых стандартов в стандартной библиотеке есть возможность работы с кучей
Я привык, что сначала идет некое введение. Что нужно для работы сервера. Как сервер принимает соединения, и тд и тп. Там сначала расскаываются буферы, таймауты.
https://ideone.com/8GlmzM
https://ideone.com/I0BV3c
https://ideone.com/secvvb
https://ideone.com/JKDbrl
Плюсовые заморочки
Потому что в шаблоны раскрываются на этапе компиляции, а значит в них можно подставлять только константы времени компиляции.
В "const char hello[]" hello - константа времени выполнения.
&hello, адрес hello - константа времени выполнения.
Миссклик, не дописал.
const char* hello - указатель на const char - не константа времени выполнения => в шаблон не подставить.
Строковые литералы просто нельзя передавать в шаблоны, причину не назову.
>>78466
Еще и обосрался с названиями... Фикс:
Потому что в шаблоны раскрываются на этапе компиляции, а значит в них можно подставлять только константы времени компиляции.
В "const char hello[]" hello - константа времени компиляции.
&hello, адрес hello - константа времени компиляции.
const char* hello - изменяемая переменная-указатель на const char - не константа времени компиляции => в шаблон не подставить.
Строковые литералы просто нельзя передавать в шаблоны, причину не назову.
Примерно та же причина, что и с флоатами. Из-за случаев, когда можно подумать, что параметры шаблона в двух разных местах совпадают, а на самом деле это не так. Тут хелло, там хелло, а указатели разные.
>Анончики, какие типы проектов можно делать с данной железкой?
Как же заебали ардуинщики, блядь. Все бегают с этой хуйней и рассказывают, какие они инженегры, блядь. Да лол, все, что может эта хуйня сделать это - прочитать входа, обработать, выплюнуть выхода. Чо вы там все ими выебываетесь? Чо вы на них пишете? Один мне затирал, как систему полива цветочков автоматическую сделал в зависимости от влажности, ууу, бляя. И чо, говорю, ты там такого реализовал? Прочитал значение датчика и далее, если он ниже уставки, то включить насос? А в ответ...эээ, мууу, беее, ну эта.
Делать то ты чо хочешь, болезный? Ну прицепишь джостик и дальше чо? Воткни геймпад в комп да обрабатывай его ввод через директХ
Немного извратившись, можно будет делать нечто похожее в C++20
https://ctrpeach.io/posts/cpp20-string-literal-template-parameters/
Это документация, а не туториал.
>Что нужно для работы сервера. Как сервер принимает соединения, и тд и тп.
Тебе книги обучающие надо читать, а не документации.
А что для тебя верх инженерной мысли? Или если человеку нравится эмбедщина, то это зашквар?
Какая эмбедщина, поехавший? Там залупа, уровня вывести хеловорд в консоли. Даже самый отбитый нуфаня таким хвастаться не будет, а ардуинщики хвастаются
ну а я говорил про эмбедщину. Высрать какой-то кастомный дрон или что-то наподобие. Ты ответил на предыдущий пост в духе "нахуя пилить хеллоуворлды на микроконтроллерах и кичиться этим", но я изначально и не говорил про хэллоуворлды, а про что-то куда более сложное.
Бамп
> прочитать входа, обработать, выплюнуть выхода
> Там залупа, уровня вывести хеловорд в консоли. Даже самый отбитый нуфаня таким хвастаться не будет
Чем твой пример отличается например от обработки данных рсдб-наблюдений? Там тоже "прочитать входа, обработать, выплюнуть выхода" -- а про это написано тысячи статей, и посоны 40 лет ебались с проблемами оцифровки и передачи информации, с корреляцией данных и прочее.
Сейчас эти проблемы не стоят так остро, записать на винчестеры и передать пару сотен гигабайт по инторнету, а потом прокоррелировать на видеокарточках не что-то сложное, когда-то это был знатный геморрой. Приходилось строить суперкомплектары и диски самолетами пересылать.
> работают между виджетами
Они между чем угодно, нужно только от QObject отнаследоваться. Как сделать есть разные варианты. В классической MVC ты создаешь модель со статистикой (туда записываются данные которые нужно отображать). Вспомогательный класс обновляет инфу в модели. Контроллер время от времени (или по сигналу от вспомогательного класса что данные обновились) берет инфу из модели и отправляет ее на отображение в виджет (сигналом).
Ты издеваешься, блядь, что ли? Ты понимаешь, что ты несравнимое сравниваешь? Абстракционист, хуев. Так и функция любая у тебя прочитать вход, обработать, выплюнуть ретурн.
Тем, что компилятся в относительно компактный нативный код и имеют темплейты (нет, дженерики далеки от темплейтов).
Хорошо написанный код на с++ будет всегда быстрее хорошо написанного кода на сишарпе (тем не менее, суперхуевый код на с++ может быть медленнее кода на шарпе), именно поэтому в хуйлоудах предпочтительнее С++, а не шарп. С++ дает гораздо, ГОРАЗДО больше контроля над программой и над тем, какой машинный код выплюнет компиль.
Ой, да не пизди ка давай. То что в шарпе обязательно классы хуячить, а в крестах можно без них это хуйня из под коня.
C++
- Сверхпростой интероп с сишкой и сишными либами.
- Темплейты намного гибче генериков, как уже сказали, и резолвятся в компайлтайме.
- RAII вместо гарбадж колектора, или же безпроблемное ручное управления памяти, не требующая всяких ансейф и фиксед хуиты.
- нативный машкод вместо байткода.
- нет нормальной рефлексии
> кроме указателей
Кстати я вижу ты знаток шарпа. Да будет тебе известно, там есть указатели.
Неужели никто не писал сервер на бусте?
>Кстати я вижу ты знаток шарпа. Да будет тебе известно, там есть указатели.
Ни разу не видел, чтобы их кто то где то использовал, тогда как на крестах какой код не возьми, все указателями обмазываются где надо и где не надо
>Когда завезут функции, небось тоже никто их юзать не будет.
Ага, прямо как на ооп в крестах, дали им, дебилам, классы, так они все равно без них хуярят
Не нужно будет создавать классы из одного-двух статик методов. Классы будут использоваться по прямому ООП-назначению, а не в качестве модулей.
Но это тема отдельного срача.
А на хуй бы не пошел?
Раз ты пишешь классы из одного двух статик методов, то ты чего то в архитектуре нахуярил из жопы
Ясно.
Есть изображение, которое генерируется из нескольких картинок. Генерирую я это в QQuickItem::updatePaintNode.
Сейчас нужно в эту же картинку добавить что-то типа DropShadow.
Так вот вопрос, могу ли я в одном updatePaintNode нагенерировать кучу QSGNode,
а потом засунуть в другую ноду, где будет написан мой кастомный материал с нужным мне шейдером?
Чтоб было понятнее, на скрине псевдокод
Оч сложна
Качаешь пару талмудов и внимательно, методично их читаешь, попутно выполняя все примеры и дохуя гугля. И может через несколько лет что да выйдет.
Просто учишь, лол.
И параллельно пишешь код, начиная с говна на уровне хэллоуворлда и lab1.cpp, постепенно повышая уровень.
Как что-то хорошее
реализация вытесняющей многозадачности в ос общего назначения, например
Напиши сам.
Например клиент должен серверу отправить запрос на соединение. Там должны быть заполнены заголовки. Я же не буду вручную их заполнять, вычислять и отправлять
если ты про http сервер (раз говоришь про заголовки) - их дохуя и больше. Всякие pistache, crow, и тд. Если про клиента - то курл все сделает за тебя. В че вопрос то?
Чтобы тестировать сервер нужно ему отправлять всякие запросы. Ну вопрос в программе, которая будет это делать.
Сам поискал, наткнулся на JUCE, переплевался с объявления точки входа в программу, дропнул к чёрту, моя нежная душа не выдержала, сейчас ещё смотрю на Dear ImGui, пока лучшее что нашел
но вообще, крутые парни не обращают внимания на варнинги
Тут на вопрос ответили
>>79171
Спасибо, анон
//Тут кстати, пока искал примеры как оно выглядит, наткнулся вроде-как на адекватную статью, мб кому пригодится, правда уже немного старая
https://philippegroarke.com/posts/2018/c++_ui_solutions/
Нет, не ответили.
Copperspice - это же переодетый Qt
Что тебе ОБЪЕКТИВНО мешает остаться на QT и не ебать мозги ни себе, ни остальным?
>по возможности лёгкое
У кутей чуть ли не идеальный баланс между навороченностью и легковесностью, хз че ты мнёшься.
А, ну раз чисто балду погонять и удовлетворить простой интерес, то тупо любой, здесь уже писали некоторые.
Только вот в итоге все равно QT будешь прикручивать :-)
>Какой стэк,
Любой, этож C++, это тебе не JS, где ты отошёл от браузера на миллиметр и сосёшь.
>какие проекты делал?
Гейдев, Эмбедед, микроконтроллеры, 3d графика, openGL, картография, навигация по GPS + Glonass, работа с электроникой типа ардуино итд, базы данных.
Пригласили в фирму для разработки карт.
Канада - разработка игорей.
Вообще не стоит слушать дебилов которые говорят о мёртвости того или иного языка. Я 20 лет в IT и 15 в программировании. И так говорят вообще обо всех языках на свете.
Примеры ниже
PHP - вообще говно которое вот вот загнётся (15 лет слышу).
C - загнулся в 90 (при этом самые ценные вакансии как раз на нём почему-то)
Java - вот вот загнётся (есть же более производительные языки) (слышу об этом лет 15)
Kotlin - Язык одного стартапа джетбрэйнс, проживёт лет 5 максимум (лол)
JS - заменят на %new_lang_name% (меняют лет 13)
Python - тормозное говно без задач, сдохнет везде кроме униварситетов (8 лет читаю как он подохнет)
C++ - помер лет пять назад (почему-то мне сыпятся самые крутые вакансии на нём и сишке лет 10 как, дауны всё кроме стека с микроконтролерами не могут ничего найти)
Даже кобол живой. А вы сосачерам верите, лол.
Вообще у меня довольно крутой бэк по теме картографии, сам разработал прогу которая делает карту местности собирая снимки с дронов. Видимо поэтому меня и пригласили. Хотя это не проект даже, а хобби скорее.
Но да, если ты книжку прочитал да лабу написал, тебя никто в своём уме хантить не будет. В cpp это так не работает.
Это плохо, когда ты концентрируешься ТОЛЬКО на одном стеке, забывая обо всём остальном. В результате ты видишь только узкую прослойку вакансий, которая не всегда оплачивается адекватно.
Если ты тот пчел, который вкатывается с 2016 года и до сих пор не умеет возвращать массив из функции - сори, бро, никак. Это не твое.
А если ты не тот чел, то просто учи + стругай пет-проекты, чем больше тем лучше, постепенно увеличивая сложность.
я вот лоу-лвл червь, люблю прошивки и драйвера. Что скажешь по этому поводу?
Пысы: самый хай-лвл проект, который я разрабатывал, была небольшая виртуальная машина, это чтоб ты понимал степень моей байтоёбности)
Вкатываюсь с июля 2020 года. Буду учиться + стругать пет-проекты постепенно увеличивая сложность. Спс.
Тут я должен бы какую-нибудь шаблонную фразу кинуть, типа Учись, читай. Но на деле это мало кому помогает. В реальности надо не просто любить язык и хотеть на нём программировать, а любить решение задачи. Тот же проект с дронами нахрен никому был не нужен когда я начинал. И выглядело всё со стороны как какой-то задрот тратит кучу времени на то, что и так имеет аналоги в том же гугле. Потом пришли фирмы чтобы его у себя виспользовать.
Думаю если у тебя возникает какое-то чувство страсти и хоть какого-то удовольствия - ты в любом случае окажешься в Канаде, калифорнии, на пляжу с удалёнкой и коктейлем в руке.
Верю что всё у тебя получится. В этот тред просто так не заходят всё таки.
Удачи.
Кстати один интересный совет я всё же могу дать. Светись на форумах, телеге, там где обитают крутые спецы. Задавай вопросы, ищи решения. Меня в основном так и находят.
Тибо стака и реддита(шутка)?
хиккам в 2к20 сложно без софт скиллз, даже в погромировании. Тебе будет гораздо сложнее, порой на грани невозможного, добиться успеха, нежели более социализированным собратьям.
но я толковый
Ковид же. Я уже 6 месяцев коллег не видел, всё по удалёнке. Думаю хиккам самое оно.
Не сказал бы. С одной стороны хорошо когда подован вопросы задаёт. С другой стороны зачем мне долбоёб который задал 9000 вопросов и фактически я за него проект сделал, в то время как тот социоблядский мудак неделями на кофебрэйках. Тут нужна середина.
Я даже работу успел удачно сменить, в одном офисе был "по удалёнке", теперь в другом.
Пока что так и продолжаем.
Больше некому
>Высрать какой-то кастомный дрон или что-то наподобие
Какой-то кастомный дрон уже лет 10 как высрали:
https://github.com/ArduPilot/ardupilot
https://github.com/iNavFlight/inav
Их писала куча разработчиков, платы для них делались с нуля и ничего общего с хелоуворлда "мама я с одноразового китайского датчика, который через месяц окислится и заржавеет к хуям, писяю в горшок, код спиздил со стековерфлоу я умный".
С таким подходом любой пет-проект - это гиблая затея, ибо за тебя уже давно все написали. А если ты и пишешь что-то на уровне стартапа, то это 1 на миллион, и то не факт, что кому-то будет нужно и выстрелит.
Тем не менее, людям серьезные пет-проекты помогают устроиться на работу, и речь далеко не про хэллоуворлды и мигания диодами. Ты троллишь тупостью или как?
Всё дело в том, что мода на детские радиоконструкторы из отладочных плат каким-то образом перелезла за пределы школьных радиокружков в область ВО ВОТ СЮДА ВОЙТИ ВАЙТИ и на основе детских радиоконструкторов дебичи всерьез думают делать какие-то стартапы.
Блять, да речи не было про хэлоуворлды, алло
Речь была про более серьезные проекты, которые требуют куда более углубленных знаний в программировании и электронике. Хули ты прицепился вообще со своими миганиями диодов, шиз?
Ну если у нее не будет dll всяких. Обычно же у программы куча системных вызовов. Можно заставить компилятор скомпилировать под голую железку код?
Без усилий - нет. Только разве хэллоуворлды запускать.
ОС дает тебе абстракцию над железом и не дает тебе фривольно пакостить. А дебажить bare-metal код ты вообще ебанешься, особенно если он на обычном настольном компе, где даже UART порта нет.
Мой тебе совет - хочешь заниматься подобной хуйней, покупай любой SoC типа малинки или биглбона или же сразу мкк типа STM32 (для bare-metal лучше второй варик).
Ладно. Я так подумал, что ебала еще та. Огромное колличество функций ос, всякие платформозависимые штуки типо аллокации, потоков. + вывод нужен. Было бы это просто было бы круче.
> Мой тебе совет - хочешь заниматься подобной хуйней, покупай любой SoC типа малинки или биглбона или же сразу мкк типа STM32 (для bare-metal лучше второй варик).
Да не. Просто вопрос из интереса. Типо можно ли так всякие требовательные программы запускать, чтобы все ресурсы компьютера были нацелены на исполнение программы. А то винда как то много ресурсов потребляет.
>винда
Пересядь с зондированного говна на операционную систему (Линукс), например, там ты так закастомизироваться сможешь, что все ядро вместе с гуем на стартапе будут жрать по 100-150 MB вместо 3 GB в винде. Тащемта, все суперкомпьютеры мира на Линуксе и крутятся, чтобы выжимать все соки из железа.
А вот полностью отказываться от ОС - хуевая затея, ибо ее абстракции нужны для того, чтобы оверолл деплой даже простых программ не занимал 3 десятилетия. В 2к20 году даже на кастрированных железках крутится какая-нибудь FreeRTOS, даже в автономных машинах и джетах. Почему? Потому что если у тебя нет ОС, то у тебя нет планировщика, а значит если ты захочешь параллельно запустить 2 процесса - ты соснешь хуйца с проглотом. Гонять электроны по проводам как 60ых не варик, нужна какая-никакая ОС в 99% случаев.
Красноглазый даун даже уточнил, какой высер является в его секте операционной системой.
template<bool b___>
struct S1
{
constexpr bool is_some_bool(void){ return b___; };
};
struct S2
{
};
template<typename x___> concept if_and_is_some_bool = requires(x___&& x) { new int [x.is_some_bool() - 1]; };
if_and_is_some_bool<S1<true >> ----> true
if_and_is_some_bool<S1<false>> ----> false
if_and_is_some_bool<S2 > ----> false
То есть, сперва узнавал есть ли вообще метод "is_some_bool", затем узнавал его constexpr значение.
Изменил на такой:
template<typename x___> concept if_and_is_some_bool = ((x___⚹)0)->is_some_bool();.
Но тут разыменование(без доступа к чужой памяти) нуля как макросе offsetof, которое хоть вроде как и работает в
большинстве случаев, но всё же UB. Вопрос, есть ли способ правильнее?
> Пересядь с зондированного говна на операционную систему (Линукс), например, там ты так закастомизироваться сможешь, что все ядро вместе с гуем на стартапе будут жрать по 100-150 MB вместо 3 GB в винде.
Найс манямирок. Линупс с голым ядром 5.0+ без гуя жрет минимум 120, без systemd можно до 90 ушакалить.
А ты в курсе сколько жрет Windows Server 2019 Core? 140 мб. С гуем, правда без рабочего стола.
Эх, щас бы в 2020 мегабайты озу не в жава треде посчитать...
>кросскомпилируешь
Неужто всё так просто? А что по либам виндузятным? И как тестить в любом случае?
Ну винда в виртуалбоксе будет нужна, да. Я к тому, что никакого виндо-специфик кода или виндо-специфик хуйни не будет.
Просто не используй линуксовый API во время разработки, а если речь о гуе - QT - кроссплатформенная либа, которая абстрагирует от тебя надобность думать на какой ОС ты пишешь код.
Если в коде должны быть winAPI вызовы помимо всего прочего - поднимай виртуалку и дебажь свою софтину там.
Там же для каждого соединения свой поток. Так чем это не ассинхронность?
https://ru.wikipedia.org/wiki/Переключение_контекста
Когда у тебя будет дохера тредов - все что ты будешь делать, это 24х7 переключать контексты
А асинхронный код буста будет сам этим управлять, не плодя треды? Сам между соединениями переключаться?
Тем, что количество потоков, которая твоя машина может исполнять ДЕЙСТВИТЕЛЬНО параллельно, ограничена спекой твоего процессора.
Формула такова: core per socket * threads per core = количество потоков, которые твой процессор может исполнять параллельно. Превышая это число, планировщик начинает активно дрочить заниматься context switch'ем и все клиенты начинают на пару с тобой потихоньку сосать хуи в постоянно усиливающихся лагах.
да, у тебя дохера соединений на каждом io_context (или чем-то таком), один контекст на тред, и дальше сам контекст все в рамках одного треда шаманит.
Это вообще не трогай, это пиздец.
Давай так, делай пока синхронно, как сделаешь идею - начинай переезжать на асинк. Сразу асинк раскуривать не рекомендую, он лютейший. А корутины так и вообще пиздец.
Ладно. Спасибо за совет. Так а вообще че это? И сильно ли асинк обычный сосет у быстрого?
Круто, но я не раскурил их пока
Кстати, хороший колл, где социум плюсов искать ? Просто уже сталкивался с тем, что пэт проекты дохнут как мухи на то они и пэты, но хотелось бы знать места, где можно найти челов, с которыми интересно и приятно будет кооперировать, может и пэты так быстро убиваться не будут...
Там вполне себе написано. Ты пытаешься использовать winapi без указания версии винды, для которой собираешь. Обычно студия эти макросы сама определяет в файле targetver.h при создании проекта, но у тебя что-то видимо пошло не так
>гд
лучше конечно этого не делать, но дрочи крестовые абстракции - веткоры, дженерики, темплейты. Почитай про компайл-тайм и рантайм специфику крестов. Какие-то популярные части буста. Короче любая книжка по крестам для НЕ начинающих тебе подойдет
Можешь написать как? Так не компилируется: .... = std::declval<x___>().is_S();
В шапке всё есть, но раз ты такие вопросы задаешь, то сразу огорчу тебя - ты не преодолел минимальный порог входа по IQ для того чтобы освоить С++.
Ну, что и ожидалось для джависта
Как вообще сервер может работать на корутинах? Корутины же работают в одном потоке. Вот допустим приходит запрос от клиента, в потоке разбора входящих запросов запускается корутина которая обрабатывает конкретный запрос и тем самым блокирует обработку новых запросов? В чем фишка то я не совсем понимаю.
почему лучше этого не делать?
Я вижу это так. Вот как в потоке разбора входящих запросов получил клиента, отправляешь обработку в отдельный поток, если хочешь, и тут же ожидаешь следующего клиента. Наверное, в примерах просто в один момент времени только один клиент обрабатывается. С корутинами это не связано, корутины это детали реализации.
Есть ли гайд по компиляции? Makefile-ы вот это вот всё
Ну вот мне и интересно на каком этапе там применяются корутины и как они позволяют оптимизировать работу веб-сервера.
>Драйверисты и железячники - это не пересекающиеся скиллсеты
К моему большому сожалению мне приходилось видеть код, который пишут железячники.
кромешный пиздос?
Корутины это кооперативная многозадачность, со всеми её плюсами и минусами. То есть при обработке сессии у тебя будет рассыпана куча точек переключения на другие корутины. Во всяких эрлангах/го они натыканы ВЕЗДЕ. Плюсы: если раньше ты запрос моделировал всякими коллбеками и/или стейт машинами, то с корутинами всё будет просто и линейно, весь стейт компилятор выведет сам. Минусы: если нет точек переключения, то хрен тебе, а не многозадачность.
Получается что для эффективной работы корутин придется писать конструкции типо таки?
BigDbRequestAsync();
yeild();
ReadFIleAsync();
yeild();
...
yeild();
...
Не, как раз этот yield будет внутри каждой асинхронной операции. Пока корутина ожидает результата BigDbRequest, экзекутор выберет другую корутину и начнёт её исполнять. А вот если у тебя что-то только жрущее цпу секунд на двадцать, тогда да, без yield все остальные корутины заглохнут. С вытесняющей многозадачностью это же происходит автоматически.
сопрограммы нужны чтобы красиво решать пару специализированных алгоритмов
но, по видимому нас ждет очередная сильвербуллет фича которой будут решать любые задачи по парралельной обработке данных, пока коммьюнити языка не наиграеться с этими корутинами
Хз, у них там какие-то проблемы с финансами и мутки с лицензиями
Если ты угараешь по десктопопараше то рекомендую шарпы раскуривать. С неткором пятым можно будет кроссплатформенный гуй делать.
>будет
Вся суть шарпа.
>кроссплатформенный
Здесь почти весь тред - идейные виндобляди, у которых даже сервера на винде, лол.
> Вся суть шарпа.
Уже в превью есть.
> Здесь почти весь тред - идейные виндобляди, у которых даже сервера на винде, лол.
Ну вдруг тебе зачем-то потребовался гуй под прыщеось вместо божественной САСНОЛЬКИ
> ЖС макаки изобрели корутины
> 1960-е — 1970-е годы сопрограммы практиковались в некоторых высокоуровневых языках (Клу, Симула, Модула-2)
Ты чо, пёс?! Я знаю Венгерский алгоритм поиска максимального паросочетания минимального веса за O(N^3) !
даже шаблонов не завезли
Попробуй джаваскрит. Он настолько безопасен, что в нем можно делать вообще что угодно.
Вали отсюда нахуй, пёс, со своей скриптопарашей для умственно отсталых школьников
В школе расскажешь.
>Если ты угараешь по десктопопараше то рекомендую шарпы раскуривать.
Говно, qml после xaml как отдушина, несмотря на жопаскрипт.
>Уверен? Желещячники пишут на всяких vhdl, ну или мы про разных желещячников.
Во первых hdl языки бай дезайн уёбищны как раз в плане писать комбинационную логику, то есть какой-то последовательный алгоритм или конечный автомат на них писать норм, а вот когда отдельные кишочки нужно собирать в единое целое виртуальными проводами, в роли которых выступают буковки и параметры модулей - код уже сам по себе превращается в пиздец.
Именно по этому там где можно прогать провода мышкой в гуе - стараются прогать провода мышкой в гуе.
Извинись немедленно.
Где я говорил про драйвера? Там была хрень с COM портом, и железячник решил для себя написать утилиту на шарпах.
Так вот, кто придумал эту блядскую семантику с включающим глобальным glBindHuita?
Почему, если у нас уже есть идентификатор, высраный с помощью glGenHuita не передавать его в последующие функции?
Особенно лоллирует клоунская магия когда что бы копировать из одной хуиты в другую нужно забиндить два буфера с правильными типами а потом такой НУЖНО ТЕПЕРЬ ДУНУТЬ ЕСЛИ НЕ ДУНУТЬ ТО МАГИИ НЕ ПРОИЗОЙДЕТ
glBindBuffer(GL_COPY_READ_BUFFER, vbo1);
glBindBuffer(GL_COPY_WRITE_BUFFER, vbo2);
glCopyBufferSubData(GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, 0, 0, 8 ⚹ sizeof(float));
Почему нельзя было сделать glCopyBufferSubData(vbo1, vbo2, 0, 0, 8 ⚹ sizeof(float))?
Ладно хуй с ним, анальная бинд-акробатика святое, нахуя если мы уже указали что первый буфер мы забиндили как рид а второй как врайт а потом типа такие, неее мы передумали, мы терь из врайта в рид будем копировать?
glCopyBufferSubData(GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, 0, 0, 8 ⚹ sizeof(float));
Я уже не говорю о главном.
Какого хуя я должен совершить UNDEFINED BEHAVIOUR что бы прихуярить входные параметры вершины к шейдеру?
GLintptr vertex_texcoord_offset = 3 sizeof(float);
GLintptr vertex_normal_offset = 5 sizeof(float);
GLintptr vertex_position_offset = 0 * sizeof(float);
glVertexAttribPointer(texcoord_attrib_index, 2, GL_FLOAT, false, vertex_stride, (GLvoid⚹)vertex_texcoord_offset);
glVertexAttribPointer(normal_attrib_index, 3, GL_FLOAT, false, vertex_stride, (GLvoid⚹)vertex_normal_offset);
glVertexAttribPointer(position_attrib_index, 3, GL_FLOAT, false, vertex_stride, (GLvoid⚹)vertex_position_offset);
Алё, кроносы-хуёносы,вы стандарт Си когда свое говноапи высирали, а точнее присерали новые функции поверх имеющихся, вы стандарт языка читали?
Пиздец, любую, АБСОЛЮТНО ЛЮБУЮ ПРОГУ С ОПЕНГЛ И ШЕЙДЕРАМИ ВЕСЕЛЫЙ КОМПИЛЯТОР МОЖЕТ ЗАЩЕКУ ОТХУЕСОСИТЬ.
В opengl 4.4, кажется, завезли bindless, ну, чтоб по айдишкам хуярить. Вообще, да, байндить всякую залупу -- такая мерзость шо пиздец. Ещё все вызовы, как я понимаю, завязаны под какой-то контекст, и без него не получится, например, гонять compute shader-ы. Зато после ебли с этим вот всем, vulkan кажется не монструозной перегруженной тварью, а самым логичным, прекрасным, тончайшим инструментом, которого тебе так не хватало.
Получил фидбэк по заданию, но чота местами не понимаю чего от меня хотят. Помогите разобраться.
https://ideone.com/4dkWRk
-Классы для чтения, классы для парсинга.
Почему не функции?
-Так же хорошо иметь объектную модель данных и ее стерилизовать в XML.
Это как?
//debian, установил Qt c онлайн установщика, qtcreator etc встало, но прик в том, что терминал в ахуе с qmake, то есть, он знает, что оно есть, но где есть хызы
То есть, допустим, у меня есть определённое поведение, если пользователь ничего не вводит, но только, если чел ввёл в консоль что либо, то тогда поведение меняется. Логично предположить, что данный момент должен выглядеть примерно как
getline(cin, str);
if(str == "") {
default behavior;
} else {
extended behavior;
}
Но все мы понимаем, что в данном случае на каждую итерацию нужно будет прожимать ввод в консоль, чего мы крайне не хотим, собственно, есть ли функция/метод классса istream, который говорит о том, что ввод был нажат, и имеет смысл проверить что там вообще происходит ?
Это тебе напрямую к терминалу нужно обращаться
Классы для масштабируемости. Дрочи паттерны, функции по уровню дна находятся где-то в камне на дне.
Второй пункт не понял, лол, но наверное он про DOM говорит
мимошел ссылку не открывал
Не доконца ясно что тебе нужно, чекни std::istream::peek
Переходи на DX, там блэкджек и COM
Попробуйте "conio.h"! Conio.h помогает определять нажатия на клавиатуру с 1986 года. Спасибо что вы с нами.
Дешёвой хуйне -- дешёвая реклама.
себе на ебало ты сблевал, это код-стайл богов, а ты быдло :-)
По твоему другая функция не будет прожимать ввод каждый раз? Если не нужно парсить строку, оставь так.
Засовывание числовой константы в указатель это ID. Было бы UB - Си бы пулей из системного проганья вылетел, там все построено на "указатель содержит адрес памяти"
Гуру C++, помогите.
По идее примеры должны были скомпилироваться вместе с либой. Может ты флаг забыл добавить?
Я это понимаю.
Я хочу начать работать с либой, но не понимаю, как ее компилировать. Потому и спрашиваю, как скомпилять примеры с своим Make файлом.
Как ты компилировал библиотку? Через корневой cmakelists? Там флаг для сборки примеров включён
Я скомпилировал библиотеку и установил. Теперь ее хедеры лежат у меня в /urs/local/include/qxmpp.
Теперь я копирую екземплы с свою директорию (с редактированием #include) и хочу скомпилировать своим make файл, как свой проект. Каким образом мне это сделать?
Еще раз, как скомпилировал? Ты использовал cmake? Есди да, то где-то в папке сборки должны лежать примеры собранные, потому что флаг для примеров включен в корневом cmakelists на гитхабе.
Изучай cmakelists из папки с примерами.
target_link_libraries(${EXAMPLE_NAME} qxmpp)
Вот подключение qxmpp, используй его в своём cmakelists.
Настоящие пацаны пишут без фигурных скобок вообще, в иф/элс блоках должно быть по одному выражению. Если в коде внутри блока больше одного выражения, то код выносится в функцию или лямбду.
Ну тогда придётся прибегнуть к макросам
Что кстати странно, читая джаву нормально воспринимаю такую конструкцию, а читая кресты никогда не могу найти этот ебучий елс когда так пишут
c это у меня символ строки, дальше его необходимо преобразовать в без знаковый инт. При дебаге нашел вот такую непонятную хуйню. Почему оно так не очевидно кастует типы? Сначала в знаковый инт, и потом в беззнаковый. По моему самое очевидное это сначала кастануть в без знаковый чар и потом уже до инта поднимать...
>самое очевидное это сначала кастануть в без знаковый чар и потом уже до инта поднимать
Тогда ты пришел бы с вопросом почему в этом случае x=255.
char c = -1;
int x = c;
Так у тебя тут оба типа знаковые, соответственно нужна только одна операция повышения чара до инта(0xFF -> 0xFFFFFFFF). В ситуации когда нужно знаковый перевести в без знаковый с повышением порядок операций почему-то сначала повышение(0xFF -> 0xFFFFFFFF) и только потом каст в без знаковый(0xFFFFFFFF - > 0xFFFFFFFFu). Логичнее было бы сначала кастануть в без знаковый(0xFF -> 0xFFu) и потом повысить до инта(0xFFu -> 0x000000FFu).
В общем, изучая ООП, пробую перегрузить операторы сложения и присваивания, по итогу что-то работает не так и получая Assertation Failed. ЧЯДНТ?
Кучу сломал, ищи место, где накосячил. Для начала дебагер подруби и нажми повторить
А в нормальном языке програмирвоания занимался бы делом, а не разбирал этот жидкий высер в кучу
Неосилятор, плeз.
копирующий конструктор напиши
Нюансов в крестах так много, что даже самые основы в такую книжку не впихнуть, и неважно, есть база или нет. И эти нюансы порой никакой практикой не покрыть. Можно годами писать лютое UB и даже не подозревать, что идёшь по минному полю, ведь на первый взгляд всё работает.
В других языках за незнание нюансов компилятор даёт тебе линейкой по рукам. Но в крестах компилятор предполагает, что код пишет очень высококвалифицированный сеньор.
Ну хорошо, допустим. Сколько тогда времени в среднем и чисти гипотетически уйдёт на вкат до возможности устроиться на работу джуном?
эээ.. сопрограммы активно исследовались в ранние 70е.. и от них сознательно отказались, не стали встраивать в яп общего назначения
Раз есть база, то где-то полгода-год при условии, что есть дохуя свободного времени, которое готов на это тратить.
>не было в двух самых языках, которые на момент выхода уже казались кастрированными и без нормалных фичей (Паскаль и Си)
>сознательно отказались
Заруби себе на носу - когда у тебя есть класс, среди класс мемберов которых есть хотя бы ОДИН, сука, указатель - пиши конструктор копирования, который делает, сука, DEEP COPY. Иначе ты копируешь указатели и у тебя после конструктора копирования по умолчанию есть 2 объекта, указател внутри который указывают на одну и ту же память, а это UB и в некоторых случаях эксплуатабельная дыра в безопасности.
Ясно, пошёл дрочиться как всё что уж.
>дохуя свободного времени
Это сколько примерно? 5-6 без стагнации часов хватит?
Ну заебись. Теперь точно ушёл. Тонну добра тебе.
У тебя 2 указателя на 1 участок памяти.
Потом ты будешь освобождать память в обоих, вот тебе double free вырисовывается, а это UB.
Или вот другая ситуация - ты освободил память по указателю ptr1, но при этом пишешь в память по указателю ptr2, который еще не освободил. Результат - Use-After-Free, что тоже UB.
KLASS::~KLASS() {
IF (PTR) {
DELETE PTR;
PTR = NULL;
}
}
KLASS::ZAPIS() {
IF (!PTR) {
THROW NE_LEZ_DEBIL_BLJAD();
}
}
>Почему оно так не очевидно кастует типы?
Integer promotion.
Это артефакт того, что PDP-11 загружала байт командой MOVB, которая всегда выполняла знаковое расширение.
Не.
Проверка не нужна, delete корректно обрабатывает nullptr.
https://isocpp.org/wiki/faq/freestore-mgmt#delete-handles-null
речь о академическом рисерче вокруг алгола, ады, etc
в си и паскале сопрограмм уже небыло по той причине что уже была доказана их узкая применимасть и то что те же задачи можно решить другими конструкциями проектируемого языка
Представь, что ты говоришь что 2*2==4 и одновременно кидаешься фекалиями, а тебе говорят что кидаться не правильно, тоже ответишь что суть не в этом?
Ясно, ты не понимаешь концепцию логических блоков. И будешь писать нечитаемую лапшу, ведь стандарт разрешает.
Ты же понимаешь, что выше ПСЕВДОКОД. Значение объяснить?
Каков порог вхождения если начинать сразу с плюсов?
Важно ли знание ин.яз в наличии что то около С1 ?
Важно ли знание всяких математических штук все очень плохо
Насколько востребованы плюсы в обозримом?
Тяжело ли найти работу в будущем?
>знание ин.яз
Да. Upper intermediate как минимум, иначе ты сосешь хуй и не нужен, если вдруг есть шанс на сасный релок.
>знание всяких математических штук
Смотря где. В геймдеве - критично.
>Насколько востребованы плюсы в обозримом?
Плюсы если и сдохнут когда-то, то это случится тогда, когда твои внуки будут кормить червей, так что не ссы.
>Тяжело ли найти работу
Тяжело, ибо знать язык недостаточно, нужно уметь решать задачи, в случае с плюсами, в большинстве случаев, далеко нетривиальные. Если у тебя 0 опыта и это твой первый ЯП - земля бетоном, вкат займет не меньше 5-ти лет как бы ты не усирался.
Boost, Poco, Asio, Opencv, ну вообще скорее принято брать узкоспециализированные либы под задачу.
https://github.com/fffaraz/awesome-cpp
Qt еще забыл, ну это скорее как отдельный вариант c++.
Нечитаемая лапша в виде лишней проверки как раз там и есть.
>Или это самодостаточный язык?
Да. Нет, просто под разные задачи много разных инструментов.
java слишком сильно в бизнес ушла с микросервисами (и сервисами), поэтому spring там повсюду.
С питоном аналогично.
Ну туда я всегда успею. В то же м-видео пылесосы бабкам втюхивать. Единственное в чем я действительно плох так это что не знаю языков. Ну ладно поживем увидим, может через пару лет буду норм," в рай попаду, а вы просто сдохните".
Вкатывайся в веб, анон.
Тебе все эти 5 лет нужны идальные условия и минимум стресса, а в браке это маловероятно (нахуй вообще жениться в 2к20, ну да ладно, этот тред про другое).
Шансы еще больше уменьшаются. Серьезно, катись в веб, а лучше не в прогеры, а в сисадмины - там еще быстрее сможешь вкатиться и будешь зарабатывать так, чтобы хватало на жизнь.
Охуенная тема!
>вкат займет не меньше 5-ти лет как бы ты не усирался.
Всегда было интересно откуда эти цифры берутся. Все разные, у всех по-разному голова работает. Кто-то уже через год-полтора сможет ебашить за 120к, а кто-то и в веб за 5 лет не вкатится.
Пили стори как вкатывался, сколько часов в день и что сейчас пишешь, правда интересно если не троллинг. От подобной херни про 5 лет моя мотивация уже не страдает, но ты можешь её поднять.
У тебя наверняка был опыт в программировании, тут челик полный ноль и не знает что такое переменная. Ни о каких 6-ти месяцах и речи быть не может, у него даже КОКОрочки нету, тупо нихуя.
>>85031
У меня опыт был только в быдлоадминстве, ну и вообще пеказадротом был.
Взял 2 книжки, по очереди читал, писал код 24х7 после и, иногда вместо основной быдлоработы. Ну вот спустя полгода задротства и перекатился, нарисовав себе год опыта в резюме. Реально задрачивал безумно, второй раз такой подвиг я бы не повторил.
Перекатился на тот момент в контору, занимающуюся около РЖД хуйней, писал там всякую хуиту для поллинга датчиков по ком порту, и так далее.
Кококорочки у меня тоже нет. Из моих охуенных приемуещств была все таки нихуевая база в ойти, всякие виндовсы\шлинуксы на хорошем уровне, и английский разговорный (он дико заролял кстати)
Ясно, значит если без задротства это будет год-полтора. Нормально.
x = ++x + x++;
Так x = 13, в чём соль? В том, что x++ возвращает ссылку на переменную, а не копирует её значение или что происходит?
самый досадный разбор
Почему именно в России все так боготворят кресты?
Зайди на /g форчана в их ежедневный тред программирования и посмотри, что и на чем пишут в свободное время cs-студенты западные.
> class type (typically, struct or union), that has ... no virtual member functions
Допустим, у меня есть какой-то "интерфейс" serializable, хочу его реализовать для нескольких структур с кучей полей. Так вот, если бы они не наследовались от serializable, тогда я бы мог использовать aggredate initialization или даже desginated initializers, а что сейчас?! Соси хуй, делай бочку говорят они. Есть конструктор, говорят они. Да это уебище лесное ваш конструктор, если мне надо в структуру напихать 20 параметров, что предлагаете делать - создавать экземпляр структуры и заполнять его?! Цука, чому деды-пердуны так сделали, поясните?
Про CRTP я знаю, это к чему здесь?
Используй list initialization. Нужно добавить конструктор который принимает std::initializer_list.
initializer_list должен состоять из однотипных объектов, разве нет?
Единственное, до чего я додумывался - унаследоваться от serializable и от структуры и принимать эту структуру в качестве аргумента конструктора, но получается уебищно.
Есть мнение, что это как-то связано с указателем на vtable. Как - в душе не ебу.
Я прохожу курс по алгоритмам на плюсах, но там даётся си подмножество. Как мне проще всего перестроиться на какой-то нормальный стандарт и на какой именно лучше всего?
Хз, вроде работает.
>если мне надо заполнить структуру, что предлагаете делать - создавать экземпляр структуры и заполнять его? Цука, чому деды-пердуны так сделали, поясните?
Поехавший
Блядь, не каждый разраб в геймдев сидит физику прогает, там дохуя ещё задач нужно решать, чего ты такой тупой?
Наоборот. В инди, где людей мало, одному человеку есть шанс поработать над многими системами в игре. А в ААА можно одну свою гайку крутить джва года и вообще понятия не иметь, что там в остальной игре творится.
Ну если под инди-парашей не понимать лепку в конструкторе, конечно.
Лисп самый мощный язык программирования на свете, анонэ~
Ты правильно понимаешь.
тогда рекомендую забить хуй на немецкий. У меня дружаня в германии живет, с английским нормально
Не, немецкий охуенен. Буду учить его.
Чего тебе в этом треде не сидится, перекатчик?
Бля, я не один такой.
Wut
По codeblocks подскажите: если мне надо приложению создать GUI то надо ставить wxWidgets ?
>for (i = 0; i!=n; ++i)
> for (j = 0; j!=m; ++j)
> if (nm[j] == a)
Анон, почему у старуструпе такая странная конструкция? Почему не "i<n", "j<m"? Это же безопаснее?
Мне после сишечки это пиздец как мешает, какой-то нубский вариант. "Меньше" и "не равно" это совершенно не однохуйственно. Реально в шоке, что такой общепризнанный авторитет в области разработки сложных и боевых программ пишет такой код.
А правда что в реальной разработке за использование BOOST ебут в жопу?
И что делают за использование STL?
По идее и стандарту должно же оптимизировать. Но это пиздец во все функции вставлять
они нужны в некоторых местах. Но не везде. То есть выключить на уровне компилятора всеже нельзя, но и в 90% кода исключения не обрабатываются, вот это думаю пометить noexcept...
Но есть ли смысл...
vim конечно. Ну ил vs code.
>Нет причин делать этого.
Вообще-то оно уменьшает количество асемблерного кода
https://habr.com/ru/post/164221/
Можешь завести привычку сначала хуйнуть noexcept, а потом подумать, мол, вдруг бросаешь (ведь почти никогда не бросаешь). Собственно, всё, как с const. Лишним никогда не будет, плюс уточняет намерение. Компилятор, конечно, умный -- если может, везде проставит const и noexcept сам, но это только если он сможет. А может он, только если код не сильно сложный.
Вон тебе ниже сказали юзать нормальный текстовый редакторvim. Потрать время на освоение cmake. Для гуйни можешь цеплять qt, остальные варианты как-то ну его нахер. Хотя, если тебе что-то несложное надо сделать, прототипчик быстро нашлёпать, или реалтайм гуйню, можешь попробовать imgui, ваще пушка ебать.
Если ты всё-таки собираешь ставить сраную IDE не еш подумой, то выбирай Visual Studio, это хотя бы нормальный инструмент для людей. Ну и ещё, гуйня, которую ты пишешь, от IDE никак не зависит. Шлёпать qt из-под VS, собирая cmake-ом -- стандартная практика.
в имаксе это тоже редактор вообще-то, там просто куча всего другого, это считай как мини-ОС.
Профилировать можно независимо от вима, равно как и отлаживать программу. Ты же не профилируешь код в сойблайме, верно? Заводишь какой-нибудь gprof и заебись.
куча всего другого, помимо редактора*
текстовый редактор, который есть в имаксе, ничем по функционалу не отличается от вима, с разморозкой. Лет 15 назад это было не так, но не сейчас. И оба расширяются плагинами. Напомню, что есть Nvim, который полностью совместим с обычным вимом, где есть поддержка плагинов на Lua и в целом больше полезных и крутых плагинов, чем в обычном виме. Анону 0 смысла нырять в имакс, если ему нужен ТОЛЬКО текстовый редактор, который лучше зумерских сойблаймов и вскодов.
Ах да, я работаю с юникс-лайк ОСями с 2001 года (конкретно с Линуксом - с 2003), так что называть меня ньюфагом - очень сильное заявление :-)
В чем разница между рассматриванием циферок в окошке и в консольке? Или для запоминания 10-15 интуитивных команд в виме оперативки в голове не хватает? Во поколение пошло...
Да всё, успокойся, никто не трогает твой швитой ебакс. Почему соснольщики всегда так сгорают на ровном месте.
зы*
я предпочитаю вим вообще-то
Спасибо.
Может мне ещё и плату распаять для этого? Не понимаю, зачем это жонглирование велосипедами
Мсдос
В смысле? Храни один vector<hui>, а остальные vector<hui★>.
На миллионе элементов потребление памяти 4мб на параметр. Если миллиард, то решай сам, что проще - закупить 8гб оперативки или сортировать на лету
Для тех, кто боится намотаться на висящие указатели и инвалидацию итераторов - boost::multi_index
Ну смотри, у тебя объект вектор, vector<int> v. Он расположен на стеке.
Как же тогда в него можно затолкать неопределенное количество интов? Просто вектор имеет внутри себя указатель на участок памяти, выделенный уже в куче, и знает размер этого участка (capacity) а также количество элементов хуйни, которое ты в него плолжил (size).
Вот скажем есть вектор с тремя элементами (пикрил-1) и ты сохранил указатель на третий элемент. И элемент по этому указателю нормально доступен. Тут в вектор добавляется четвертый элемент и кладется в конец участка памяти (после третьего) и всё пока в порядке - по *ptr всё ещё можно добыть третий элемент.
Но тут ты добавляешь пятый элемент (пикрил-2). Вектор видит что капасити=4 меньше 5, то есть не лiзiт!, выделяет себе второй кусок примерно в два раза больше текущего, копирует(перемещает) туда все четыре элемента, которые уже есть, и кладет за ними пятый. А старый кусок памяти УДОЛЯЕТ. К хуям.
Ты лезешь получить третий элемент по указателю ptr, а получаешь по ебалу UB. Это в общих чертах и есть инвалидация итераторов, и указателями снаружи её обойти нельзя, потому что каждый контейнер дрочит свою память как хочет.
Очень удобно на деле.
Наверно потому что это довольно просто и прокатит если вектор не увеличивается или заранее сделан reserve нужного размера ШОБ НИДАЙБОХ.
Если опасаешься, можно хранить не указатели а индексы. Но все равно поломается, если сделать хотя бы одну вставку/удаление в середину.
Ну может создать искомый вектор всех карт, туда только пушить, а для параметров векторы индексов? Тогда вроде все ок
Блин, не искомый, а исходный
Вероятнее всего я так и сделаю
> Но все равно поломается, если сделать хотя бы одну вставку/удаление в середину.
std::lower_bound
Итак, вопросы:
1)Стоит ли делать ли это на структурах или классах и почему?
2)Если на структурах, то что лучше: массив структур-точек или структура-множество-точек из массивов?
А никто не говорил, что оригинал отсортирован. Алсо повторить lower_bound N раз для запроса ничем не лучше собственно сортировки.
1) Классы без трехэтажного виртуального наследования как правило ничего не тормозят.
2) struct-of-arrays вроде как быстрее array-of-structs, и это почти то же самое что хуйнуть три массива флоатов без структуры вообще.
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 СТРОК СООБЩЕНИЙ ОБ ОШИБКАХ, компилятор скончался от ЛЕНИВЫХ ВЫЧИСЛЕНИЙ ПРЯМОЙ КИШКИ и из монитора вылетела ЛЯМБДА. Придерживая круглые скобки квадратными скобками, ЛЯМБДА в ужасе съеблась под ближайший камень. Ей еще долго не захочется принимать и возвращать значения. Довольный СТРАУСТРУП плюнул в руку, чтобы наслюнявить хуй и уже решился залезать на мамочку, но передумал и решил вначале запостить эту историю на БАЙТОКОВЫРЯЧ.
TL;DR но какая мораль, рыгло?
Хотя нет, со второй части проигрывал гораздо больше (зная о чем книга MODERN C++ DESIGN)
Жил-был АНДРЕЙ АЛЕКСАНДРЕСКУ. У АНДРЕЯ всё всегда было через ЖОПУ. Мать АНДРЕЯ была наркоманкой. Список ее психических расстройств, венерических заболеваний и наркотиков, на которых она сидела, был длиннее типичного ресторанного меню. Когда пришло время рожать, каково-же было удивление врачей, когда АНДРЕЙ вылез из ЖОПЫ и каким-то образом умудрился убить и частично съесть двух медсестер. АНДРЕЙ был трудным ребенком. Когда АНДРЕЙ еще находился на лечении, на пятнадцатом году шоковой терапии и после второй лоботомии, он вдруг направил свое внимание на языки программирования. Большую часть дня, АНДРЕЙ бился головой о стену, пытался откусить кусок своего тела и ел свои экскременты. Но в перерывах между приступами, АНДРЕЙ листал книги и искал... Он прочитал про десятки языков программирования, но они не вызывали у него никакого интереса, потому что, они не были достаточно извращенными для его тонкого вкуса. Внезапно АНДРЕЙ увидел ВЫЧИСЛЕНИЕ ЧИСЕЛ ФИБОНАЧЧИ ВО ВРЕМЯ КОМПИЛЯЦИИ НА C++ и замер. В его уставшей, больной голове что-то щелкнуло - он нашел, что искал. Он начал читать книги по C++. Чем дальше он проникал в тайны C++, тем больше он понимал, что этот язык создан для него. Мерзкие извращения, которые он наблюдал на страницах, глубоко резонировали с его истерзанной и едко ненавидящей все светлое душой. Его глаза наливались кровью от удовольствия и слезы текли по щекам, от осознания, что на свете есть люди, не намного менее больные, чем он. АНДРЕЙ понимал, что скоро ему сделают третью лоботомию и тогда он вряд ли сможет написать книгу. Времени до третьей лоботомии оставалось немного и АНДРЕЙ решил начать писать книгу прямо сейчас. "THE TIME IS NOW, ANDREI", сказал он вслух самому себе на ломаном английском с выблядски кривым акцентом и начал писать. Вначале он не знал, в чем суть того, что он пишет. Но со временем картина стала ясной как день. АНДРЕЙ взял самый гнилой, уродский и омерзительный язык программирования и решил довести его до уровня сумасшествия, до сих пор невиданного в мире людей. Первый (и последний) технический рецензент его книги, сошел с ума и убил всю свою семью, после прочтения нескольких глав. Узнав об этом АНДРЕЙ смеялся, пока не потерял сознание. АНДРЕЙ понимал, что все идет как надо. Сразу после того, как он дописал последнюю главу, ему сделали последнюю лоботомию и писать книги ему больше не хотелось. Представители издателя взяли книгу АНДРЕЯ и, согласившись ее издать, спросили у него, как бы он хотел ее назвать. На ломаном, кривом английском он ответил: "MODERN C++ DESIGN: GENERIC PROGRAMMING AND DESIGN PATTERNS APPLIED BY ANDREI ALEXANDRESCU". Его акцент был настолько уебищен, что представители издателя начали ржать, с такой силой, что моча начала струиться по их ногам. Но, слишком поздно они поняли, что это была моча АНДРЕЯ. Они не знали, что таким образом он помечает своих жертв, перед тем, как их убить. АНДРЕЙ успел убить одного, но другому удалось спастись, хоть он и лишился уха.
Через несколько лет АНДРЕЯ выпустили. 20 лет шоковой терапии и 3 лоботомии, все-таки, смогли немного успокоить его. Он, конечно продолжал убивать, но редко, и в основном мелких грызунов.
Наступил обычный, скучный день. Скучным он мог быть для кого угодно, но не для АНДРЕЯ. Ведь у него диагностировали шизофрению еще на внутриутробной стадии. Книга продавалась не особо хорошо. В мире оказалось не так уж много запредельно больных людей, готовых ее купить. Уже 2 месяца у АНДРЕЯ почти не было денег и он ел блюдо собственного изобретения - ТУАЛЕТНАЯ БУМАГА ПО ФЛОТСКИ. Блюдо представляло собой собачий корм с вареной туалетной бумагой. Роялти с продаж книги капали ему на банковский счет, но очень вяло. АНДРЕЙ уже отошел от третьей лоботомии и решил взять дело в свои руки. Он положил в сумку с десяток экземпляров MODERN C++ DESIGN и пошел на улицу, с надеждой продать хотя бы несколько. Хотя бы один. Если это удастся, то наконец можно будет купить КЕТЧУП. Подумав о КЕТЧУПЕ, АНДРЕЙ улыбнулся, но повернувшись, чтобы открыть дверь, увидел свое отражение в зеркале. Выражение лица, которое получилось из за улыбки, было настолько ужасающим, что АНДРЕЙ отшатнулся. Он вышел на улицу и стал бродить по улицам. АНДРЕЙ увидел здание, в котором было множество компаний по разработке программ и направился к нему. Там АНДРЕЯ уже знали и вызвали охрану раньше, чем он успел войти. АНДРЕЙ удивился, потому что он никогда не был здесь. Из здания вышел человек и сказал АНДРЕЮ, чтобы он убирался. Человек объяснил, что однажды, один из программистов, работавших в здании, купил себе MODERN C++ DESIGN и принес на работу. Прочитав 5 страниц, этот человек обезумел и успел убить трех коллег, до того как натолкал себе в жопу скрепок и повесился в полностью пустом помещении. После этого, запятнанную кровью книгу, подобрал другой разработчик и цепь событий повторилась. Как вирус, книга распространялась по всему зданию. В результате этой бойни, 30 человек погибли ужасными смертями, перед тем, как кто-то сообразил, что нужно уничтожить книгу. АНДРЕЙ понял, почему его не хотят пускать, но решил попытать судьбу и все-же проникнуть в здание. С раззадоренным еблом, он попытался пробежать в дверь, но охранник ударил его дубиной по еблу, выбив несколько зубов, после чего добил по яйцам, пнув достаточно много раз, чтобы наблюдающие сбились со счета. АНДРЕЙ сполз с крыльца и потерял сознание.
Очнулся он уже под вечер. Первый опыт продажи был не очень удачен, но может во второй раз повезет? АНДРЕЙ шел по улице, страстно разговаривая сам с собой и вдруг увидел двух человек. Подсознательно он узнал их, но не мог вспомнить. Трясясь от страха он подошел к ним и предложил купить книгу. ПОЛ ГРЭМ и ПИТЕР НОРВИГ взяли его книгу и стали листать. Они поняли, с кем они имеют дело. АНДРЕЙ смотрел куда-то в сторону и незаметил первого удара, который пришелся по голове. АНДРЕЙ даже в начале не понял, что происходит, потому что били его как никогда сильно. Удары сыпались со всех сторон и, услышав хруст своих ребер, АНДРЕЙ осознал, что вероятно, живым ему не уйти. Это осознание ввергло его в истерику, но он ничего не мог поделать, кроме того, как обосраться и изваляться в собственном говне. Увидев это ПОЛ ГРЭМ и ПИТЕР НОРВИГ побрезговали добивать жалкого РУМЫНСКОГО барана и оставили его в покое. Грязно выругавшись, АНДРЕЙ поднялся и пошел по улице. Завернув за угол, он увидел СТРАУСТРУПА, стоящего на одном месте и напряженно о чем-то думающего. АНДРЕЙ осмотрелся, но не обнаружив потенциальных покупателей, развернулся и пошел домой, насвистывая РУМЫНСКУЮ НАРОДНУЮ ПЕСНЮ.
Жил-был АНДРЕЙ АЛЕКСАНДРЕСКУ. У АНДРЕЯ всё всегда было через ЖОПУ. Мать АНДРЕЯ была наркоманкой. Список ее психических расстройств, венерических заболеваний и наркотиков, на которых она сидела, был длиннее типичного ресторанного меню. Когда пришло время рожать, каково-же было удивление врачей, когда АНДРЕЙ вылез из ЖОПЫ и каким-то образом умудрился убить и частично съесть двух медсестер. АНДРЕЙ был трудным ребенком. Когда АНДРЕЙ еще находился на лечении, на пятнадцатом году шоковой терапии и после второй лоботомии, он вдруг направил свое внимание на языки программирования. Большую часть дня, АНДРЕЙ бился головой о стену, пытался откусить кусок своего тела и ел свои экскременты. Но в перерывах между приступами, АНДРЕЙ листал книги и искал... Он прочитал про десятки языков программирования, но они не вызывали у него никакого интереса, потому что, они не были достаточно извращенными для его тонкого вкуса. Внезапно АНДРЕЙ увидел ВЫЧИСЛЕНИЕ ЧИСЕЛ ФИБОНАЧЧИ ВО ВРЕМЯ КОМПИЛЯЦИИ НА C++ и замер. В его уставшей, больной голове что-то щелкнуло - он нашел, что искал. Он начал читать книги по C++. Чем дальше он проникал в тайны C++, тем больше он понимал, что этот язык создан для него. Мерзкие извращения, которые он наблюдал на страницах, глубоко резонировали с его истерзанной и едко ненавидящей все светлое душой. Его глаза наливались кровью от удовольствия и слезы текли по щекам, от осознания, что на свете есть люди, не намного менее больные, чем он. АНДРЕЙ понимал, что скоро ему сделают третью лоботомию и тогда он вряд ли сможет написать книгу. Времени до третьей лоботомии оставалось немного и АНДРЕЙ решил начать писать книгу прямо сейчас. "THE TIME IS NOW, ANDREI", сказал он вслух самому себе на ломаном английском с выблядски кривым акцентом и начал писать. Вначале он не знал, в чем суть того, что он пишет. Но со временем картина стала ясной как день. АНДРЕЙ взял самый гнилой, уродский и омерзительный язык программирования и решил довести его до уровня сумасшествия, до сих пор невиданного в мире людей. Первый (и последний) технический рецензент его книги, сошел с ума и убил всю свою семью, после прочтения нескольких глав. Узнав об этом АНДРЕЙ смеялся, пока не потерял сознание. АНДРЕЙ понимал, что все идет как надо. Сразу после того, как он дописал последнюю главу, ему сделали последнюю лоботомию и писать книги ему больше не хотелось. Представители издателя взяли книгу АНДРЕЯ и, согласившись ее издать, спросили у него, как бы он хотел ее назвать. На ломаном, кривом английском он ответил: "MODERN C++ DESIGN: GENERIC PROGRAMMING AND DESIGN PATTERNS APPLIED BY ANDREI ALEXANDRESCU". Его акцент был настолько уебищен, что представители издателя начали ржать, с такой силой, что моча начала струиться по их ногам. Но, слишком поздно они поняли, что это была моча АНДРЕЯ. Они не знали, что таким образом он помечает своих жертв, перед тем, как их убить. АНДРЕЙ успел убить одного, но другому удалось спастись, хоть он и лишился уха.
Через несколько лет АНДРЕЯ выпустили. 20 лет шоковой терапии и 3 лоботомии, все-таки, смогли немного успокоить его. Он, конечно продолжал убивать, но редко, и в основном мелких грызунов.
Наступил обычный, скучный день. Скучным он мог быть для кого угодно, но не для АНДРЕЯ. Ведь у него диагностировали шизофрению еще на внутриутробной стадии. Книга продавалась не особо хорошо. В мире оказалось не так уж много запредельно больных людей, готовых ее купить. Уже 2 месяца у АНДРЕЯ почти не было денег и он ел блюдо собственного изобретения - ТУАЛЕТНАЯ БУМАГА ПО ФЛОТСКИ. Блюдо представляло собой собачий корм с вареной туалетной бумагой. Роялти с продаж книги капали ему на банковский счет, но очень вяло. АНДРЕЙ уже отошел от третьей лоботомии и решил взять дело в свои руки. Он положил в сумку с десяток экземпляров MODERN C++ DESIGN и пошел на улицу, с надеждой продать хотя бы несколько. Хотя бы один. Если это удастся, то наконец можно будет купить КЕТЧУП. Подумав о КЕТЧУПЕ, АНДРЕЙ улыбнулся, но повернувшись, чтобы открыть дверь, увидел свое отражение в зеркале. Выражение лица, которое получилось из за улыбки, было настолько ужасающим, что АНДРЕЙ отшатнулся. Он вышел на улицу и стал бродить по улицам. АНДРЕЙ увидел здание, в котором было множество компаний по разработке программ и направился к нему. Там АНДРЕЯ уже знали и вызвали охрану раньше, чем он успел войти. АНДРЕЙ удивился, потому что он никогда не был здесь. Из здания вышел человек и сказал АНДРЕЮ, чтобы он убирался. Человек объяснил, что однажды, один из программистов, работавших в здании, купил себе MODERN C++ DESIGN и принес на работу. Прочитав 5 страниц, этот человек обезумел и успел убить трех коллег, до того как натолкал себе в жопу скрепок и повесился в полностью пустом помещении. После этого, запятнанную кровью книгу, подобрал другой разработчик и цепь событий повторилась. Как вирус, книга распространялась по всему зданию. В результате этой бойни, 30 человек погибли ужасными смертями, перед тем, как кто-то сообразил, что нужно уничтожить книгу. АНДРЕЙ понял, почему его не хотят пускать, но решил попытать судьбу и все-же проникнуть в здание. С раззадоренным еблом, он попытался пробежать в дверь, но охранник ударил его дубиной по еблу, выбив несколько зубов, после чего добил по яйцам, пнув достаточно много раз, чтобы наблюдающие сбились со счета. АНДРЕЙ сполз с крыльца и потерял сознание.
Очнулся он уже под вечер. Первый опыт продажи был не очень удачен, но может во второй раз повезет? АНДРЕЙ шел по улице, страстно разговаривая сам с собой и вдруг увидел двух человек. Подсознательно он узнал их, но не мог вспомнить. Трясясь от страха он подошел к ним и предложил купить книгу. ПОЛ ГРЭМ и ПИТЕР НОРВИГ взяли его книгу и стали листать. Они поняли, с кем они имеют дело. АНДРЕЙ смотрел куда-то в сторону и незаметил первого удара, который пришелся по голове. АНДРЕЙ даже в начале не понял, что происходит, потому что били его как никогда сильно. Удары сыпались со всех сторон и, услышав хруст своих ребер, АНДРЕЙ осознал, что вероятно, живым ему не уйти. Это осознание ввергло его в истерику, но он ничего не мог поделать, кроме того, как обосраться и изваляться в собственном говне. Увидев это ПОЛ ГРЭМ и ПИТЕР НОРВИГ побрезговали добивать жалкого РУМЫНСКОГО барана и оставили его в покое. Грязно выругавшись, АНДРЕЙ поднялся и пошел по улице. Завернув за угол, он увидел СТРАУСТРУПА, стоящего на одном месте и напряженно о чем-то думающего. АНДРЕЙ осмотрелся, но не обнаружив потенциальных покупателей, развернулся и пошел домой, насвистывая РУМЫНСКУЮ НАРОДНУЮ ПЕСНЮ.
Во-первых, я так и не понял, каким образом lower_bound может помочь вернуть все записи, отсортированные по параметру..
все что угодно. Арканоид напиши, тетрис, танчики с денди, какой-нить говносервер отдающий погоду, главное пиши.
А то я плюсы пользовал только для спортивного программирования, а там проги максимум строк по 200 кода
ты должен закончить вуз по профилю или быть толковым студентом последних курсов
тебе должно быть лет 20—23
ты должен жить в большом городе где есть фирмы с разработкой на с++
это базовый минимум, иначе пошел нахуй или тупо здохни от голода
используешь любую либу in-memory db, сотни их
Ну, шансов станет сильно больше
Профилирую в соседней вкладке, perf-ом, или tracy цепляю, если gpu профилировать.
>>88016
Нахуя мне тащить сотни мегабайт какой-то непонятной грязной дряни, которая мне для редактирования кода предлагает треть экрана и всратый фейковим? Как вы вообще работаете, когда нихуя не видно нормально, ни код, ни процесс компиляции? Тот же вим я юзаю не только потому, что удобные хоткеи и без мыши всё можно делать, а ещё потому, что он сука на весь экран! Перешёл на соседнюю вкладку, а там на весь экран ошибки компиляции вываливаются. Перешёл в соседнюю вкладку, и там gdb запустил на весь экран. Вот это удобно, а не сидеть как дурак блять щуриться хуйню всякую разглядывать.
Вот посмотри на пик. 48 строк кода в фуллхд экран влезает (46 если вкладок много), с приятным шрифтом. Моим глазам на такое приятно смотреть, а на кутешную дрянь больно.
Да, концепты есть, а вот компиляторы свежие не у всех стоят. У меня давно руки чешутся туда концепты впендюрить.
Ты ж сам написал:
> Но все равно поломается, если сделать хотя бы одну вставку/удаление в середину
Вот я и отвечаю: можешь вставлять куда угодно, только в остальные векторы вставляй через lower_bound
> а там на весь экран ошибки компиляции вываливаются
Чювак, у меня лог компиляции занимает несколько мегабайт. Я уж лучше на прямоугольники от жыдбрейнсов или инкредибилда буду смотреть
> > аниме
хах мам смотри он анеме))0)
А по поводу тёмного фона, на вкус и цвет фломастеры разные. Мне лично светлый фон просто неприятен. Экран с тёмным фоном сильно меньше светит, да банально батарея дольше держится.
Да, я тоже подумал, что это симлинк.
С твоей наводки методом тыка определил, что это DejaVu Sans Mono Book 13. Кажется. пхехехехех
Попробовал, какой-то он слишком узорчатый. Неудобно будет, мне кажется. Но красиво.
Симпатично, но как-то формы буков, как бы сказать, насыщенные чересчур. Типа узорчатые, да.
Спасибо, учёл твоё невероятно важное мнение. Было бы совсем замечательно, если бы ещё что-нибудь по факту сказал.
Поправил, в принципе даже чем-то интереснее получилось, чем Dejavu Sans Mono Book
МимоШкила без образования
T max(T a, T b) {
return a > b ? a : b;
}
template <> box max(box a, box b) {
return a.volume > b.volume ? a : b;
}[/code]
Эти шаблоны чем противоречат друг-дугу? Вроде одна общая, а другая специализированная, но компилятор ругается. box это структура.
В книге говорится что необязательно так указывать, по формальным параметрам и так понятно. Но пробовал указывать, не компилируется.
error: call of overloaded ‘max(box&, box&)’ is ambiguous
Почему в логе показывается аргументы как ссылочные?
Ты нахуя на асме пишешь?
Потому что упоминание переменной идёт как ссылка. Намути у max сигнатуру T max(T const &a, T const &b), заработает.
> книге говорится что необязательно так указывать, по формальным параметрам и так понятно.
Стандарт не уточнён?
Всё safe.
вроде 98 или 11
Бля, а слона-то я и не приметил. Как-то по инерции не на вопрос ответил, а сказал, как надо делать. Ну хоть анон про ссылки узнал.
>using namespace std убери, его макс мешает.
А почему мешает? В стандартной библиотеке же нет перегрузки под тип box. Компилятор должен был использовать мой шаблон и не выпендриваться, не?
Без разницы, все равно все читать придется
Он пытается инстанцировать оба шаблона, и не знает какой выбрать.
Забавно, что в проге на скрине есть баг. Можно сказать, символично.
> in the definition of a class or class template, if a base class depends on a template-parameter, the base class scope is not examined during unqualified name lookup either at the point of definition of the class template or member or during an instantiation of the class template or member
Кто это говно придумал?
Нормально всё.
>>87735
>>87729
Анон, поясни за итераторы.
Если я правильно понимаю, то на чистой сишке можно совершенно спокойно добиться того же, но с некоторыми отличиями:
- На си код логичнее и прямее, так как и на с++ нужны указатели
- Итераторы- просто сахарок и абстракция, в данном случае необоснованная
- Городить целый раздел для такой простой концепции перебора, который нужно писать чисто прикладным, а не обобщенным - это аутизм. Это как написать целую функцию HelloWorld, которая вызывается Hello(int k) и печатает HelloWorld k раз. А потом на серьезных щщах рассказывать об этом на конференциях.
Что за хуйня??
Когда у тебя будет контейнер сложнее чем непрерывный кусок памяти - вот тут то тебе итераторы и потребуются.
>Итераторы- просто сахарок и абстракция, в данном случае необоснованная
Конечно обоснованная.
Вот у меня есть big_integer, а у него есть битовые, байтовые, вордовые итераторы, я могу ходить по нужным кускам с очень простым юзер-кодом
Допустим.
Но разве именно в твоем примере не проще и понятнее работать со сдвигом по указателю?
На мой взгляд, взаимодействие с совершенно разными контейнерами, реализация которого спрятана под капотом, и не имеющая явных преобразований - являет собой просто цунами трудноуловимых багов.
Я, повторюсь, понимаю концепцию и причину появления "итераторов", но я как видно не достаточно понял реальное приминение.
*применение
Как разобраться, когда использовать строгие и нестрогие условия, пре- и постинкременты? Вдруг я ошибусь и сделаю неверное число итераций?
Извини, но такое ощущение, что C++ это специально для тех, кто хотел бы C#, но любит ебаться стоя в гамаке.
У этих языков абсолютно разные задачи и области применения, о чем ты вообще говоришь
>цунами трудноуловимых багов
Честно, я даже не очень представляю что ты тут имеешь в виду. Какая разница, сделать std::next(iterator) или условный list_next(current_node). Код всё равно по сути одинаковый будет, и если есть баг в одном месте, то будет и в другом.
>не имеющая явных преобразований
Итераторы жёстко типизированы. Ты с forward_iterator ничего лишнего не сделаешь.
>at the point of definition
Всё логично и понятно, мы вообще ничего не знаем о базовом классе и окружении.
>or during an instantiation
В теории тоже понятно. Переменная не dependent name, и компилятор пытается сразу её зарезолвить, что приводит к фейлу. Используй "using Base<T>::x" или this->x
через абстракцию итератора ты можешь писать обобщенные алгоритмы работающие с разними контейнерами
более того, итератор позволяет обрабатывать не все содержимое контейнера, но часть его
более того, итератор может быть и не по контейнеру!, но при этом ты все также его можешь запехнуть в тот обобщенный алгоритм обработки
Это тематика. И мы здесь до 1к сидим уже год.
Годно, уже сутки с ним работаю, очень приятный, спасибо.
Когда ебались мы с сиплюсплюсом (и товарищ степанов придумал STL) - сишарпа еще в проекте не было.
Например есть 3д модель и мне надо обсчитать перепады температуры и соответствующие деформации в некоторых точках.
Точек много, очень много.
Питон - не вариант, будет работать несколько дней.
С++ код для этого приложения работает, но прикол в том, что прямо скажем, этот код просто пиздец.
Как результат - переписываем все на чистых сях, со списками и указателями, gdi и winapi. Которые сами по себе сишные сущности, все обертки типа mfc - говно.
Конечно хотелось бы писать на плюсах, но я не вижу преимуществ. В чем преимущество?
С++ для разных нужд различаются между собой почище чем с++ и с89.
Хз короче, я не программист.
Короче, ща сложна будет
Вот сижу я и потихоньку ковыряю openGL под с++. Научился выводить, вращать, масштабировать, перемещать и прочее кубики обтянутые текстурой. Отлично думаю. А чего бы мне не ебануть этакий конструктор, типо, лего? Кубики можно сцеплять друг с другом. И вот чот я придумать не могу, а как это вообще реализовать, с точки зрения архитектуры? Кто и где будет выравнивать один кубик на другом и вот это вот все?
Вроде в голове мысль, что держать трехмерный массив, в который и заталкивать эти кубики, прямо буквально, одна три дэ клетка массива - один сегмент блока. Ну а в opengl уже срать вершинами из этого массива.
Как идея? Хуета? Кто, что получше посоветует?
Например трабла:
есть буфер бинарных данных из 100 байт, есть его длина - хранится в двух байтах, и соответственно мне нужно когда отправляю свой "кастомный пакет" - мне нужно чтио бы сначала в пакете были два байта длины, а потом все оствальное тело. Тоесть нужно склеить бинарник длины тела, и бинарник самого тела. В node есть функци для этого, ноони работают как кривая магия.
Сорр, зза криво сформулированный вопрос - я пока что даже сформировать нормально не могу - не хватает понимания.
>В node есть функци для этого, ноони работают как кривая магия.
Функци работают конечно правильно, просто я их юзаю криво, не вдупляя че и зачем.
Ты тупой?
Всё так
существует куча прикладного софта, которое делает 3d визуализацию
используй его и все для вывода результатов
скорей всего также есть софт который считает и перепады температур с деформациями
по итогу у тебя будет пара скриптов или плагинов к этим прогам и все
минимум ебли
От конкретного опыта зависит, ты может вообще шлепаешь условный фронт на qml и js, а бек на крестах другие делают.
k&r, особенно там в конце есть задание по реализации своего malloc, обычно новичкам очень полезно для научения раскладывания байтиков по памяти
глянь как спроектированы высокоуровневые обертки над тем же opengl, какие там архитектурные решения применены, общая цель у них одинакова - повысить уровень абстракции что облегчает прикладное использование
На leetcode есть задачка - удалить n-й элемент с конца односвязного списка.
Объясните плес почему не работает второй вариант
А если серьёзно, какие перспективы у современной Эмбракодеровской версии этого IDE? Кто нибудь вообще сейчас в ней работает.
Знакомый формошлёпит на этой хуйне, там вроде недавно даже c++17 завезли, хотя один хуй если пользуешься билдером, то хуй ты когда на c++17 перейдешь
Хочу лично для себя разрешить извечный спор - линукс или винда и код/студия/clion.
Винда+студия братья навеки
arch + vim + zsh + powerline + g++ + gdb + gprof + valgrind
Только снаружи актуальна, я вот просто "программирую", в том числе очень лоулевельные вещи, не вижу смысла вешать ярлыки.
Винда, студия, решарпер.
У меня опыт очень маленький, всё время работал в Code::Blocks. Сейчас пересел на Notepad++, g++ и консольку, подтягиваю фундаментальные знания, ибо память очень слабая
Поменял storage c QVector<MyClass> на QVector<MyClass*>, и заработало.
линукс + вим лично для меня
Мне проганье под Линукс приносит доход + юзер экспириенс мне больше в Линуксе по душе, за многие годы многое сделали для простых смертных, даже в игры на Линуксе стало куда проще играть, порой даже вино не нужно (сам не ГЕЙмер)
В С++ есть обертки - та же парадигма RAII. Ну и есть managed языки типа джявы, сисярпа, пездона - там вообще об управлении памяти думать не надо. Но managed языки не для всех задач, поэтому нужда в байтоебах будет вечна, так как существуют уровни абстракций между железом и софтом, и кто-то на нижних слоях абстракций должен мутить мутки, иначе никак, бро.
Винда, линух, кюткреатор, студия, кодблокс. Нотепад++ как вспомогательное для бойлерплейта слишком простого для питона.
>парадигма RAII
Если честно - ни о чём не говорит ибо только-только вкатываюсь. Просто интересно насколько сейчас всё лучше по сравнению с тем временем когда этот ярлык байтоёба зародился.
В смысле? Байтоеб есть байтоеб, что 20 лет назад, что сейчас, что через еще 20 лет. Байтоеб - это кодер, пишущий код на малом кол-ве абстракций над железом, лоу-лвльщик, грубо говоря. В идеале байтоеб должен писать код в пространстве ядра (дрова, например) или же вообще прошивки. Юзер-спейс макаки - это байтоебы-полукровки на самом деле. Ебать байты можно и там, конечно же, но ответственность нулевая, так как в пространстве пользователя тебе по кд подтирает жопу операционная система. В пространстве ядра в случае твоих кривых клешней может и BSOD/kernel panic (смотря что за ОС) вылететь.
Ясно-понятно. Значит со временем от похода к проститутке можно будет отказаться. Буду продолжать вкатывать один хер, спасибо.
>Значит со временем от похода к проститутке можно будет отказаться
щито
Кстати, если ты живешь в странах бывшего совка - тебе, как байтоебу, придется туговато. Это я так, чисто даю предупреждение на опережение, чтобы ты не терял связь с реальностью. Сразу говорю, что если цель вката - чисто бабки по фасту, не имея особой фанатичной склонности к программированию, то советую вкатываться в веб-макакинг. Подумой, анон.
Если на русской галере то реакт/вуе/рн/электрон
Если на русском фрилансе то ларавел йии вп экспресс
Если на американской галере с Легаси то эликсир/рельса
Если на обычной американской галере то флаттер/реакт/вуе/рн/электрон
Если чистить говно за индусами на англоязычном фрилансе то рельса/джанга на втором питоныче/нода
Есть структура
struct Hui
{
int x;
int y;
}
Значит создаю я структуру с x = 0, y = 0. Затем передаю эту структуру в функцию по значению
int obrezat (Hui h)
и что бы вы думали? Ставлю бряк на первой строке функции, смотрю чо у меня передалось, а там мусор, вместо нулей, почему?
Это что такое?
Если ты ничего не утаивал, то похоже на баг в компиляторе, попробуй свой код в онлайн-компиляторе запустить.
А по ссылке нормально?
это здесь ни при чем
Ты немного неправильно смотришь, чекай пикрил.
Находясь УЖЕ внутри тела функции obrezat, ПОСЛЕ пролога функции идет обнуление членов структуры (до этих двух инструкций в локальной структуре реально был мусор).
Компиль - g++, но я думаю, что так работает и в остальных.
Охуели что ли? Какой нахуй баг в компиляторе? Это в лучшем то языке?
>А по ссылке нормально?
По ссылке вроде нормально
>>91694
>Код в студию
Пикрил. На первом я тормознул до передачи в функцию, чтобы показать анонам, что честно-честно передаю структуру с нулевыми значениями. На втором я тормознул уже внутри функции.
>>91726
Пикрил
> Охуели что ли? Какой нахуй баг в компиляторе? Это в лучшем то языке?
Уноси свое говно C++/CLI туда, откуда принёс. Здесь мужики жабу на кресты не пытаются натянуть, нет, тут другие нравы произрастают.
Интересует вопрос не оптимизаций, поддержки стандартов и прочее, а скорее унификация работы.
Ведь кланг есть подо все платформы, а с гцц нужно трахаться для шиндовса хоть я и использую на нём msys.
Может нахуй послать гцц и пользоваться клангом?
За шлангом будущее
Почему ебнутый? Чо ты взорвался то на ровном месте?
Для тебя минимум ебли.
Я не программист и мне чем разбирать каким местом прикручивать плагины гораздо проще написать свое.
std::string это <char>
Это шаблон на char, и способ хранения зависит от реализации.
memcpy МОЖЕТ привести к неопределенному поведению, если у тебя руки из жеппы. Просто контролируй размер буфера куда ты копируешь байты и все будет норм.
> memcpy МОЖЕТ привести к неопределенному поведению, если у тебя руки из жеппы.
Лол, половину функций так можно охарактеризовать. Почему тогда я тут по поводу этой функции срачи видел?
Это что такое? >>91622
>ряяяя, с++ крута, напрямую с памятью работаешь, байтоебишь, шарп сасадъ
>пук среньк это компилятор глючит или ещё чего, хз короче
охуеть, блядь, почему в шарпе такой срани нет? Какого хуя структура в функцию по значению с мусором передаётся? Как вообще на ваших крестах проблемы решать?
Начнем с того, что у тебя там не настоящие кресты, а противоестественный гибрид С++ и С# от микрософт. С навернутым поверх гарбадж коллектором и хуй знает чем ещё.
Одному сотоне известно как там что работает, особенно учитывая любовь мелкомягких к соблюдению стандарта (нет). Именно поэтому ты был послан нахуй. Так-то.
>Начнем с того, что у тебя там не настоящие кресты, а противоестественный гибрид С++ и С# от микрософт. С навернутым поверх гарбадж коллектором и хуй знает чем ещё.
Ты можешь внятно объяснить, что у меня не так? То что я студию использую? Или что? Я ж тебя уже просил нормально пояснить, тебе чо, трудно что ли?
Проверь что в студии ты не создал проект С++/CLI или не поставил флаг /cli компилятора.
Я надеюсь, ты сделал это случайно. Если и правда надо писать именно на нём - да поможет тебе бог.
>Проверь что в студии ты не создал проект С++/CLI
Я пустой проект создал.
>не поставил флаг /cli компилятора.
Где это посмотреть?
>Если и правда надо писать именно на нём
Нет, мне похуй в принципе, лишь бы в студии, так как привык к ней с шарпа. А с чего ты вообще взял, что у меня cli это используется? И что это такое, поясни в двух словах, плес
>А с чего ты вообще взял, что у меня cli это используется?
В С++ нет ключевого слова for each.
std::for_each ЭТО ДРУГОЕ надо понимать
А как работает size у flat buffer? Он почему то равен 64, хотя должен быть 9. Он округляется как то? А я блядь сижу думаю че за хуйня.
Контейнер в boost beast
>Ты решил свой вопрос?
Конечно нет, как я его решу? Грят компилятор глючит и чо, как мне с этим бороться? Свой компилятор писать или чо?
Да ебаный ты почешись! Утебя проект не на том языке, ты бы ещё на вижуал бейсике создал и спрашивал, чо это std::cout не работает - баг в конпеляторе наверно. Мне за тебя что ли загуглить видеоинструкцию как создать с++ проект в студии?
Ой блядь зайди на developercommunity и посмотри сам, как не бывает
Блядь, какие видео инструкции? Как не на том языке, блядь? Я зашел, выбрал кресты, выбрал пустой проект, создал файл source.cpp, создал нужный мне hui.h и пишу в нем, блядь, чо еще надо то на хуй? На каком языке я пишу, блядь, тогда? Чо за хуйня с вашими крестами вечно? Почему в шарпе я выбрал проект и пишу код и это шарп, блядь, будет всегда, как не выебывайся. У вас это чо? Как может быть не тот язык, если выбраны кресты и пустой проект? Он чо, компилятор от петухона подключает?
Чо за пердолинг на ровном месте? Где посмотреть и переключить на кресты эти ваши?
Так блядь, уёбище. Прямо сейчас, сука, заливаешь свой репозиторий на GitHub/gitlab/Bitbucket/на небо с Аллахом. Мы всем крестачём смотрим на твой высер и заодно на то, в какую секунду после 01.01.1970 ты обосрался сам и обосрал свой проект.
только не говори, что твой код не в репозитории
(нужно нажать пропертис(ну это так))) ))) )) )) )) ) ) ) ))
Щас бы хеловорды в репозитории лить, лол. Держи исходник. В main() запускаешь mainLoop() и все
#include <vector>
#include <iostream>
struct Point
{
int x;
int y;
bool isAlive;
};
std::vector<Point> gameBoard;
std::vector<Point> bufferGirlNextDoor;
std::vector<Point> bufferNewBorn;
void checkNumForBorn(Point);
void checkNumForDead(Point&);
void checkGirlNextDoor(Point);
void createGameBoard()
{
gameBoard.push_back(Point{ 0,0,true });
gameBoard.push_back(Point{ 1,0,true });
gameBoard.push_back(Point{ 2,0,true });
}
void mainLoop()
{
createGameBoard();
while (true)
{
bufferNewBorn.clear();
for each (Point p in gameBoard)
{
checkGirlNextDoor(p);
checkNumForBorn(Point{ p.x-1, p.y, true });
checkNumForBorn(Point{ p.x-1, p.y+1, true });
checkNumForBorn(Point{ p.x, p.y+1, true });
checkNumForBorn(Point{ p.x+1, p.y+1, true });
checkNumForBorn(Point{ p.x+1, p.y, true });
checkNumForBorn(Point{ p.x+1, p.y-1, true });
checkNumForBorn(Point{ p.x, p.y-1, true });
checkNumForBorn(Point{ p.x-1, p.y-1, true });
checkNumForDead(p);
}
for each (Point p in gameBoard)
{
if (p.isAlive) bufferNewBorn.push_back(p);
}
gameBoard.clear();
gameBoard = bufferNewBorn;
std::cout << gameBoard.size() << std::endl;
}
}
void checkNumForBorn(Point currentPoint)
{
int num = 0;
bool isGirlNextDoor = false;
for each (Point p in bufferGirlNextDoor)
{
if (p.x == currentPoint.x && p.y == currentPoint.y)
{
isGirlNextDoor = true;
break;
}
}
if (!isGirlNextDoor)
{
for each (Point p in bufferGirlNextDoor)
{
if (p.x > currentPoint.x - 2 && p.x < currentPoint.x + 2 && p.y > currentPoint.y - 2 && p.y < currentPoint.y + 2)
++num;
//добавить после тестов if (num > 2) break;
}
}
if (num > 2) bufferNewBorn.push_back(currentPoint);
}
void checkNumForDead(Point ¤tPoint)
{
int num = 0;
for each (Point p in bufferGirlNextDoor)
{
if (p.x > currentPoint.x - 2 && p.x < currentPoint.x + 2 && p.y > currentPoint.y - 2 && p.y < currentPoint.y + 2 && p.x != currentPoint.x && p.y != currentPoint.y)
++num;
//добавить после тестов if (num > 3) break;
}
if (num < 2 || num > 3) currentPoint.isAlive = false;
}
void checkGirlNextDoor(Point currentPoint)
{
bufferGirlNextDoor.clear();
for each(Point p in gameBoard)
{
if (p.x > currentPoint.x - 3 && p.x < currentPoint.x + 3 && p.y > currentPoint.y - 3 && p.y < currentPoint.y + 3 && p.x != currentPoint.x && p.y != currentPoint.y)
bufferGirlNextDoor.push_back(p);
}
}
Щас бы хеловорды в репозитории лить, лол. Держи исходник. В main() запускаешь mainLoop() и все
#include <vector>
#include <iostream>
struct Point
{
int x;
int y;
bool isAlive;
};
std::vector<Point> gameBoard;
std::vector<Point> bufferGirlNextDoor;
std::vector<Point> bufferNewBorn;
void checkNumForBorn(Point);
void checkNumForDead(Point&);
void checkGirlNextDoor(Point);
void createGameBoard()
{
gameBoard.push_back(Point{ 0,0,true });
gameBoard.push_back(Point{ 1,0,true });
gameBoard.push_back(Point{ 2,0,true });
}
void mainLoop()
{
createGameBoard();
while (true)
{
bufferNewBorn.clear();
for each (Point p in gameBoard)
{
checkGirlNextDoor(p);
checkNumForBorn(Point{ p.x-1, p.y, true });
checkNumForBorn(Point{ p.x-1, p.y+1, true });
checkNumForBorn(Point{ p.x, p.y+1, true });
checkNumForBorn(Point{ p.x+1, p.y+1, true });
checkNumForBorn(Point{ p.x+1, p.y, true });
checkNumForBorn(Point{ p.x+1, p.y-1, true });
checkNumForBorn(Point{ p.x, p.y-1, true });
checkNumForBorn(Point{ p.x-1, p.y-1, true });
checkNumForDead(p);
}
for each (Point p in gameBoard)
{
if (p.isAlive) bufferNewBorn.push_back(p);
}
gameBoard.clear();
gameBoard = bufferNewBorn;
std::cout << gameBoard.size() << std::endl;
}
}
void checkNumForBorn(Point currentPoint)
{
int num = 0;
bool isGirlNextDoor = false;
for each (Point p in bufferGirlNextDoor)
{
if (p.x == currentPoint.x && p.y == currentPoint.y)
{
isGirlNextDoor = true;
break;
}
}
if (!isGirlNextDoor)
{
for each (Point p in bufferGirlNextDoor)
{
if (p.x > currentPoint.x - 2 && p.x < currentPoint.x + 2 && p.y > currentPoint.y - 2 && p.y < currentPoint.y + 2)
++num;
//добавить после тестов if (num > 2) break;
}
}
if (num > 2) bufferNewBorn.push_back(currentPoint);
}
void checkNumForDead(Point ¤tPoint)
{
int num = 0;
for each (Point p in bufferGirlNextDoor)
{
if (p.x > currentPoint.x - 2 && p.x < currentPoint.x + 2 && p.y > currentPoint.y - 2 && p.y < currentPoint.y + 2 && p.x != currentPoint.x && p.y != currentPoint.y)
++num;
//добавить после тестов if (num > 3) break;
}
if (num < 2 || num > 3) currentPoint.isAlive = false;
}
void checkGirlNextDoor(Point currentPoint)
{
bufferGirlNextDoor.clear();
for each(Point p in gameBoard)
{
if (p.x > currentPoint.x - 3 && p.x < currentPoint.x + 3 && p.y > currentPoint.y - 3 && p.y < currentPoint.y + 3 && p.x != currentPoint.x && p.y != currentPoint.y)
bufferGirlNextDoor.push_back(p);
}
}
https://docs.microsoft.com/en-us/cpp/dotnet/for-each-in?view=vs-2019
Если бы ты писал на ++, то словил бы ошибок 20 на ровном.
1)Блять, правой кнопкой мыши ConsApp1(у тебя офк иначе название)
2)свойства
вообще-то это уже эпик
>>92332
Да ебаный рот ваших крестов, блядь! На каком я пишу то тогда? Если создал ебаное приложение пустое на крестах, блядь!!!!! Хули компилятор крестовый не ругается на for_each если это зашквар, блядь? А просто молча структуру с говном в рот сует?
Студия мне предложила сразу, как только я fore написал for each этот еще и заботливо показала, чего в скобках хуярить. Умеет ваша параша в foreach(var l in list)?
>который даже не понимает на каком язке он пишет код.
Да я откуда знаю, на каком языке ваш компилятор хавает это с довольным ебалом, а потом срет вонюче? На шарпе если пишешь не на шарпе, так и компилятор тебя на хуй пошлет.
Я понимаю, ты пытаешься, типо, посмеяться, ыыы, глядите, он тупой, я ему, как ребенку все объясняю, только вот пост, который ты процитировал, если взглянуть на скрин, то там уже и выведено окно свойств и там нет дополнительных
короче, кресты в foreach не умеют и надо колхозить for, так? Ну, допустим сделаю, компилиться то все равно хуйня будет, которая структуры по значению с мусором передает в функции
и вообще, cli - нахуй эта хуйня нужна, если она по значению не умеет передавать?
>cli - нахуй эта хуйня
Это "кресты" для дотнета, существуют и поддерживаются до сих пор только по велению левой пятки кого-то из майкрософта. У них вообще таких продуктов много, например есть даже джейскрипт дотнетовский и даже Бейсик лол
Подготавливаешь минимальный пример, иллюстрирующий проблему, выкладываешь в онлайн-компилятор, сюда кидаешь ссылку, решаем твой вопрос.
>Это "кресты" для дотнета
Уже хуйней пахнет, даже для шарписта. Ладно. Допустим я хочу вкатиться в кресты, юзать компилятор для вас православный и при этом студию, мои действия?
>Допустим я хочу вкатиться в кресты
Читать книги из шапки?
>юзать компилятор для вас православный
тут для каждого он свой
>юзать студию
https://docs.microsoft.com/en-us/cpp/build/vscpp-step-1-create?view=vs-2019
(тут уже прям на жир)
>Читать книги из шапки?
Чтобы хеловорд скомпилировать? Читать книги? тут же явно где то ошибка в одной галочке, блядь. Почему в шарпе не надо книги читать, чтобы хеловорд скомпилировать?
>Допустим я хочу вкатиться в кресты
>Читать книги из шапки?
>Чтобы хеловорд скомпилировать? Читать книги?
>.
правильный способ это представлять кусок сырой памяти как vecror из char, а для работы с ним исполтзовать стандартные алгориьмы std, в частности copy
> cli - нахуй эта хуйня нужна
У нее есть достаточно прикольный юзкейс - можно из нативного С++ приложения при помощи CLI-обертки дергать код, написанный на сишарпе. Один раз мне это пригодилось, когда нужная мне либа была только на шарпе.
А так да, говно без задач.
если ты не погроммист то тем более проще заюзать готовые решения, чем писать свою прогу
возможно, твою задачу проще рассчитать и визуализировать в чем-то типа mathcad
в мафкаде, кста, есть отдельная библиотека по тепловым рассчетам
>pepuhon
>print ("helloword")
Мам, тут короче три книги надо, чтобы в кансаль вывести два слова, тут все сложна, указатели надо изучить, для элиты кароча
Странно слушать такой высер от человека, который не мог понять самостоятельно на каком языке он пишет программу. Знаю, книга для тебя слишком сложно, моя ошибка(
Мог бы предложить Гугл или что-то такое, но тут сейм проблема - буквы.
Мам, тут проблема категории /яНеМогуОсилить, тут все сложна, программу нужно скомпилировать, пойду ебать /pr.
string-у поебать на кодировку, он просто хранит массив char-ов. Можно его как контейнер для utf-8 использовать, так часто делают.
>Странно слушать такой высер от человека, который не мог понять самостоятельно на каком языке он пишет программу.
Скомпилировалось? Скомпилировалось! Какие ко мне претензии?
Блядь, старый анекдот - один в один ситуация, когда один покупатель другому говорит в отделе сантехники - да не верь им, я уж и жопу показывал и туалетную бумагу, все равно унитаз не дали. Так же и тут, я уж исходник выложил, а все равно никто не объяснил в чем проблема. Ну перепишу я этот форич и чо, компилятор по другому скомпилирует что ли? При чем тут это вообще, если компилятор крестов мусорными значениями срет? Блядь, да я б уж давно на шарп все это переписал, если бы мне надо было и все бы работало по ф5. Какого хуя ваша залупа не работает, но компилятор жрет без проблем, вот это хочу выяснить и все.
Слушай, за два года в треде ты здесь первый с такой проблемой. Может у тебя в студии дефолтные настройки нестандартные. Попробуй медленно и аккуратно, осознавая сука каждое нажатие на кнопку, создать новый проект console С++ app.
Если ты не тралль, конечно, в чем я уже начинаю сомневаться..
Да мне видимо судьба так и грит, обходи стороной кресты, блядь. В нулевых пытался в кресты, даже книгу купил 21 день и что бы вы думали? У меня самая первая программа не компилировалась, хеловорд из книги, знаете почему? Потому что пидор издатель опечатался. Блядь, в самой первой программе, в хеловорде, опечатался.
Как от нее избавиться? Я хз, создал новый соснольный проект, я в душе не ибу, почему не работают кресты как надо? На чем ты пишешь, хуй с ней, с студией, поставлю другую парашу тогда
На работе пишу в VS code - но там надо изрядно поебаться с настройкой.
Маленькие проекты пинаю в codeblocks, но по СОВЕРШЕННО СЛУЧАЙНОМУ совпадению, сейчас версия под win10 немного сломана.
CodeLite например для хелло ворлда лучше студии (для всего остального - нет)
Открой ту книжку которую ты купил в нулевых и прочитай блджад как заинклюдить хедер.
И ещё раз, ты пишешь не на крестах, а на дотнетовской крестожабной абберации под названием C++ with managed extensions. Адекватным компилятором вроде вижуал си++ то что ты кидал никогда бы даже не скомпилилось
открой установщик студии и удали оттуда рабочую нагрузку .net, а заодно поставь английский язык
С языка снял прям.
Ты тоже извини.
Какой же ты тупой нахуй, это просто пиздец. С++ это явно не твое, раз ты в элементарных вещах не можешь разобраться, я просто хуею с таких даунов. Тебе максимум фронтэнд-макакингом заниматься, аутяра, и то я сомневаюсь, что у тебя получится.
>студия компилирует хуй пойми чем
>ряяя, ты тупой, кресты не для тебя
Я чо, студию эту разрабатывал, на хуй, что ли? Я тут при чем вообще, блядь?
Да мы уже поняли, что если ты себе молотком по еблу стукнешь, то виноватым окажется молоток.
>открой установщик студии и удали оттуда рабочую нагрузку .net
А на нормальном языке программирования шарпе я смогу потом писать?
в 2015 студии нет инсталлера, кстати
Хуй его знает но на крестах точно сможешь
А зачем мне это делать? Любители крестов так развлекаются или чего? Почему в нормальном языке программирования я открыл студию, создал проект, написал код, нажал ф5 и все работает? Почему, блядь, я тебя спрашиваю? Почему пердолиться не надо, блядь? А просто открыл и пишешь код, потом нажал кнопку и все скомпилировалось. Почему, блядь, здесь пердоля на пердоле и костыли какие то?
Clion как вариант не расматриваешь?
Ну а почему ты тогда не пишешь на этих божественных языках? Зачем в c++ полез, головешка ты глупая? Тебя не предупреждали что ли?
Пошёл нахуй короче, дебил.
Я имел ввиду, есть ли какой-нибудь аналог студийного parallel stacks?
без шуток, хотел бы попробовать труъ-консоле-экспириенсъ
> без шуток, хотел бы попробовать труъ-консоле-экспириенсъ
Нахуя? Не слушай даунов с вимом, они борщи хлебают.
Что это и как накатить? Алсо, можно ли там сделать, чтобы содержимое переменных показывалось? И чтобы брейкпоинты запоминались. А то в gdb неудобно всё это.
Тогда моё увожение
Надстройка над gdb. https://github.com/cyrus-and/gdb-dashboard
Удобно разносить компоненты на разные терминалы
Моё почтение.
vcpkg install curlpp
никого не слушай! выбирай сердцем, какая понравиться
откуда вы блядь все берете этот ебанутый кокблокс. Откуда. Нахуя. Кто вам про него сказал. Это мертвое дерьмо мамонта.
Поставь обычную вижуал студию, нахера тебе код.
vim
Неужели научились в гугл?
Ты чё вообще мудак блять? Не можешь своим мелким мозгом версталы додуматься что у кого-то комп может не вывозить студию?
Лол. Я вспомнил еблана, который писал на шарпе и подумал, что имеется ввиду полегче в плане работы с ней. Типо не надо настраивать. Ну vs конечно тяжелая для компа.
Самой хорошей нет, но студия очень мощная и качественная, стандарт индустрии. Если выбирать именно монолитную IDE, то тут не ошибешься.
Я использую vim в 99% случаев, когда один раз всё настроил и тебе понравилось — назад дороги нет.
Он плох тем, что есть вижуал студия. Т.е. нет никакого смысла юзать инфериорный продукт, когда есть нормальный.
А если тебе прям список проблем - то как минимум он нихуя не парсит ничего сложного, и нихуя нового из С++17 (и мб 14, там уже не смотрел).
>Поставь обычную вижуал студию, нахера тебе код.
Анон выше вон поставил обычную вижуал студию и у него код компилятор хуй знает на каком языке собирает, лол
Если ты не умеешь пользоваться инструментом, это не значит, что инструмент хуёвый. Это вполне может значить, что ты долбоёб. Иные и из вима не могут выйти.
>За это время возможно найти работу в области c++ за еду?
Нет.
За это время можно найти время заняться ими.
Легче тогда вкатиться в какой-то другой яп типо джавы найти и работу и потом уже перекатиться в с++ гении? Или как быть тогда?
Так не работает, понимаешь?
Нет никакого минимума
Всё уникально и индивидуально
Открываешь какую-нибудь копеечную джуновую вакансию на hh и смотришь. Если примерно о половине перечисленных требований ты можешь что-то рассказать на условном интервью - шлёшь резюмеху.
A вот и школа после уроков со своими прозрачными терминалами и гавнообоями в тред залетела
До до до, и целый раздел не знает, чо в таком случае делать, но долбоеб анон конечно
Когда никто не отвечает на вопросы уровня блин зачем ваши укозатели у мя в питоныче их нет и мне норм))) это наверное для тебя тоже значит что никто не понимает или не способен объяснить
Ну так ты, раз такой умный и не долбоеб конечно же знаешь, в чем там было дело, да? Но никому не скажешь
Все кто больше года работал в студии знают в чем дело. Конкретно в этом треде — это больше 50%
Нет
Потому что он сложный, а тупорылых неосиляторов гораздо больше, чем умных людей.
Да это ты говно, которое и слилось ожидаемо. А сколько гонору было, а как спросили, так началось виляние жопой и пук среньк
Вот допилят православный v до релиза и раст вместе с крестами пойдут нахуй.
Так он уже рабочий, просто некоторые фичи пока не реализовали, в 2021 уже точно допилят. По бенчмаркам уже даём пососать пиндоскому расту. И он простой как АК47, сразу видно что наш человек делал. По звёздам уже говно-Nim в два раза обогнали.
Наоборот хорошо, потому что тип не всегда пишется. А так у тебя будет забор с типом/без. Объективно лучше чтоб имя везде было на первом месте, а опциональный тип после. Тут же за простоту борются, чтоб не писать однотипную лапшу перед каждой переменной. Можно как в питоне ебашить:
> zalupa := "hui"
Накидайте плез инфы по всяким темлейтам, умным указателям, лямбдам та и вообще всякой хуете, чтобы я ОХУЕЛ от мощи плюсов. Ну или хотя бы писал как на современном языке, а не как на си.
Плюсы не знаю от слова совсем, знаю шарп, хаскель и писал хелловорлд на расте.
только ооп не кидайте, мы типа процедурное программирование изучаем
В гугл, мусор.
>Наоборот хорошо, потому что тип не всегда пишется.
Пидорам со своим var руки бы на хуй пообрывал. Не всегда тип пишется только у пидорасов, которым при встрече всегда в ебало харкать надо
Принцип такой же. Если ты используешь else if, то в самом конце у тебя должно быть всегда else. Если тебе это излишне, то просто новый if
>темлейтам
Пишешь функцию один раз, а пихать в нее можешь хоть чо и она обрабатывать будет одинаково, такой вот полиморфизм местный
>лямбдам
Чо, лямбды в шарпе не изучал что ли? То же самое все
>указателям
юзается чисто для скорости, чтобы напрямую можно было передать адрес, а не объект пихать целый
>чтобы я ОХУЕЛ от мощи плюсов
Ну как, охуел?
for (std::vector<std::basic_string<char>, MyAllocatorT>::reverse_iterator it = v.rbegin(); it != v.rend(); ++it)
{
std::cout << L"Ты хуй\n";
}
В общем плюнул сегодня и решил, семь бед - один ответ. Снес к хуям студию и накатил заново. Все заработало, как часы.
>ряяяя, ты тупой, руки кривые, долбоеб, выкатывайся из крестов это не для тебя
Ссу в ваши самодовольные ебла и сру вам же в глотки
>структура с мусором передавалась.
Не было такого.
Ты объебался там, у тебя наверное copy-constructor не успел вызываться, так как ты на входе в функцию сидел.
Ты, глупый что ли? Я даже скрины постил, что бряк стоял на третьей строке функции, какой вход функции? И как же так вышло, что после переустановки, ровно тот же код заработал, как надо, то есть начал ругаться на for each компилятор и когда на for ( хуй : хуи) заменил, то все скомпилировалось, но передавалась в функцию уже нормальная структура, ведь бряк то я ровно в том же месте ставил
>ровно тот же код
>до этого не ругался на for each, то есть использовался другой компилятор для другого языка
>начал ругаться, то есть используется другой компилятор
>ровно тот же код
Пошёл нахуй, дегенерат. Переустанови ещё пару раз.
Блядь, какой же ты тупой.
Бряк стоял на строке с for each, то есть до того, как еще он выполнялся, так какое значение имеет for each там был в функции или hui pizda? Проект, блядь, один и тот же. Хули тебе не ясно? Просто до этого не ругалось, а после переустановки начало ругаться, как полагается. Я тут при чем, блядь? Если я проект создавал пустой крестовый. Ты можешь сколько угодно тут умничать и щеки надувать, но факт остается фактом, заработало после переустановки, то есть там у майков чего то поломалось, а не я не туда тыкал, не там бряк ставил, не так код писал.
>Проект, блядь, один и тот же.
>компилировалось с for each
>потом перестало
>Проект, блядь, один и тот же.
>Я не тупой, ты тупой
Чудес не бывает, Андрюха.
Если бы доразобрались, в чём там дело было, то можно было бы "факты" надувать. А теперь всё.
Понял, спасибо.
Бампану. Вопрос стоит ли не стоит но через сколько можно вкатиться в ДСе и какие перспективы по зп?
> через сколько можно вкатиться в ДСе
Года 2.
> какие перспективы по зп?
Я бы для начала 60-70к платил.
Я сомневаюсь, что нубу на плюсах больше 50 дадут.
>Проект, блядь, один и тот же.
Представь себе, но проект был ровно тот же самым, что и вчера, без единого изменения. И вот я сегодня переставил студию и о чудо, он перестал компилироваться. Но тупой я конечно, кто же еще
Как же вы заебали с вопросом СКОЛЬКО НАДО ВКАТИТЬСЯ. Столько, сколько ты готов задрачивать. Кто-то вкатывается за полгода, кто-то за полтора, большая часть - никогда. Все зависит только блядь от тебя, и сколько времени ты реально пишешь код дома.
Мы - вкатыши 21 века, привыкай. А если серьёзно то это какую-то мотивацию придаёт. Мне вот программирование само по себе доставляет, а при том что я учу язык на котором в будущем смогу исполнить вообще всё что за хочу ещё лучше. Но вот кулстори от челиков которые вкатились за полгода на норм зп тоже нихуёвый буст дают.
Серьёзно? Настолько высокий порог входа? А на стажировочку что? +- Cпасибо за помощь, кстати
> А на стажировочку что?
Кому ты нахуй нужен на стажировку. На стажировку могут взять только веб-макаку с опытом макакинга.
Код не компилится, хуй не стоит
> Вкатыши настолько доебали?
Да. Это как если бы каждый день спрашивали бы как устроится на завод. Работа хоть и черновая, но кодеров много и можно выбирать.
Ну хочешь еще пожирнее тип поищу. Ты и правда все итераторы так пишешь? Или тайпдефами обкладываешься в каждом файле как даун?
>Пишешь функцию один раз, а пихать в нее можешь хоть чо и она обрабатывать будет одинаково, такой вот полиморфизм местный
Я знаю что такое дженерики. Слыхал, что в плюсах это не просто дженерики, а целый мать его, тьюринг полный язык, на котором даже калькуляторы писали.
>юзается чисто для скорости, чтобы напрямую можно было передать адрес, а не объект пихать целый
Да ладно, в 99% языков обьекты передаются по ссылке, так как так намного быстрее. Но вы же не юзаете сырые указатели, как в си? Должен же быть способ, подобный растовскому?
Это ты типа (no pun intended) предлагаешь вместо указания типа auto поставить? Но auto - это не тип
Авто это автовывод типа, и именно для таких вещей он был сделал
> Вот допилят православный v до релиза и раст вместе с крестами пойдут нахуй.
Хуйня для трёхфайлового проекта
хоть и выглядит очень красиво
Лучше поменяй
Ой да кому ты пиздишь.
Присылают мне пулреквесты всякие джуники и в слаку пишут, мол, там чуть-чуть правок. А на деле как-то умудряются залезть в файлы в отдельном проекте и там что-то поменять. На вопрос почему ответ один - ой, я не заметил
Анреал - это свой мирочек, классического С++ там очень мало. А подрабатывать где угодно - это классно
Что есть перекат? Если у тебя будет опыт войны c UE4 - то ты сможешь найти другую работу, и если постараешься и задрочишь темы к собесу - то без проблем перекатишься. Да и опыт в резюме будет какой-никакой, хоть как-то релевантный.
Касательно самой работы - я сомневаюсь, что ты будешь трогать С++, делая игру.
Двачую, можно воспользуюсь в каком-нибудь трехфайловом.
>тьюринг полный язык, на котором даже калькуляторы писали.
Тебе правда надо язык в языке? К чему? Калькуляторы на чем только не писали, нахуя тебе это?
>Да ладно, в 99% языков обьекты передаются по ссылке
А здесь по указателю. Ну еще для динамических массивов используются указатели.
>А на деле как-то умудряются залезть в файлы в отдельном проекте и там что-то поменять. На вопрос почему ответ один - ой, я не заметил
И при чем тут я? Там .h файл один, который я в проект новосозданный добавил и вызвал один из его методов. Куда там чо я залез и поменял по твоему?
Нет, ты, ибо все твои вангования говном оказались, так что соси
>>Почему в адрес С++ произнесены тонны слов ненависти?
Потому что зайди в JS тред. Они основных понятий своего языка не знают. А от слова байт теряют сознание.
Сейчас и правда слой программистов как людей фундаментально понимающих то в чем они работают - очень маленький.
В основе все - операторы фреймворков, и оснавная их цель - формочки пердолить на реакте/ангуларе.
мимо-пхп макака
>Потому что он сложный
В чем сложность?
Имхо он намного проще современных языков переполненных сахарком, где только этот сахар изучить - надо дохуя времени, а без его знания не сможешь читать чужой код примеров
Я с 12 лет начал изучать С++. Вообще освоил его по книге С++ за 21 день (которую дочитал до середины, дальше уже и так все понял). Работал фрилансом.
Сейчас перешел на шарп.
Какой байт сука что ты несёшь. Какие нахуй формочки на ангуляре? А то что в великом крестотреде большая часть населения вряд-ли даже справится с переводом десимала в хекс на бумажке тебя не смущает? В любом треде одни дауны, не важно какой язык в названии.
>>десимала в хекс на бумажке тебя не смущает
В жс треде просто не поймут о чем речь, лол. Максимум что ты услышишь - hex - это фреймворк такой?
более чем уверен, что ты педалил код на уровне laba1.cpp
Вкатишься в template metaprogramming - тогда поговорим. И это еще без учета того, что разрабатывая на плюсах, ты должен думать о безопасности, иначе твой код нагнут раком на второй день после релиза, а это требует отдельных знаний.
>десимала в хекс
Ты явно недооцениваешь здешний контингент. Я говорю про норм анонов, а не вкатунов, которые только вчера услышали о программировании.
Проиграл.
а зачем мне уметь программировать на бумажке? Не, только серьезно?
Я прошел в яндекс и 5 часов программировал на охуенно бумажке, но нахуя этот цирк был - я так и не понял
>Я прошел в яндекс и 5 часов программировал на охуенно бумажке, но нахуя этот цирк был - я так и не понял
Ахахах, двачую, тоже не понял.
Что стоит прочесть по многопоточке? А то уже не джун, но большой пробел в этой области, только универские знания.
Также реквестую литературу по профилированию памяти.
С меня как обычно
Ты только в общий тред это не пиши, потом от кала не отмоешься.
>десимала в хекс
Без кринжа на пейпере с пеном транслейтну. Дурак бля, почему нельзя по русски?
Число небось еще шестидесятичетырехразрядное
Ну после эпичного, когда они в JS тред обсуждали нужно ли понимать среднем разрабу оператору фреймворка как в JS работают замыкания и лексические окружения я думаю сложно уже что то иное ждать.
Ты заходя туда по дефолту в потоке говна. Там естественно есть грамотные товарищи, но в потоке лололоканья их не видно.
Да ты наш тред-то почитай. Первую половину объясняли одному полуёбку почему индекс в опенжль это инт, потом второму настраивали студию всем двачем. И каждые 50 постов кто-то спрашивает как вкатиться.
На плюсах кодют ГРЕЧНЕВЫЕ МУЖИКИ за ИДЕЮ
Где мидлу вебмакаке платят 250к? Именно мидлу?
Дочитываю сабж.
Судя по тому, как форсят высеры этого эксперта в профессиональной айти-среде,собственно назревает вопрос:
А действительно 99% разработчиков настолько тупые животные, что азбучные истины надо разжевывать на протяжении 3-х именно столько его книг я прочел книг?
Или обычный средний инженер-механик со средним стажем как я лучше подготовлен?
Охуеть, оказывается большие проекты надо разделять на маленькие, продумывать интерфейсы, отделять движущиеся склонные измениться детали от неподвижных неизменяемых при помощи интерфейсов.
НУ КТО БЫ МОГ ПОДУМАТЬ?!
CLEAN ARCHITECTURE!
Ну что за убожество?
>>95740
Ого, а у меня оказывается АРХИТЕКТУРНОЕ МЫШЛЕНИЕ!
Пипец блядь.
Недавно смотрел видос с Даном Саксом на CPPCON, где речь шла о том, что думающие люди не хотят облизываясь жрать новомодное говно, которое вываливает на них комитет.
И, внезапно, он приходит к мысли, что одна из причин этого - что в серьезном программировании засилье инженеров а не программистов. Да что ты говоришь?! Не может быть, блядь.
Причем в свой спич вставил свои фотки с Обамой - что это за днище блядское? При чем здесь вообще Обама? Это у них круто считается? Мол как я авторитет?
Что вообще происходит? Шизоиды одни.
Александреску один пока как утес над морем говна.
и еще учитывай, что обычно шлепают слои говна на слои говна, и получается копролит. Времени на вменямый рефакторинг не дают.
Я как-то 3 недели сидел и рефакторил говнокод (спасибо шефу за это) - в итоге код стал в разы более приятным и читаемым. Да, бизнес ценности +- нуль, зато все программисты стали счастливы.
Упс, точняк, я его лекции тоже смотрю - он малаца.
Ты красавчик, вот реально уважаю таких. Это называется профессионализм. Неприятие говна становится твоей натурой.
Бизнес ценность в том, что легко вносить изменения.
Недавно полностью перепроектировал агрегат, где всего-то надо было заменить материал одной детали. Агрегат спроектирован как монолит, то есть надо разбирать весь. Деталь заменена на алюминевую, но засада в том, что была стальной и выдерживала серьезные нагрузки. А это значит, надо увеличивать размер. Но так как конструкция не модульная, то и заменять надо полностью все.
В результате сконструировали 10 модулей, соединяющихся через "интерфейсы". Минус - деталей больше. Плюс - все модули можно пилить параллельно, и заменять по удаленке. Это если вкратце, на деле есть еще промежуточные модули, чтобы использовать и в старых агрегатах, которые уже куплены.
Почему так изначально не сделали - загадка. Тем более что стандарты интерфейсов известны с 50-х годов, например на пиках.
Но инженеры во-время спохватились.
А если бы были программисты, хуй знает чем бы закончилось.
> думающие люди не хотят облизываясь жрать новомодное говно
> При чем здесь вообще Обама?
У них своя атмосфэра.
> Что стоит прочесть по многопоточке?
Да чё там читать, пока свои шишки не набьёшь - не разберёшься.
> Также реквестую литературу по профилированию памяти.
vcperf
> С меня как обычно
С тебя как обычно
>Что стоит прочесть по многопоточке
Если пользовался мьютексом с семафором, то всякие бложеки про модели памяти в плюсах и затем Concurrency in Action. Если нет - у Таненбаума в книге про оси говорят норм написано про них и стандартные задачи типа producer-consumer
https://github.com/Netflix/vmaf/blob/0bba4faf68ab89e38314cc596e6908b4fb83984d/libvmaf/src/third_party/ptools/chooseser.h#L385
Я очень редко пишу, у меня просто очень подорвало.
В смысле продолжать? Написать книгу СУПЕР ЧИСТАЯ АРХИТЕКТУРА: превозмогая синдром дауна?
> Я как-то 3 недели сидел и рефакторил говнокод (спасибо шефу за это) - в итоге код стал в разы более приятным и читаемым.
Никогда этого не понимал. Сколько работаю всегда было похуй на красоту кода. Главное сделать побыстрее и потребовать зп побольше, на остальное поебать.
Просто ты не работал с долгосрочными проектами.
Сэкономленная сейчас минута в будущем потратит в десять раз больше времени:
- либо придется как-то присобачивать новый костыль среди других костылей, и потратить овердохуя времени на то чтобы оно работало и не сломало старые костыли
- либо все равно придется рефакторить
Я на днях лечил один баг уровня "в полнолуние, в пять утра, при определенном уровне звезд и движении ветра оно пишет туда формулу призыва ктулху". Полгода от бага страдали. Нашел. Баг оказался всего в одной функции написанной еще двадцать лет назад методом лишь бы работало. И двадцать лет все работало.
Но год назад немножко изменили формат данных, и при некоторых данных эта функция тупо ломалась.
Вся проблема была в том что в функции год читался из входящей строки, по последним символам (вместо того чтобы нормально сделать парсер даты, тупо брали два последних символа строки). В те времена в строку даты не входило время.
А когда формат меняли под новые требования (добавить туда еще и время), уже давно забыли что там и как 20 лет назад принималось.
Поэтому, хотя большинство случаев всеже отсеивались на более высоких уровнях парсера строки (строка проходит много уровней где от нее отгрызаются куски), всеже парочка случаев доходила до этой функции и он вместо года брал то что было в последних символах - то есть секунду.
Так что всеже лучше либо сразу писать хорошо (если есть нормальное TD и хороший лид), либо рефакторить как можно быстрее не запуская
Ну и? Я тоже могу законтрибьютить 500 раз в код уровня laba1.cpp. Ты лучше ссыль на гитхаб пришли.
>>1796605 (OP)
>>1796605 (OP)
>>1796605 (OP)
>>1796605 (OP)
>>1796605 (OP)
>>1796605 (OP)
>>1796605 (OP)
>>1796605 (OP)
>>1796605 (OP)
>>1796605 (OP)
>>1796605 (OP)
>>1796605 (OP)
>>1796605 (OP)
>>1796605 (OP)
>>1796605 (OP)
>>1796605 (OP)
>>1796605 (OP)
>>1796605 (OP)
>>1796605 (OP)
>>1796605 (OP)
>>1796605 (OP)
>>1796605 (OP)
>>1796605 (OP)
>вместо того чтобы нормально сделать парсер даты, тупо брали два последних символа строки
Например как ты спарсить предлагаешь? 212022080115вав45203072220
На, вот строка тебе, парси хули, что последние джва символа это год
юзани регулярку и не еби себе мозги, пчел
А ты подумай. Строка которую ты привел - это мусор, такой мусор отсеется раньше.
В той функции были правильные методы извлечения даты и месяца, но разрабу ее писавшему было лень доделывать код, поэтому он решил что в шестизначной входящей строке, если 4 символа - это день и месяц, то оставшиеся - это год.
Проверки на длину строки там тоже не было, поэтому оно спокойно пропустило строку, в которой было уже не 6 символов, а 12.
Если файл стал слишком большой для нафигации, а функцию можно отделить без ущерба для производительности.
У меня обычный .cpp файл занимает от 50 до 500 строк. Обычно 1 класс (и, возможно, несколько вспомогательных классов и структур) в хедере и его имплементация в самом .cpp.
Пруф уровня б.
Это копия, сохраненная 7 марта 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.