Вы видите копию треда, сохраненную 31 мая 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
• https://github.com/sosachbot/cppthreadhat/wiki
Ответы на вопросы:
• https://en.cppreference.com/w/
• https://www.cplusplus.com/reference/
Прошлый тред: >>1617857 (OP)
Good night, sweet prince 1950-2020
Значит нужно хорошо изучить спецификации указанных протоколов и написать их достаточно эффективные реализации.
С чего ты взял?
Лол, я без твоего поста даже не понял, что эти высеры про смерть плюсов. Мне кажется, это один шиз пишет.
они понимают какая ерунда плюсы и начинают кодить на джаваскрипте?
Как будто у крестов когда-то был совместимый ABI.
Это графические библиотеки, хочу выучить какую-нибудь, но их довольно много и хз с чего начать
1950 - это рождение Страуструпа, а не языка.
Вопрос - она сейчас как-то применяется? Я вместо нее всегда пишу просто if. Или тут дело в чистом стиле, и писать "else if " больше надо не для компилятора, а для других людей, которые в будущем будут читать твой код? Нахуй нужен этот else if короче?
Это совершенно разная логика
Без else все твои if будут проверяться всегда.
Сравни
If(a==0)...
if(b==0)...
И
if(a==0)...
else if(b==0)...
if (true) {
....выполняется
}
else if (true) {
....игнорируется
}
без else второй блок тоже выполнялся бы
Спасибо
Qt вроде популярен для программ с GUI.
Этот график показывает только то, что %языкнейм% гуглят чаще, чем цпп. Что как бы наводит на мысли о том, что цпп-кодер загуглил и нашел работу, а питоноблядь будет каждый день гуглить, пока его не возьмут на стажировку
Когда занимаешься плюсами, то не нужно гуглить, ведь есть всеобъемлющий cppreference.
Пока никакие, поглядываю на nuklear
Каким образом? В любом случае это проблема решается старым добрым враппером.
Ну реализации это может и перебор (это чаще для ПЛИСоводов), но все подводные места надо знать
4 миллиона, это 0.05% человечества? Такое количество программистов вообще существует?
В крупных проектах есть тесты
Думай наперёд
Попробуй писать на скорость. Выбираешь мелкую задачу минут на 5..40, которую знаешь как делать (без такого, что тебе нужно листать документацию, смотреть схемы или ещё чего), и буквально по секундомеру засекаешь время стараясь успеть за минимальное. Запускать код можно только один раз (или несколько, если в задаче есть хорошо выделенных этапов - по разу на этап), точнее, после запуска его нельзя изменять, только проводить тесты и проверки. Если не получилось - удаляешь всё. После неудачной ошибки к этой же задаче можно возвращаться только через некоторое количество других задач.
Из-за того что цена ошибки выше (нужно полностью переписывать всё) через некоторое время у тебя будет рефлекторная реакция, выработается так сказать аллергия на ошибки.
Но это помогает только от глупых ошибок, вроде < вместо <=. А ещё я с дивана говорю и у меня только мой опыт есть, ничего лучше чем попробовать предложить не могу.
Нуб, программирую ардуино. Как бы вы сделали счетчик в интервале 0-n с изменяемой скоростью?
Я видел, как человек делал его через остаток от деления millis/скорость на n. Но мне этот вариант не подходит.
Сам бы я сделал через n++ и delay(скорость).
Еще есть вариант сделать таймер через millis - millis, и если он будет больше скорости, тогда n++
Какие еще есть варианты?
Таймер
я с 2009 года на нем, развивается он постоянно, очень удобно, но работу проще найти в связке с++ + STL, рынок ку тэ это на 70% госниипараши.
Инкрементировать счётчик в прерываний аппаратного таймера и менять скорость счёта таймера в регистрах.
>>но по-любому есть хуже, как всегда)
>Чистый винапи же.
Ну мы всё же про фреймворки. А так он как раз и плох (но при этом внезапно иногда и хорош) в том числе тем, что отовсюду торчит винапи (модель сообщений в основном, и модель окна (HWND))
Qt - как-то разлюбил, благо стандартная библиотека встает с кален. Каждый раз нужно все больше поводов включать Qt в проект.
boost:: - не ковырял ни разу, но, как я вижу, в прям серьезных местах серьезные дядьки хотят именно boost. Как думаешь, стоит? А хули там полезного осталось - ASIO, BEAST?
Еще с базами никогда серьезно не работал, так уж жизнь сложилась. Что бы ты посоветовал? Postgres для кровавого интерпрайза и SQLite для себя любимого?
gRPC - твое мнение об этой поеботе? Как по мне, так шок, качественно сделано. Аж уважением к Гуглу проникся. Хочется приехать к офису в Сан Франциско и кинуть им зигу. Не, наверняка там камни подводные есть помимо того что бинарь из мегабайта разрастается до десяти, я промышленно не применял, вот и спрашиваю тебя.
Напиши что-нибудь, что никогда не писал. Начиная от ублюдочной сетевой игры, заканчивая искалеченным 1C, например.
И старайся использовать как раз те либы, которые не знаешь
Поковыряй OpenCV
Недавно кстате увидел, что на меня фоловнулась хр местной компании, каковы могут быть ей мотивы?
> А хули там полезного осталось - ASIO, BEAST?
Spirit ничего так (по крайней мере в ипостаси Qi), давно пользовался
Всякие MPL. Fusion и Hana. Лично видел, как на них творятся чудеса точнее, нечитаемый ёбаный пиздец
std::pair
Есть какая-нибудь либа для форматирования? Желательно состоящая из одного заголовочного файла
fmt не предлагать, проект маленький
Её такую тащить ни к чему
Сам такую и напиши.
Я думаю, он просто ебанутый.
Ты просто ходишь по чужой памяти. В дебаг рантайме есть проверка, в релиз нет, только и всего. То, что оно работает - случайность. Аллокатор так выделил блоки, рядом лежит что-то, что тебе не нужно, на стеке как-то всё сложилось так - всё что угодно. В другой момент тебе будет выдан вектор на конце страницы, а следующая будет без прав на чтение/запись - там и в релизе упадёшь.
Он портит память, которая по случайному стечению обстоятельств не используется. А может используется, например ты перезапишешь какие то чужие переменные, а потом порченые данные запишутся в файл.
https://pastebin.com/YpKSLnk0
Почему для пустого списка возвращается 0? Теперь каждый раз проверять, что список не пустой что-ли?
Хочу что-то вроде
std::tuple<TYPELIST> myTuple;
for_each (TYPE : TYPELIST)
{
if constexpr (TYPE::can_use<T>)
return std::get<indexof<TYPE, TYPELIST>>(myTuple).Use(T{});
}
return false;
Какого блять хуя это происходит, где мой перехват ошибки, блять почему он не дает мне ошибку, а дает ебать несуществующие ячейки вектора выводить, у меня кукуха нахуй сейчас слетит блять.
Был опыт программирование лишь на си, там такого ни разу не встречал, я не знаю с чем это связано и вообще пиздец.
Ну даёт и даёт, а хули нет, платить лишними проверками за безопасность что ли, да нахуй оно надо, шарпистам вон оставь.
Так это....там устойчивость программы...всякое такое...разве не через тысячи проверок безопасности устроены нормальные программы? (захотел блять работать на с++, ага щас мне, обоссали уже на try cath ебать).
а че такое "ржавая" версия?
Я просто лишь начинаю изучать, я не понимаю часть сленга с++'ного.
Делаем pr великим снова.
я перешел, безопасность важнее миллипиздических оптимизаций
[] использую только в ассоциативных контейнерах, где он создает элемент
Безопасность от чего, от метеорита? Пиши нормально, нормально будет. Если у тебя цикл от 0 до N и ты не меняешь вектор во время цикла, то проверку N надо провести всего один раз, а не на каждом доступе.
Тесты не помогут, если ими не покрыли какой-то диапазон величин.
Сам планирую вкатываться по книжке 4-го издания Бьёрна Страуструпа. Но мне тут на уши пресели чтобы я покупал ёба курс в Coursera за 300кк, мол там гораздо больше полезной и практической инфы.
Скажите что лучше книжка или этот курс? Я подсознательно думаю, что не стоит слушать никого и читать книгу, а не платить 5к за поверхностные знания с этой coursera.
Блядь, а написать тест, который проверяет, чтобы какой-нибудь Петрович случайно не поменял N нельзя было?
unknown location(0): fatal error: in "test_range": KOMU SKAZAL SUKA NE TROGAT N PETROVICH TEBE PIZDA
- михалыч, там чето тровает, ты посмотри
си++ и программирование на си++ совершенно разные вещи. Может быть в страуструпе и написано, что такое си++, но вот зачем все это нужно, там нихуя не написано.
Мысли, господа?
Ну и мразь же ты, такое предлагать.
Сделай морской бой
massiv->metod();
это то же самое, что и
massiv[0].metod();
Нахуй это нужно? Почему так вообще можно делать?
Потому что легаси массив декеится в указатель на первый элемент - наследие си. Не используй легаси массивы.
>Приятная
Это ты про то, что тот же вектор может сожрать любой тип?
Я вот сейчас на leetcode решаю задачки для вкатывания в С++, ну и для себя, меня чот выбесило то, что нужно каждый раз ебошить проверку на выход за пределы.
На данный момент я использую самописную вариацию массивов, они у меня в разы удобнее.
Из минусов только отсутствие шаблонов, но я их уже использовал, неприятно потому что медоты для разных типов не всегда применимы, ну ещё и отладка. Либо я просто мало знаю.
> Это ты про то, что тот же вектор может сожрать любой тип?
Я так и не понял о чём ты, но я имел ввиду то, что работа с std::array гораздо удобнее чем с сишным массивом.
std::array values = { 10.5, 15.7, -3.0 };
for (auto val : values)
print(val);
против сишного
double values[] = { 10.5, 15.7, -3.0 };
for (size_t i = 0; i < 3; ++i) // 3? А хули три а не десять?
print(values);
>против сишного
>double values[] = { 10.5, 15.7, -3.0 };
>for (size_t i = 0; i < 3; ++i) // 3? А хули три а не десять?
>print(values);
И да, я так никогда их не создаю, это странно как минимум
int Length = 10;
int *Array;
Array = new int [ Length ]
for( int i = 0; i < Length; i++ )
{
Array[ i ] = 0;
}
Ну и далее там описать доступ к элементам с проверкой, но без блядского сообщения, что оп, а вы лезете не туда с обрушением всего и вся.
Ты так напишешь 99 раз, а на 100ый забудешь вызвать delete.
Если хочется проверок, пиши через .at(i) и лови исключение...
Хуже, вызовет delete вместо delete [].
C и C++ это не питон\джава\шарп\любая другая хуйня модная чтобы туда вкатиться по какому-то курсу. Здесь порог входа минимальный это смог ли ты осилить книжки Ритчи и Страуструпа. Вот сперва осиливаешь эти 2 книжки, потом ты уже можешь кидать какие-то понты что ты на с сями знаком.
Читай книжку Страуструпа, а деньги сееб оставь, эти курсы для домохозяек нахуй не нужны.
вот мне интеерсно. почему то пердоля у меня ассоциируется с питоном, а окна с с++
у меня пердоля с джавой и пхп ассоциируется лол
Ну вот и ответ. Для питона на винде нужна visual studio, которая, очевидно, будет совершенно не у всех; а для с++ все постоянно устанавливают по 3 версии Microsoft Visual C++ Runtime Library, поэтому она тебе в глаза и бросилась.
да нет, питон на винду вообще легко устанавливается, модули на него тяжело ставить потому что там консольное управление и там этот пип постоянно выёбывается, модулей каких-то не достаёт часто, пердолиться надо много видимо отсюда и ассоциации с пердолей.
а на вот чтобы на с или с++ писать нужно визуалку ставить ну такое официальное средство бесплатное от микрософта.
>да нет, питон на винду вообще легко устанавливается, модули на него тяжело ставить потому что там консольное управление и там этот пип постоянно выёбывается, модулей каких-то не достаёт часто, пердолиться надо много видимо отсюда и ассоциации с пердолей.
>а нахуй на винде интерпретатор если есть visual studio?
Я с двумя разными людьми разговариваю, или ты между сообщениями переобулся?
а я не так то твоё сообщение прочитал, забей.
>for (size_t i = 0; i < 3; ++i)
#define count(X) sizeof(X)/sizeof(X[0])
for (size_t i = 0; i < countof(values); ++i)
Постфикс и префикс инкремент, же. В первом случае, сначала выполняется инструкция, а затем идет инкремент переменной, во втором случае - все с точностью да наоборот.
Не, для легаси уже давно сделали костыль, недавно включили в стандарт.
double values[] = { 10.5, 15.7, -3.0 };
auto pr = [](std::span<double> container){
for (auto val : container)
print(val);
};
pr(values);
cgfcb,j gjyzk/ спасибо, понял.
Не нужно эта хрень еще будет ошибки компиляции на весь экран, если что-то не так пойдет.
Если можно обойтись сишным кодом, то им и нужно обходиться.
Кстати страуструп выглядит как настоящий и классический программист, а сейчас программистами называют всякое татуированное гавно с разноцветными фолосами хипстерское. АЙТИ строили такие как Страуструп, а не нормалфажные маньки. Тяночки блядь ещё в этом айти сидят, их прямо дохуя там стало.
>Если можно обойтись сишным кодом, то им и нужно обходиться.
Тогда может просто на с и писать?
Тогда просто все так выглядели. Сейчас все по-другому выглядят. В будущем ещё какой-то вариант будет, и все будут выглядеть так, а отцы программирования будут
>татуированное гавно с разноцветными фолосами хипстерское
лучше бы и сейчас все выглядили как страуструп. хоть на людей похожи будут.
>АЙТИ строили такие как Страуструп, а не нормалфажные маньки
Тешь себя, на момент создания крестов у него уже два ребенка было.
А у современных розоволосых дегенератов шаблонных детей нет они все как под копирку чайлдфри, так что всё логично.
Тогда нормалфаги были дитясные, сейчас нормалфаги чайлдфри. В 18 веке они бы парики курчавые носили. Так работает мир.
Иногда от С++ фич есть профит. Шаблоны, например, при всех их недостатков для контейнеров они нужны. ООП хорошо подходит для ГУИ.
Лучше всего писать на С++ в стиле С, используя плюсовые фичи в случае крайней необходимости.
Есличо, в 60-70х тян программистов было приблизительно столько же, сколько кунов. Тогда это не была отдельная профессия: ты занимался каким-то STEM-направлением, плюс приходилось программировать. Потом в 80х, когда это оформилось в отдельную специальность, её узурпировали всякие sci-fi бои и прочие нерды, и стало принято, что это чисто мужская задротская профессия. С одной стороны задроты создавали недружелюбную для тянок атмосферу изнутри индустрии, с другой стороны - хуёвый имидж, отчего родители не отпускали своих дочерей учиться на программистов, чтоб те не стали чуханками, поэтому количество тянов в программировании супер уменьшилось буквально за 10 лет.
В 90х, с запросом на массовую автоматизацию бизнеса и появлением языков типа жабы в индустрию ввалило куча обычных нормисов, а с середины нулевых с хайпом веба и мобилок вкатываться стали вообще все подряд. Так что вполне закономерный результат, что сайфай бои с задротами остались в прошлом.
Там, где важна производительно ессно пишу на сырых указателях
Массовый вкат нормисов начался после 2005-го года когда в массах интернет появился
Немножк не так: раньше программист был чем-то типа секретарши при ученых, и его задачей было переводить математические модели в код. Поэтому куны занимались наукой, а рутину сваливали на тян.
Когда же программирование стало серьезным бизнесом, куны им заинтересовались, и быстро вытеснили тней за счет своего превосходства.
но тянок дохуя в айти щас. в основном они веб макаки на вротенде и нечета си боярам но все же.
Все наоборот. Как только стало (с интернетом) возможным получить навыки, сидя дома на мамкиных борщах, произошел массовый вкат аутистов. Сейчас доля аутистов вообще максимальна.
1. Повезло попасть к нужным нормисам, разглядевшим потенциал
2. Их за ручку водили везде от универа до какой-нибудь корпорации
Поэтому пошел миф о каком-то небывалом превосходстве аутистов. Сейчас же, когда каждый аутист идет в айти вебмакакой, и аутистов дохуя, и средний уровень аутистов очень низкий
>Ну и что наоборот?
Массовый вкат АУТИСТОВ начался после 2005, мудила ты ебаная. Совсем, блядь, аутисты охуели, в русский язык не могут
Наоборот. Благодаря интернету нормисы могут копипастить со стаковерфлоу и кое-как работать программистами, и они просто вытеснили аутистов.
НОРМИСОВ НАЧАЛСЯ. АУТИСТЫ ЕЩЁ ПО КНИГАМ ДРОЧИЛИСЬ. АУТИСТЫ ВСЕГДА В АЙТИ ЛЕЗЛИ И С ТЫРНЕТОМ И БЕЗ.
Вся суть в том что нормалфажное быдло в СИ никак пролезть не может. Потому что тут надо долго учиться, здесь сложно и здесь не так много платютъ. Они видят что в вебе 300кк выучи пару хуёвин и перди себе в стул и бегут все на джавы хуявы и прочее гавно и пусть сидят там и не высовываются.
Аутисты до интернета в основном лезли в коллекционирование марок и прочую безденежную поебень.
Со стековерфлоу копипастят тупые, а не "нормисы". Аутисты - это социальные инвалиды прежде всего, и перед талантливым нормисом у аутиста шансов минимум, за исключением редких областей типа реверсинга
Нет, рутиной занимался отдельный человек -администратор, которому единственному можно было трогать комп. Код же набивали как раз те же люди, что и занимались самой предметной областью.
Простите, Учитель. Мы последователи великих учений Страуструпа и Ритчи!
На дваче дохуя аутистов (больше, чем в среднем по популяции), но некоторые принимают их за нормальных людей и пытаются спорить.
Что касается задротов, то любой сделавший себя сам человек - задрот. Не обязательно просто при этом выглядеть как вонючий чухан. И так появляются те самые хипстеры, которых вонючие чуханы не любят. То есть буквально - выглядишь опрятно, значит ты тупой. Хотя тупым может быть только тот, кто так думает.
Хипстеры это не задроты, хипстеры это наивное гавно, они псевдоинтеллектулаы, у них знания поверхностные.
Да.
Волосы в розовый-зеленый любой другой цвет - ты дегенерат.
Пирсинги, проколы и прочее гавно - ты дегенерат.
Татуировки - ты дегенерат.
Моднявая разноцветная одежда как у павлина - ты дегенерат.
Список продолжать могу сколь угодно долго.
А на самом деле дегенерат - ты, лол
Всё так, Дядя Боб подтверждает это.
https://www.youtube.com/watch?v=ecIWPzGEbFc
>>31709
Нет ты, подгоревший мамкин сексист.
Хоть бы загуглил матчасть.
Если в твоей матчасти написана подобная хуйня, то это хуевая матчасть. Или ты ее прочитал жопой. Или и то и другое.
"рутиной занимался отдельный человек -администратор, которому единственному можно было трогать комп" - мог написать только человек, который либо
1. Понятия не имеет, как была устроена разработка в те годы.
2. Считает увлекательный процесс набивки перфокарт и переписывания математических формул на асм - не рутиной
Откуда ты взял здесь сексизм - не понятно, точнее - понятно, ты ебанутый и туповатый
>1. Понятия не имеет, как была устроена разработка в те годы.
Долбоёб, тебе даже ссылку скинули, послушай взрослого дядю, не позорься.
>Считает увлекательный процесс набивки перфокарт и переписывания математических формул на асм - не рутиной
Никто не говорил что это не рутина, но эта была часть работы и никаких специальных выделенных людей, которых этим занимались не было и это знает любой, кто работал в академиях, что тогда, что сейчас.
>Долбоёб, тебе даже ссылку скинули, послушай взрослого дядю, не позорься.
Зумеры совсем охуели, кидают часовое видео как пруфлинк.
>Никто не говорил что это не рутина, но эта была часть работы и никаких специальных выделенных людей, которых этим занимались
Именно так. Сидят в отделе два человека, получают одну зарплату, должность одна и та же.
Только один занимается творческой деятельностью, а другой делает всю рутину. Обоих все устраивает, потому что первый не занимается рутиной, а второму платят деньги при отсутствии особых талантов.
Только вот
1. Кто постарадет от автоматизации рутины даже в спокойное время. Например, при массовом переходе от асма к си
2. Кого сократят в кризис
Как думаешь?
Я это всё в классе делаю. Пример на картинках.
Да, я в курсе, что занимаюсь хернёй, но это для себя и общего развития, на деле будет использоваться STL.
>>31407
А вот про это я хочу узнать больше, потому что память утекает и мне бы причину узнать.
Из того, что я знаю, выше писал, что не всегда выделяется блок памяти указанный, а так же догадываюсь, что при пересоздании такого массива старый блок памяти так и остаётся висеть занятым, пусть и удалённым или очищенным.
> Да, я в курсе, что занимаюсь хернёй, но это для себя и общего развития, на деле будет использоваться STL.
Схожу в ресторан на неделе, а пока поем говна.
О, крутота, то что надо
std::span<T const> -- просто охуенная тема! Давно своим велосипедом пользуюсь, примерно так же устроен. Охуенно удобно его передавать/возвращать вместо всратой конст ссылки на std::vector<T> (или, ещё хуже, пары итераторов), да ещё и по значению! Странно, что раньше не было его.
Кто-нибудь может подсказать, как собрать Qt приложение в Azure pipelines?
Где вообще об этом можно почитатать? Гуглится какая-то хуйня
Я видел, но очень редко. Обычно в нем нет смысла - если индекс может выходить за пределы, то код надо переделывать, а если не может, то и .at() не нужен.
Видел везде перегрузки [], а внутри под ними .at().
это все по 10 книгам размазано тонким слоем. Я раньше не понимал, зачем дрочиться со всеми этими const, namespace и т.д.
Мой юный друг, тут есть небольшой парадокс, язык создается для решения задач, т.е. сперва есть ЗАДАЧА, а затем ее решение посредством языка. Когда ты сначала учишь язык, тебе сложно все понять кому это блять на хуй может потребоваться, где? Из-за этого так полезно высшее образование, ты понимаешь какие ты задачи можешь решить и для чего все эти алгоритмы и конструкции. Так значительно проще. Это же работает и когда есть увлеченность, человек хочет написать игру ему горит, он начинает изучать как это можно сделать и приходит к программированию.
> Из-за этого так полезно высшее образование, ты понимаешь какие ты задачи можешь решить и для чего все эти алгоритмы и конструкции.
Я хз как у вас там в Гарварде, но даже в столичном вузе этого всего нет
Чего нет? Алгоритмов?
А какая не говно?
Просто набивать руку, напишешь тысячу строк разумного кода, дело легче пойдет
std::vector<std::string> temp;
Создаются не все члены класса? И почему отдельно выделены встраиваемые функции-члены?
Я так понимаю, речь идет вот о чем:
При непосредственном использовании функции-члены заинлайнились, а неиспользуемые функции отброшены.
При инстанциировании же для инлайновых функций все равно создались не-инлайн варианты, например чтобы их можно было использовать из другого файла cpp.
Бля, а есть что-нибудь похожее для QtCreator'а? Если даже для парашной студии такое есть
что ты блядь несёшь, ну смотри допустим я хочу написать игру, но я ньюфаня. и что ты думаешь что я буду гуглить всё как опытный программист, всеякие функции и прочую хуйню? да нет же у меня вообще нет представления что на этом языке можно а чео нельзя, используя твой подход работать когда горит можно такого говна налепить. нужно прочесть книгу о языке в первую очередь увидеть все его функции что на нём можно делать и уже потом можно высирать игру и всё что хочешь. блядь.
Этот прав, я игру сделал, а потом уже решил теорию конкретно изучить, иначе скучно.
Тот же Си просто нахуй забёшь за день с этими ёбанными строками пердолится.
Компактный код != читаемый код
Ну отмечать измененные части он из коробки умеет, в связке с гит хз, какие то настройки контроля версий там точно есть, как и подключаемые модули.
>увидеть все его функции что на нём можно делать и
Такое может разве что с питоном прокатить. Ну почитаешь ты про шаблоны, что, сразу догадаешься, как можно собственные бинарные операторы делать как в бусте?
Лучше освоить некоторую базу, а дальше паралельно что то делать и изучать нужные тебе фичи, все ты все равно знать не будешь.
>Ну почитаешь ты про шаблоны, что, сразу догадаешься, как можно собственные бинарные операторы делать как в бусте?
маня это основы основ никто не говорит что после книжки ты станешь профи 300кк в наносек, это озы и хорошая твёрдая база, фундманент. алсо в нормальных книжках к материалу ещё даются упраженения.
азы или озы не знаю как правильно
Многое же просто неприменимо в реалиях новичка, он просто потеряется от большого объёма информации.
Развитие идёт итерационно, сначала очень простое, затем накопление знаний небольшое, потом по сложнее.
Тот анон прав, без ясной цели все эти упражнения полная хуета.
Вот тебе пример из универа - есть файл с упорядоченными числами со столбцами через пробел записанными, нужно найти там наименьшее и выдать его в консоль. По заданию необходимо использовать наследование и классы.
В чём космический ефект такого задания? Где эти знания применимы? Нахуя?
>нужно прочесть книгу о языке в первую очередь увидеть все его функции что на нём можно делать и уже потом можно высирать игру и всё что хочешь
Ты когда русский язык учил, ты тоже сначала прочитал книжку со всеми правилами и функциями языка, и только потом начал с людьми разговаривать?
нет, но когда я учил английский я сперва сделал упор на грамматику и очень не зря, потому что если бы я стал просто учить "как получится" то у меня был бы большой словарный запас, но из-за пробелов в грамматике я бы очень многого всё равно бы не понимал.
Когда ты разговариваешь, у тебя во рту нет компилятора, который не дает сказать фразу с ошибкой.
Ошибка ловится в рантайме всякими умниками и граммар-наци.
Это троллинг тупостью? Ты повторил тоже самое другими словами.
> Ну почитаешь ты про шаблоны, что, сразу догадаешься, как можно собственные бинарные операторы делать как в бусте?
В нормальных книжках есть реализация собственных бинарных операторов.
Например?
Хотя ты наверное не про шаблоны.
Ты точно программист? Это переменные окружения.
auto return type гугли
Тип возвращаемого функцией значения, после 14 стандарта тут не нужно.
Н, п, я... Подходит!
Привет OU610GH
Так инкапсуляция или композиция?
Само по себе не плохо вообще ничего, кроме анального спида. Вопрос в том, как ты это применяешь.
В чистом C. С костылями.
Смотря что такое ООП
В одной книжке (видимо очень хуевой или нет?) увидел, что типа return 0 в main больше не нужен, типа устарело нахуй, лишь динозавры пользуются.
Так ли это?
P.s. анон динозавр и ставит return в main
Да.
Здарова, братишка
1) Adam Drozdek - Data Structures and Algorithms in C++ - твердые 10/10, все есть
2) leetcode
Ты предлагаешь читать техническую литературу на иностранном языке через переводчики? Ты ебанутый?
Это сишная фича вроде, просто был возврат нуля по умолчанию
Пиши всегда, что в сишке, что в крестах, не ошибёшься. Это лучше, чем UB UB ГРОБ ГРОБ КЛАДБИЩЕ.
В С++ он вроде никогда не нужен был, в C с C99. компилятор сам дописывает в конец main.
Посмотри Cracking the coding interview (Карьера Программиста на русском), там вроде бы Java но переносится тривиально.
По дефолту return 0 дописывается, то есть подразумевается что программа завершилась успехом. Если тебе нужен код возврата, пиши сам.
В школах он хреновый, технический так или иначе приходится самому развивать читая хелпы и мануалы.
У меня английский был на 3, и на устном экзамене я рассказывал какую то дичь вроде "In my future I will write a book and grow a tree" под закатывание глаз преподши. А еще у меня в школе не было немецкого, а к первому компьютеру прилагалась пара хандбух на дойче по 1300 страниц, по которым пришлось учить бейсик и ассемблер. Хуй знает, крутись как можешь, it термины плохо переводятся на русский, поэтому все книги что я видел довольно всратые, а писать код все равно на инглише, всякие for, map и stack, никуда от этого не уйти. Можно конечно конкретные алгоритмы по видосам на ютубе учить, но это такое.
Не позорься, тебя ждёт 1с тред.
Времена 00х и 10х, когда можно было крякнуть, что ты знаешь комплюхтер ушли, теперь требования стали намного выше.
Пишу на ардуинке прогу и столкнулся с таким затруднением:
String messenge;
for (int i=1; i <= 10; i++){
messenge += String(dht_i.readHumidity());
delay(50);
}
Смысл в том, что у меня есть 10 переменных с названиями:
dht_1
dht_2
dht_3
....
dht_10
И цикл должен менять i на 1,2,3....
Но программа ругается, мол нет переменой dht_i.
Это логично да, программа права.
Вот собственно хочу спросить совета более опытных юзеров, ибо в интернете особо ничего не нагулил.
Кто нибудь может посоветовать как это лучше реализовать?
Спасибо
Ты до массивов что-ли ещё не дошел?...
root:
....man:
........brain.h, brain.cpp
....women:
........brain.h, brain.cpp
Может я чего-то не понимаю, но мне кажется, что с точки зрения языка тут всё норм.
Но ебучий компилятор, когда компилирует, хуярит объектники в одно папку и ему похуй на коллизии имён, он просто перезаписывает файл и довольный идёт дальше. А потом линковщик орёт какую-то херню, но его недовольство понятно
Отсюда вопрос, как заставить компилятор учитывать возможность коллизий в именах и либо так же по папочкам раскладывать объектники, либо ещё как то это проблему решать? Я не хочу в дублировать префиксы, чтобы в папке women лежали файлы с префиксом women.
Думаешь, я в школе знал о том, что мне английский пригодится в жизни? Нихуя. И вообще я прогать начал только в 20.
CONFIG += object_parallel_to_source
Ну страдай теперь, раз не знал.
Тогда тебе не повезло. Вообще, best practice - располагать все переменные в начале функции и сортировтаь их в алфавитном порядке.
map<int, Person> persons;
пишу вот так
Person p(1, "LOH");
persons[1]=p;
А мне компилятор говорит, что нужен конструктор по умолчанию. Т.е. я блять не могу через квадратные скобки добавить объект без конструктора по умолчанию?
По типу читабельнее имхо.
Ок. Спасибо.
Ты не понимаешь сути С++
Это MISRA C
>Не иметь более одного ретурна в коде, и ретурн иметь в конце функции.
Ну это ещё имеет смысл - для гарантии NRVO.
Ну на практике он именно в такой конфигурации обычно происходит, хотя от компилятора канеш зависит.
Да понятно, но он устаревший шопиздец. Сейчас так никто не пишет блет.
не слушай сишников, у них совсем другой язык.
Эти переменные необязательно будут расположены друг за другом в памяти
Похоже на UB
Ну, кстати, да: а почему не массив?
Этому есть какое-то общепринятое применение, типо яркозеленым комментим "такое-то", а темно-зеленым коментим "другое-то"? Или эту разницу цветов каждый использует по своему?
Первое что мне приходит в голову, это визуальное разделение двух разных близкостоящих комментов. Чтобы два близких коммента не сливались в один, ты их разделяешь разными цветами.
благодарю, открыл статью по doxygen
Проблема такая: все экземпляры SoundChain не связаны друг с другом, и для каждой в отдельном потоке вызывается какой-нибудь функционал, типа "получить звук на выходе". Когда пользователь удаляет один из чейнов (и я у себя вызываю delete soundChain, условно), его функционал все еще может выполняться. И пока этот функционал выполняется, я могу проверить, что раз больше саундчейнов нет, а пользователь вроде как хочет выйти, то я удаляю и экземпляр Lib. И все крашится, потому что функционал пытается обратиться к Lib, а его уже нет.
У Lib есть mutex, и я ставлю lock при любом обращении к библиотеке. Но это не помогает в моем случае. Чаще всего эксепшен падает в деструкторе Lib, и в стеке лежит вызов деструктора base mutex.
Можно ли как-то проверять для каждого SoundChain, что он сейчас не выполняет какой-то функционал? Или можно ли как-то встать в деструкторе Lib, дождаться выполнения всего функционала в чейных и только потом продолжить удаление?
Мож делать шаред птр на твои чейны? Чтобы удалялись когда больше никем не используется
>И пока этот функционал выполняется, я могу проверить, что раз больше саундчейнов нет
И как же ты это проверяешь?
> я удаляю и экземпляр Lib
А надо ли это делать тебе, если создавал пользователь?
Ну вообще все можно конечно сделать.
Да, была такая мысль, но не уверен, что могу так сделать. Библиотека для использования с игровыми движками, в т.ч. с Unity/C#, и по-моему я могу передавать между Unity/C++ либо простые типы, либо указатель на void.
>>34590
Когда в Unity закрывается сцена/приложение, я вызываю Finalize() у своей библиотеки, которая проходит по вектору из чейнов. Как раз перед этим все чейны удаляются, поэтому вектор уже пуст. Но один из текущих потоков уже успел перейти на адрес метода "получить звук" и выполняет инструкции.
Собственно, пользователь не создает Lib напрямую: я предоставляю интерфейс, который создает Lib и возвращает указатель на него.
В любом случае проблема останется: потенциально можно вызвать деструктор Lib в тот момент, когда чейнов нет, но какой-то из их методов вызван и выполняется. И я не могу придумать, как этого избежать. Как сделать защиту от дурака, чтобы у пользователя либы любого уровня не возникло таких проблем.
Хз как ты запускаешь потоки
В любом случае гугли, вариантов десятки
Начиная с подпиcки в ОС на сигнал/сообщение/семафор об этом
Заканчивая новомодными async/future
В том-то и дело, что потоки не я запускаю, это происходит где-то внутри Unity, и я не могу этим управлять.
Ну все равно ты как-то это делаешь. В юнити C# есть Thread.IsAlive, к нему никак не достучаться?
Поизучаю эту тему.
В идеале бы, правда, хотелось бы все сложные штуки спрятать внутрь библиотеки и предоставлять максимально простой API, чтобы пользователю не пришлось по мануалу реализовывать костыли.
Предложи свой.
Это вопрос
можно!
А c++ тут причем? Это особенности операционной системы.
В винде ты можешь называть и так и так, это будет один файл. А в линуксе разные. Так что проблемы гарантированы.
Нет! Только TXT
Как понять почему файл не открывается? Пишу fstream f("FILENAME.TXT")
cout << f.failbit
Выводит 2
Как я понимаю, либо errno, либо ловить исключение.
https://stackoverflow.com/questions/17337602/how-to-get-error-message-when-ifstream-open-fails
Не либо, а и.
Либо fail() как чел выше сказал, либо тайкеч.
Но он тебе не даст в эксепшене ошибку, а напишет "iostream stream error". Это системная ошибка.
За ошибкой зырь errno.
Посмотри последний ответ
e.what
Там есть и Permission denied, и No such file or directory, и File name too long
А как может быть ошибка No such file in directory, если он должен создаться при отсутствии
Для этого надо открывать с флагом
file.open("test.txt",fstream::out)
Но я рили советую почитать главу учебника какого нибудь, там все подряд объясняется
На экстеншон пофигу, но файл abc.txt и abc.TXT будут разными файлами. Оба текстовые, но разные. Unix-like системы Case Sensitive.
>>35001
Винда, кстати, внутри тоже, и файлы постоянно проходят через слой абстракции, чтобы от этого избавиться. Так что в зависимости от того, насколько ты своим с++ полезешь, для винды тоже вполне может разница между .txt и .TXT появиться.
for (vector<int>::iterator i = Good.begin(); i < Good.end(); ++i) if (i != Good.end()) o << *i << ' ';
В этом месте if (i != Good.end()) происходит vector iterators incompatible. как фиксить?
i без звёзды, это я скопировал
>На экстеншон пофигу, но файл abc.txt и abc.TXT будут разными файлами. Оба текстовые, но разные. Unix-like системы Case Sensitive.
А, ну фуйлы-то разные, есть такое. Я думал типа abc.txt будет работать, а abc.TXT нет
В том виде как у тебя написано - работает, я прост короче написал.
А в любой же переменные camel case с маленькой, не? Ну или с маленькой и с подчеркиваниями...
Анон, посоветуй Code Style Guide чей-нибудь.
Давным-давно читал гугловый и lockheed martin'овский (для встраиваемых систем).
Но после работы в настоящих проектах стиль написания кода стал соотвествующим.
CppCoreGuidelines.
Пишу на Doom3 code style от Джона-Наше-Все-Кармака, с очень небольшими изменениями.
Пробелоблядям перо под ребро и хуй в жопу.
Вектор интов. Вроде. Я решил по старинке, задача зашла и код я стер
for (int i = 0; i < n; i++) cin >> input;
Почему нельзя так? С интом можно, а булом нельзя?
Потому что это ебланство. Вот "123" - это true? А "0123"? А "хуй"? Вот и в комитете не стали заморачиваться. Пиши через getline и смотри на строку, или на крайний случай через boolalpha, но не обосрись с локалями.
> С интом можно,
Только делает не то что ты думаешь.
>а булом нельзя
Для вектор була своя хитровыебанная специализация пакующая по 8 элементов в байт, работа с элементами через прокси класс.
>vector<bool> input(n);
>for (int i = 0; i < n; i++) cin >> input;
>
Это не компилируется и с интом
Блять. Режет скобки квадратные. Там конечно же i ный элемент
Пердолю забыли спросить.
А как же фабричный метод?
Сап, есть один класс, шаблонный, внутри ещё один public-класс (нешаблонный),в этом классе шаблонный (только чтобы передачу по универсальной ссылке сделать) метод operator(). Т.е.
template <typename T1=float, typename T2=uint32_t, enable_if_t<...>=0>
class A {
public:
class B {
template < typename vec, enable_if_t< decay(vec) == vector<T1>, tipa togo...> >
vec operator()(vec && input) {...}
....
};
...
};
В общем, не могу написать специализацию метода operator(), если T1 и T2 принимают дефолтные (float, uint32_t) значения. Как эо вообще сделать?
Нельзя переписывать весь вложенный класс B, не хочу.
Ты это кому?
Всмысле нельзя? Что это для меня значит?
Очевидно, что класс B тоже шаблонный.
Когда я говорю, что он "нешаблонный", я просто имею в виду, что для него не написано отдельного template<>, но класс B зависит от типов T1 и T2 внешнего класса А.
Ничего не кек...
В чём проблемы, если T1 и Т2 никак не связаны?
Всё равно класс будет работать, если T1 арифметический, а T2 беззнаковый.
Какие проблемы?
Я тебя не понимаю, T1 и T2 - простые типы.
Класс A содержит вектора T1, размерами всего оперирует с помощью T2.
Класс А содержит вектор<B>, поэтому класс B и объявлен внутри, он больше нигде не нужен.
Класс B тоже дробит арифметику T1, размерами оперирует в T2.
Вот и... всё. Господи, где я провинился?
Надо написать на сишке.(вообще на чём угодно, но я только си чуть-чуть понимаю) конечный автомат лексического анализатора. Для лабы. Преподаватель сказал что автоматом написать будет проще. Не особо верю, но требуется использование автомата.
Что можно посмотреть, почитать?
Непонимать предмет. Не понимать автомат.
Находил код. Там охуительный код длиной миллион символов из кучи кейсов.
https://github.com/nohajc/.KEK-on-Rails/blob/master/compiler/lexan.cpp
> Вот и... всё. Господи, где я провинился?
Написал какую-то залупу, которую даже сам не до конца понял. Попробуй заново
Я все могу объявить, код рабочий, блять.
Я не могу специализацию метода класса В написать, чтобы дернуть С-функцию, которая АВХ-оптимизированна.
ты про последний пост или про классы?
Классы самое то, долго над ними думал.
Почему я не могу просто для конкретного инстанса шаблона написать метод, но не для класса А, а для класса В - непонятно.
Как это нет?
Я что, весь класс должен переписывать?
Что оборачивать-то?
Вынести за класс некую обобщенную функцию, из оператора() ее дергать - и уже для нее написать специализацию?
так сишная функция принимает конкретный тип float. У тебя может быть обобщённый инстанс как с флоатом так и с другим типом. В общем любая обобщённая функция должна в конечном итоге вызывать обобщенную функцию, если она вызывает функцию с конкретным типом то он нуждается в явном привидении что делает бессмысленным саму идею
дополню что это обычные функции должны вызывать обобщенные, если происходит наоборот то это в корне не верно.
Ещё дополню. Даже так
>любая обобщённая функция должна в конечном итоге вызывать обобщенную функцию
Любая обобщённая функция должна вызывать ещё более обобщённую.
Кому это я всё пишу?
Майкросервисное говнище, связанное с банковским делом
На С++ очень сложно придерживаться ей, уродливый код выходит, лучше снейк-кейс. А вот для сишечки самое то.
Гут: Алгоритмы для гугла, хайлоад, веб-сервера, ну вы поняли.
Пайдот: микрокалл
Ну такое: игрушечки
Полный пиздец: Отечественный десктопный софт qt(бонус если на winapi)
Ватафак блять: микропенисы
> Пайдот: микрокалл
> Ватафак блять: микропенисы
Микрокалл это микросервисы, а микропенисы это микроконтроллеры...
Ну, то есть, кроме того что её придумали евреи? чтобы сделать тебя геем?
Ну как бы тебе сказать... Гейский недо-DSL со своим Q_OBJECT, слоты и сигналы просто убогие, библиотека Network калл.
Да и вообще вся их ИКОСИСТЕМА меня просто выносит, ну что это за пиздец? Если я хочу просто библиотеку для юая, нахуй вы мне решили всю stl переписать своей парашей?
Ещё и на modern C++ они большую бибу кладут.
Бля, вот рили, сделайте норм либу для отрисовки кроссплатформенного гуя и ВСЁ. Не надо qmake изобретать, не надо всё это.
Абу-Бот плез, каждый тред одно и тоже.
UI на Qt можно и без moc писать
Помнится, в шкалке на олимпиадке по информатике было 2. Но это тоже сравнительно дохуя для задач, решающихся в 5 переменных.
Я помню одну олимпиаду с лимитом вроде в 8Мб. Там была задача, где поле в память не влезало.
Пришлось паковать биты - единственный случай в моей жизни, где мог бы пригодиться вектор булов, но в то время я писал только на С и отлично себя чувствовал
Вот он, нанохайлоад.
Я там тильду забыл, ну да похуй.
Деструктор для этого и существует как бы. Его задача - чистить память, связанную с объектами класса.
Какого объекта?
А GTK-шники есть еще или они вымирают?
Особенно линукс интересует.
Так можно делать в описании класса? Метод возвращает переменную(объект) указанного типа.
Как раз про них и вспомнил, но решил тут спросить, может про this что подскажут. Что за тпк? И почему не делай? Покажи на примере куска куда, как именно не надо, ты говоришь, делать. И почему.
> тпк
так
> И почему не делай?
Про это уже много чего написано.
http://alenacpp.blogspot.com/2009/05/delete-this.html
Нет. Гугли смартпоинтеры, к ним можно кастом аллокатор и делитер прикрутить.
Лучше уж разводить JS в крестах, чем из-за эксепшена насладиться утечкой памяти.
Я работаю, мне норм.
Вот только у каждой лябмды свой тип. Пусть использует std::function и не выебывается.
Луддит, ты?
Инсталляторы.
Гуй на известном в узких кругах фреймворке и тонны логики по общению с системой, драйверами, сервисами.
Но я уже шестой год зарабатываю деньги сиплюсплюсом. Причем тут JS?
>Что за тпк?
Транспортно - пусковой контейнер
Для стратегической стрельбы в ногу стратегической байторакетой.
И вот, оформляя API, столкнулся с тем, что как-то уж очень сложно получаются итераторы. Я все правильно делаю? На каждый запрос получается нужно создать аж по два класса: класс, реализующий простые однострочные begin/end, и класс, реализующий операторы.
По сути это создание ссылки на указатель. Такой синтаксис. Тоже самое в аргументах функций происходит, когда ты передаешь аргумент по ссылке - там объект кастится в ссылку на этот объект. Конретно в таком как у тебя виде его мало используют. Но оно со всем работает https://ideone.com/F99SH3
> класс, реализующий простые однострочные begin/end
В общем случае это будет класс контейнер который хранит колекцию результатов. А так как у тебя контейнера нет то у него мало работы. Скорее всего можно легко сделать его шаблонным.
вопрос такой
я переехал к вам с шарпов, поэтому не все шарю. Как трушнее подключать либы: через симейк или просто ебашить в папку с проектом?
спасибо
Однохуйственно.
>getline() не работает в switch
Потому что switch работает только на целые числа, а не строки.
Потому что getline() не возвращает значением строку, а записывает ее в параметр.
>cin.ignore(), cin.clear() и cin.sync()
Этим все равно никто не пользуется.
Я понимаю, что в switch целое число, речь о том, что я не могу считать строку в свитче без выше перечисленного. В моём случае cin.sync и cin.cleaar
Я не знаю что такое getline в свиче.
У тебя cin перед switch, да? Он передает из потока только символы без \n. Когда доходит до твоего гетлайна, он сразу берет из потока этот \n и ты не можешь ничего ввести поэтому.
Добавь сразу после строки с cin cin.ignore();
cin.ignore отбрасывает символы, вплоть до указанного числа, или до тех пор, пока не будет достигнут разделитель (если он включен). Если вы вызываете его без аргументов, он отбрасывает один символ из входного буфера.
Например, cin.ignore (80, '\n') будет игнорировать либо 80 символов, либо столько, сколько они найдут, пока не нажмет на новую строку.
cin.sync отбрасывает все непрочитанные символы из входного буфера. Однако в каждой реализации это не гарантируется. Поэтому ignore - лучший выбор, если вы хотите согласованности.
Когда запускаю через Code Runner , там видно, что это g++ (который я поставил и пытался подружить с вс кодом, но чет не вышло). А у g++ есть такая фишка как #include <bits/stdc++.h>, но встроенный IntelliSense жалуется на него (он от майков). В настройках плагина С++ пытаюсь изменить положение компилятора, чтоб интелисенс не жаловался, но вылезает такая проблема. Кавычки везде пробовал - не работает. В гугле что-то непонятное (сори если туплю).
Можете помочь? Или есть способы запуска с++ кода лучше, чем те, что у меня?
Всдаун порвался.
ED
Я так и сделал, лютый кастыль, но работает. Хотелось бы рассмотреть другие варианты.
>>37677
Вообще эту проблему должен решать темплейт аргумент дидакшен, но чето нихуя. Пофиксил через decltype(lambda).
std::function оверхед + оверинжинеринг, вот когда std::function_ref запилят, тогда можно будет подмуать.
Зачем этот пердолинг с компиляторами и расширениями? Просто ставишь вижуал студию комьюнити, и всё.
>Qt Creator
>Qt
Говнари пытались косплеить Эппл с их
>"изобретем свой язык со своими шлюхами? njkmrj e нас"
и предсказуемо обосрались. Кому нужна анальная залупа на неанальной платформе.
IDE то тут причем, дебилушка? Они уже взаимодействие с языковыми серверами прикрутили, что бы в идеале вообще на любом языке писать можно было.
>взаимодействие с языковыми серверами прикрутили
Какие еще, в жопу, сервера.
>что бы в идеале вообще на любом языке писать можно было
Вот когда воплотится в реальность, тогда и кукарекай, а пока свои шизоидные фантазии держи при себе.
Нужны квалифицированные кадры, а это непрактично, удобнее когда тупые макаки справляются.
Настолько говно мамонта, что живее всех живых.
все получилось? Бэк фейсбука на С++. бэк яндекса на С++, дохуя подобного ХУЙЛОАДА в больших конторах - на С++.
и еще есть слушок, что Озон суровый хуйлоад хочет перевести на кресты с ГОвна, с приходом Александра Фокина
ничего не пишу как вкатиться в эту залупу
Не осилил?
>>38964
Ясно.
А в каком виде все это делается? Типа, крутится на веб-сервере какое-нибудь java-приложение, которое обрабатывает HTTP-запросы; а когда этому приложению надо что-то суровое посчитать, оно по RPC обращается (напрямую или через очередь сообщений) к уже висящему в памяти написанному на плюсах 32-поточному чудовищу?
Ты зумер с сдвг.
просто буст асио поллит серверный сокет и вся логика внутри.
Весна наступила
Потому что std::string это уже специализация.
Можешь простенький препроцессор написать сам
Подожди C++30, там будет полноценный компайлтайм, и можно будет перед компиляцией получить весь исходник в виде массива байт, передать его своему коллбеку и изменять как хочешь. Как в Perl
Теперь поддержка стабильных версий платная.
Потому что "test" это const char*, а не string. T != T
А типа lambda это не оверхед + оверинжинеринг? Ок лол. Ты бенчмарки погоняй, говорят что если с параметрами не мудрить сильно то std::function работает так же быстро как и виртуальная функция.
CMake умеет подкачивать из GIT репозиториев, например.
Давайте на следующем перекате уже заменим картинки на что-нибудь симпатичное.
Вот бы ещё все уже скомпилированные либы и все их копии магически перекомпилировались новым компилятором. А сейчас придётся очень внимательно следить за версиями всех либ, и не дай бог ещё придётся с новыми либами вынужденно юзать старые либы, когда новые версии не устраивают на уровне апи.
Писателям laba1 ничего, а банкам стремно перекомпилировать весь код, а вдруг что то не соберется.
Хуйня всё это. Какие есть варианты:
1) либа опенсорс - взял и пересобрал
2) либа не опенсорс, есть исходники - взял и пересобрал
3) либа не опенсорс, нет исходников - еби вендора, пусть пересобирает. Почему может не пересобрать? Потому что это древнее говно, тогда его нахуй нужно гнать, из проектов-то с c++23. Либо потому что вендор еблан, тогда бабло его покарает
Дело в том, что комитет и состоит из вендоров, лол.
Пока не выбьешь, не обновляйся
Кстати, вот все говорят что у них там какая-то хуйня отвалится, если сломать ABI, но есть реальные примеры? Мне что-то сложно представить серьезную контору, которая покупает либы без исходников.
Почитай то, что Титус Винтерс про гугл писал, какие там эффорты должны быть при смене АБИ. Это при том, что Винтерс дико топит за смену АБИ
Наличие исходников ничего не гарантирует
Неймспейсы специально придумали, чтобы снизить вероятность конфликта имён, а не чтобы их потом выключали. Вот будет в двух либах функция с одинаковым именем, и всё, пиздец, придётся искать, в каком из инклудов она проскочила. А с неймспейсами этого не будет.
Так что вместо using namespace лучше всегда явно писать std::string, std::cout и т д.
мимо
using namespace тоже ведь не просто так придумали, в небольших программах, как у анона выше, нет ничего предосудительного использовать это.
Да. И всё же лучше изначально готовить себя к большим проектам, где облегчить себе жизнь не удастся.
Что за чушь ты пишешь? Лямбда инлайнится в обычный вызов функции с параметрами на стеке, а std::function кроме виртуального вызова имеет еще дохуя бойлерплейта. Я бы и с указателем на функцию остался доволен, но тогда придется еще и аргументы отдельно в tuple хранить, а лямбда удобно все в один callable объект пакует.
Как в Visual Studio 2019 Preview создать пустой проект WDM драйвера? Что для этого надо установить и как настроить среду?
мимо нуфаг
> что такое ABI
Грубо говоря, изменится формат dll-ек, и новые не будут совместимы со старыми.
> для чего нужно
Для совместимости одних бинарных модулей с другими.
> какие подводные
Выше обсуждали.
> как то повлияет на кроссплатформенность
Нет. Раньше на всех платформах было всё было плохо, а теперь будет очень плохо.
> почему Good night
Нет.
спасибо добр человек
еще хотел бы спросить у всех, я кирилл, хочу игры учебные делать, но на linux, соответственно какой компилятор юзать, и какую либу
WDK скачай
Скажем, есть функция, принимающая указатель на Base, хочу сделать спецификацию для Derived1, Derived2,..., DerivedN.
Или только AD-HOC и dynamic_cast-ом приводить к нужному типу перед вызовом?
>Грубо говоря, изменится формат dll-ек, и новые не будут совместимы со старыми.
Хмм, ну я и раньше считал, что кресты через длл работают только если всё откомпилено одним и тем же компилятором с одними и теми же настройками. То есть, ничего не изменилось?
Если сменить abi то количество комбинаций настроек удвоится, очевидно. Как сейчас есть mutithread/singlethrrad, debug/release, станет еще prec++23/postc++23
template<typename T> int Func() {
T t; t.func();
}
class T {public: void func();};
Func<T>();
Но пользователь может передать не имя класса, а экземпляр
T t;
Func<t>();
Как сделать чтобы он этого не мог? Понятно что оно всё равно работать не будет, но хочется сделать красивее
есть же всякие std::enable_if
>return 0;
>не?
по стандарту функция int main() не обязана возвращать что-либо (и это единственное исключение)
Предпоследняя версия винды и студии это теперь древняя? Ну это уже толстота, алсо у меня все работает на вин7+vs2017/vs2019
Вроде бы по спекам может, но на практике не используется из за какой то уязвимости в браузерах.
C++ тут при том, что..?
>пользователь может передать не имя класса, а экземпляр
При желании может хоть хуй сломать об одеяло.
Тем более что передать-то и не может. Ты сам-то пробовал скомпилировать что написал?
он нормально работает
Вроде еще не 1 апреля.
Подождем c++20
Что тебя не устраивает?
Все, нашел, это C++11 фича. Кстати как vector инициализировали до 11й версии? Только через push_back?
либо преаллокация и поэлементное присваивание
Были разговоры завезти double/multiple dispatch но пока костылится паттерном визитор.
>решил я вкатится в программирование и выбрал собственно язык С++
Зачем? Больших денег ты тут не найдешь, если не суперспец в определённых предметных областях, вкатываться долго, вакансий со временем всё меньше, зарплаты падают.
>С чего начинать?
Со вката во что-нибудь из java/js+react/golang/php. Там не нужны серьезные знания в камплюхтер саенс, вкатывание может занять год или даже меньше при должном усердии.
Катись на хуй в java. Плюсы это хуевый первый язык для программирования (как и си). Сейчас везде объектная параша, так что я бы советовал такой путь
1. Python, сразу можно блять получить результат, пощупать программирование, твое не твое. Познакомиться с объектами, скриптами, структурами данных и админ и инженер и хуй пойми кто может попробовать.
2. Тут наверное Java - можно просто палкой потыкать пару месяцев, синтаксис классов, хуясов и т.д.
3. Си - для с++ это обязательно, только парадокс, си перед си++ мешает программированию на си++ т.к. объектная модель должна крепко уложиться в голове, а си этому не способствует, зато идет лучшее понимание архитектуры и вообще всего си++.
Но С — отличный первый язык программирования. Там всё такое.. програмистское. А питон — плохонький. В С всё понятно, вот тебе скобочки, вот тебе индексы, а в питоне какие-то значимые пробелы, листовая механика циклов. Непонятно, что важно, а что нет.
Ненужное говно ненужно
Парой итераторов
makefile напиши.
Уже больше года изучаю плюсы, в шаблонах освоился, в ООП, паттернах и прочей хуйне освоился, даже к смейку и уб привык. А вот многопоток меня всегда стороной обходил, всегда хватало асинкнуть что-то или детачнуть тред, и в принципе на том и доволен. А вот сейчас решил изучить эту тему и вообще нихуя не понимаю что мне делать. Аноны, как вы мастерили многопоток? Я устал пилить threadsafe_контейнернейм и тредпулы, посоветуйте что-то реальное задачу то есть, где будет упор именно на многопоток, чтобы не сильно на другое отвлекаться.
Алсо, фича действительно неплохая, теперь можно в 20 строк написать constexpr счётчик на лупхолах, который работает на всей троице.
Адище.
Можете подсказать почему?
на всякий случай: std::map'ом пользоваться не умею
И еще вопрос, path путь и в windows и в linux же использует ASCII?
С сишным тоже range-based for работает.
Операционную систему, наверное.
>path путь и в windows и в linux же использует ASCII?
Нет, в общем использует Unicode... Посмотри в сторону std::filesystem, но я слышал он не на всех платформах поддерживается пока.
Отобразить его в память.
Причем тут ошибка? Т.е ты мне предлагаешь городить дохуя вложенных if конструкций? Это code smells, при ошибке я хочу завершить работу функции, в ином случае продолжить. if (err) return err, а не if (!err) ... .
И как ты предлагаешь области видимости "забыть" про переменную? Давай предложи свой синтаксис, поугараю немного
>Причем тут ошибка? Т.е ты мне предлагаешь городить дохуя вложенных if конструкций?
Блядь, тебе вирус уже мозг съел.
Двачую
Стандартный windows style C-code.
>>43908
Получится вот такая хуйня, а если там еще какие условия есть, то вообще лапша лапшой. https://godbolt.org/z/kAjWPV
Короче это неюзабельный вариант.
Долбоёб...
auto ret = foo();
if (ret.second)
{
const auto &val = ret.first;
MoYaFuNkCiYa(val);
...
}
auto ret2 = bar()
...
Итогдалие
> ret2
> const auto &val = ret.first;
Ну так это же говнокод, причем лютый. Лучше уж просто писать на сях в таком случае.
Вообщет
err1=func1()
if(err1) return err
err2=func2()
if(err2) return err2
func3()
return d3
тоже смеллс
Вообще то там:
my_error err;
err = func1();
if (err) return err;
err = func2();
if (err) return err;
...
Разница есть как бэ.
return должен быть только один в конце, это полезно для оптимизаций и для поддержки безопасного кода.
Я перекатил
Первый раз слышу. А ну покажи такой гайдлайн. В интернетах пишут что это спагетти код. https://softwareengineering.stackexchange.com/questions/18454/should-i-return-from-a-function-early-or-use-an-if-statement
MISRA 2008
нам ошибки угадывать?
Вы видите копию треда, сохраненную 31 мая 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.