Анон, нужно твое авторитетное мнение по поводу использования крестов в микроконтроллерах, например, какой-нибудь стмке 32. С одной стороны, везде СИ блядь, драйвера, память нахуй с другой - кресты с их отличными плюсами, шаблонами там, абстракцией и всей хуйней. В реальных задачах на мк хорошо выделяется часть, которая железная и часть, в которой сама суть работы.
Сап, аноны, решил вычислить n-ое число pi. Нашел алгоритм типо вычисляющий n-th pi число с логарифмической сложностью, но я его походу реализовал через одно место, хз в чем трабл. Кто шарит, прошу помочь
помогите пожилому вкатывальщику по книге страуструпа плз. 1) задача; 2) говнокод; 3) результат. Чо т я заебался уже, фигурные скобки во все места перебрал, либо одну 3 выводит с ошибкой, либо просто ошибку, либо ничего
Простите за тупой вопрос, но почему _itoa_s возвращает мне строку, где вначале мусор в виде 37777777, раньше такой же код у меня работал, теперь перед ответом добавляет этот мусор.
>>1609240 Ну так то да, у нас обычная практика обучения крестам - дать подмножество из си плюс основы ООП, хотя знание стл, какбэ тоже часть языка, хотя бы 99 стандарта даёт реальный буст производительности кодера, уровня абстракции и понятности кода. А на 17 вообще сказка, заметили там наверху что вектору тип не нужно прописывать?
>>1609253 >1) const в глобале = static const (только в C++) Допустим у нас есть header.h: const int h = 5; Если мы его включим в несколько .c файлов без защитных директив, то линковщик С выдаст multiply definition, а в С++ все скомплится на ура. А все потому, что в С++ h является локальной в каждом файле, куда подключен header. Если нужно использвать const int через extern, то при определении переменной, надо писать extern const int h= 5
>2) В C++ нет VLA. int foo (size_t n, size_t m[n]); // Не скомплится в С++ Хотя не все комплиторы работающие с С11 могут в VLA, а вот для C99 поддерживать обязаны.
3) А еще в Си вместо темплейтов есть _Generic: int print_int(int d) { printf("%d\n", d); } #define print(d) _Generic((d), int: print_int)(d) main() { print(123); }
4) Ну и конечно же Compound Literals. Онли С совместимый код белоу: char foo = (char []) {"x", "y", "z"}; int i = ++(int){1};
>>1609258 Что те непонятно в "подмножество из си"? Это часть си, не весь, кресты не обязаны это реализовать, всё-таки разные языки под разные вещи. ЗЫ я имел дело с например сишными проектами для вертолетных автопилотов и никогда там такого не видел, мож плохо искал? Хотя могли делать под конкретные компиляторы канеш.
Если скопировать и вставить код в visual studio, то он автоматически отредактируется по определенному шаблону. Вот как этот шаблон изменить? Например, чтобы после ( и перед ) всегда был пробел, или чтобы { был на одной строке с выражением, а не под ним.
С++ сеньоры помидоры, я правильно понимаю, что exceptions считаются замедляющими код, не потому что они как-то ресурсо-затратно сделаны сами по себе, а из-за того, что куча различных оптимизаций (типо перемещения) невозможна из-за вызывающихся в конструктрах/деструкторах исключений?
Сап, аноны, помогите разобраться с mutex'ом и синхронизацией потоков. Допустим, у меня есть очередь, один поток постоянно проверяет пуста ли очередь, если нет, то выводит на печать первый элемент и удаляет его. И есть поток (метод класса, если объектов много - то поток не один), который добавляет элементы в очередь. Куда нужно ставить lock и unlock, чтобы все безопасно работало?
>>1609781 Ну для твоего случая есть condition_variables, ты захватываешь мьтекс, который wait освобождаешь и лочит, когда ей приходит уведомление, а затем чекает: если предикат норм, то выход и исполняем код, а если нет - освобождаем мьютекс и ждем следующее notify
Собсна так синхронизация потоков и делается, через онли мьютексы тебе придется задержку создавать, чтобы дать захватить мьютекс функции, добавляющей в queue элемент, и все это в while
>>1609754 Нет, эксепшены не влияют на оптимизации. Единственный случай, про который я слышал — это спецификации throw() в имени функции могут как-то запороть оптимизации, потому что компилятор вставит проверки на типы брошенных исключений. Но эти спецификации уже задепрекейтили, так что пофиг.
Как можно организовать чтение из сокета и отправку в одном потоке? С частотой в одну секунду на сокет приходит сообщение, отправка может произойти в любой момент времени Сокет храниться в классе Может, через дефолтный bool - флаг?
>>1610179 Вроде как без noexcept в конструкторе перемещения компилятор не реализует perfect forwarding, если я верно помню. Хандельянц из PVS-Studio об этом вещал в лекциях своих.
>>1610209 Вот это походу и есть единственное место. Ну или в библиотеках разных могут быть безопасные версии каких-нибудь алгоритмов, если не бросаются исключения
Как же я блять говна поел, ребята, полный пиздец. Есть ли какая-то альтернатива этому дерьмищу? Оно же блять страшное как моя жизнь.
Как блять это вообще случилось-то, хлопцы? Что за нехуй?
Какие вообще альтернативы этому пиздецу есть? qmake что ли? Почему этот пиздец существует, я не могу. Блять, да по-моему свой скрипт на питоне, выдающий конечный мэйкфайл проще написать чем в этой хуйне ебаться...
>>1610312 Ему уж 50 лет скоро, ты что хотел? qmake какой-нибудь да, альтернатива. Существует, потому что диды не готовы перелезать ни на что новое. Ты вот какой новый софт в этом году освоил? А в прошлом?
> Существует, потому что диды не готовы перелезать ни на что новое.
Да бля, деды, идите нахуй.
> Ты вот какой новый софт в этом году освоил? А в прошлом?
Ну год тока начался, в прошлом стал активно работать с OpenMP и MPI(со вкусом буста, на чистом MPI писать я в рот ебал).
Ну это только для меня новое, а так-то конечно всё что вам надо было написано дедами. Но вот справиться с жму аутотренингом никак не могу. Ненавижу всей душой.
Здраститя, вопрос есть. Вот например у меня функция, которая делает простые вычисления в цикле (по сути просто сложение), а потом результат в виде массива отправляет в другую функцию и дает ответ. Но делается это оче долго, потому что массивов много, а если распараллелить наверное есть шанс ускорить работу. Я могу заранее задать отправную точку, откуда надо считать для каждого потока, тут проблем нет в общем, но дальше у меня вызывается следующая функция, где массив обрабатывается, и вот я не могу понять, у меня функция отдельно для каждого потока вызывается и выполняется или просто как-то последовательно? Просто из той функции у меня тоже какие-то функции вызываются и тд говнокод. Есть шанс, что это само по себе нормально работает? Я пока в тестовом режиме запустил, чет медленно всё происходит хотя я еще вывод не пофиксил, но все равно хуета. Просто пытался гуглить, там какие-то member functions, это оно или нет? Я просто хочу, чтобы у меня каждый поток делал то же самое, что и вся программа, в принципе даже можно ее несколько раз запустить, но тогда там непонятно с использованием ресурсов пеки шо будет, пока вот на 6 потоках запустил, вроде пишет 100% проца используется.
>>1610493 Это по учебе кста. У меня всего один вектор получается, и там в нем делается +1 к последнему элементу и дальше сдвиг, если нужен (там короче как прибавление единицы к длинному числу в N-й системе счисления, разряды которого в каждой ячейке), потом еще проверка на повторы ну может еще чего прикручу. В принципе может я там хуету написал, но я думаю мне все равно распоточивание понадобится, даже если всё переделывать придется. Потом готовый вектор отправляется в функцию, и потом цикл начинается заново, к этому же вектору снова прибавляется 1, снова отправляется в функцию и тд. А функция просто возвращает 1 или 0. И эт самое, я там еще постоянно вектора отсылаю, вроде ж как-то можно через rvalue их не копировать каждый раз, а как-то просто быстро передавать, я там правильно написал через move? https://pastebin.com/Gj8KJ6Dsпо морде только не бей
>>1610507 Назови нормально переменные, комментарии поставь, что это за говно ебучее ты скинул? Скидывать такой код на ревью = плевать в ебало ревьюеру, я бы на месте учителя тебе в рот насрал.
>>1610527 Там просто контекст знать надо... Ну бля, мне сложно сходу на англицком выдумывать кратко и емко что конкретная переменная делает даже на русском. Ну а вообще как нормально чисто без осознания смысла, а по распоточиванию? Говорю, я могу почувствовать, что говно высрал и переделать способ получения вектора, и ту функцию могу тоже переделать, но структура та же останется. Мне вот именно почувствовать как с потоками работать в такой ситуации.
Как правильно итерировать по множеству до бесконечности? Нужно брать элементы из множества и помещать в массив, а когда оно заканчивается снова брать сначала.
Какой из этих двух вариантов лучше? Обычно создавать объект на стеке, а потом просто мувовать его в контейнер? Или указатель на куче? На картинке пример грубый и кривой, но суть думаю понятна. Что по производительности быстрей, если эти классы большие и часто создаются?
>>1610731 Дело в том, что класс AAA большой. Если просто писать container.data = test; то будет использоваться copy assignment. Копирование объекта же дольше длится чем просто мувнуть его? Я знаю, что объект test после мува становится пустышкой. Короче, я создаю объект test, делаю что-то с ним, затем пихаю его в контейнер (который кроме этого еще другие поля содержит), и после этого test мне больше не нужен в этом скоупе. Поэтому я подумал, что может быть мув семантика хороший вариант? Или всё-таки лучше аллокация на куче?
>>1610152 Да я уже понял, но там мало настроек как-то. Вообщем установил clang-format плагин, пердолю настроечки. В идеале закос под Windows NT style хочу сделать.
>>1610799 Тебе же говорят - не лезь, если не разобрался. Как минимум, задумайся, что лучше - создать объект на месте в куче или вызвать конструктор, а потом переместить объект куда-то? Хотя, теоретически, компилятор увидит, что ты дурачок и Object a(); smt.a = std::move(a); Превратит в smt.a = object(a);
>>1610799 >объект test после мува становится пустышкой Посмотри, что такое std::move, там просто рвссылка навешивается, специально, чтобы выбрался не копи конструктор, а мув и если ты мув конструктор или там оператор присваивания не сделаешь таким, чтобы он мувал, то никакого мува не случится.
Приветствую, меганьюфаг-школотрон в треде. Знаю основы пайтона, учил его для решения всяких задачек (олимпиады + ЕГЭ), но позже понял, что он говно (для этих целей), сейчас хочу вкатиться в плюсы как можно быстрее. Что можете посоветовать для этого, помимо книг на 1ккк страниц? Или не выпендриваться и читать книжки? Также был бы рад каким-нибудь годным ресурсам для начинающих. Всем спасибо.
>>1608046 (OP) Какие доводы использовать C++ вместо pure C? Си простой, компактный. C++ монструозный, одна только спека сколько там сейчас страниц, 3000?
>>1611130 Мне не нужны тысячи абстракций на все случаи жизни. Я все равно их все никогда не освою. И я сторонник минимализма. Керниган писал, что Си хорош тем, что это маленький язык, им можно быстро овладеть, и реально знать и использовать все возможности языка. В C++ такое невозможно. Даже создатели языка не знают всех его особенностей. А уж экосистема там наверное вообще гигантская. Зачем нужен комбайн с миллионом функций, если будешь пользоваться только десятком?
>>1611132 Ты не териотезируй, ты пиши код. Когда ты поработаешь над достаточно большим проектом, сам поймешь зачем нужны шаблоны, классы, виртуальные функции, исключения, конструкторы-деструкторы и прочее.
>>1611132 >Пока графика не нужна. >Какие доводы использовать C++, если мне в моей песочнице ничего из С++ не нужно. Отвечайте быстро! Никаких, ты прав. Вообще не понимаю, зачем пользоваться языками программирования, если я могу и руками пасьянс разложить.
>>1608046 (OP) Кто нибудь проходил специализацию от Яндекса на курсере "Искусство разработки на современном C++"? Стоит ли проходить платно? Один месяц стоит 4900 руб. Курсов 5 штук. Думаю один курс за месяц можно и не пройти. Тем более последующие курсы наверняка сложнее предыдущих. Выходит что пол года нужно времени, если не больше. Итого минимум 30000 руб. Стоит оно того?
Я еще не совсем понимаю что входит в платную подписку. Задачи точно входят. Но задачи, их же можно самому порешать. Там же название задачи написано, можно нагуглить условия. В общем, если кто проходил платно, расскажите что там к чему, годные курсы или нет.
>>1611134 Я боюсь погрязнуть в теории. Ведь фич очень много, придется все это изучать, потом практиковать. Боюсь что долго придется осваивать конструкции языка.
>>1611135 >>1611139 Лишние абстракции это зло. Вы сейчас прёте против этого закона, что противоречит программированию как инженерной дисциплине. Реальные доводы будут, факты какие-то, хотя бы развернутое мнение, собственный опыт? Я не для троллинга или срача спрашиваю. Мне хочется понять вашу мотивацию. Свою я высказал. Пока побаиваюсь C++ из-за его монструозности. Может это только предрассудок, не знаю.
>>1611145 Лишние абстрации это лишняя сложность. Обычно это случайная сложность, когда проектировщик не нашел способа, не смог сделать простым. В инженерии борьба со сложностью ключевая цель. Иначе смысл инженерии теряется. Принципы KISS постулируют это. И не только они.
>>1611152 >Чем больше приложение, тем больше там вылазит всяких моментов, которые на чистом С никак не контролируются. Можно пример? Хочу понять чего это касается, ручного управления памятью, недостаточным уровнем абстракции, недостаточным количеством инструментов или библиотек для разработки, или может что-то еще?
>>1611160 >Принципы Ты путаешь принцип с законом. Принципы могут быть разные, каждый со своими достоинствами и недостатками. Например, вот широкоизвестное эссе о принципах построения опенсорс программ: базарном и кафедральном. Оба принципа используются и по сей день.
>>1611170 Нет шаблонов и перегрузки -> код нужно копипастить 100500 раз и называть func_int, func_double, func_char, да, для него. На самом деле наверняка это решается через касты к воид звёздочка и обратно,но тут возникает множество опасностей отстрела ноги.
>>1611128 На С++ можно писать в стиле С, если хочется, но при этом пользоваться всякими дополнительными плюшками, типа перегрузки операторов, RTTI, и т.д.
>>1611160 >Принципы KISS Так именно из этих соображений появились абстракции, да, в маленьком проекте кажется на чистом си писать проще, но потом оказывается, что плюсы сколь угодно масштабируются и в миллионнострочном проекте писать на плюсах не сложнее(имея некоторый опыт), чем в лабе1. А в си код начинает схлопываться под собственной тяжестью, программисту становится тяжело удержать в голове что делает данный код, его становится тяжело поддерживать, потом единственный бородач, который в нём что-то понимал, уходит на пенсии и имеем легаси, в котором никто нихуя не понимает и стремится запихнуть его под диван.
>>1611184 "Борьба со сложностью" — это бесконечно абстрагируемое понятие. Назови одну деятельность, которая не занимается "борьбой со сложностью". А так-то конечно, да. Инженер сделал мост, чтобы он не падал — поборол сложность переправы через реку. А потом хирург вырезал аппендикс — поборол сложность выжить с перитонитом. А потом кондуктор взял деньги за билет — поборол сложность поддержки транспортной инфраструктуры.
>>1611186 >в си код начинает схлопываться под собственной тяжестью, программисту становится тяжело удержать в голове что делает данный код, его становится тяжело поддерживать Из-за чего? Чего там не хватает? Можно конкретику?
>>1611199 А, ты хотел сказать, что при создании указателя на функцию надо знать аргументы к этой функции? Это да. Ты так написал, будто тип функции (тип возвращаемого значения) зависит от типов аргументов.
>>1611190 Если проектировщик создал систему для решения задач, но она оказалась сложнее в использовании чем решаемые задачи, то это разве можно считать решением задачи? Если язык настолько сложный, что требует больше времени и сил на его освоение, чем решение задачи другим языком, то зачем нужен такой язык? Суть языка в том, чтобы просто решать сложные задачи, а не сложно решать простые, или сложно решать сложные. Вот это борьба со сложностью. В этом суть, чтобы в конечном итоге решать задачи просто. Это суть инженерии.
>>1611200 Ну а я что написал? >>1611201 Тип функции это не тип возвращаемого значения, int тип интов, int тип указателя на инты, по той же аналогии и с указателями на функции, если ты разыменуешь переменную типа void ()(int x int y) ты не получишь переменную типа воид void.
>>1611191 >Извините, а назуй тогда Си нужен в т.ч. в embedded разработки, когда можно писать на Си с классами, с перегрузками и вот этим всём? Вот это я пытаюсь выяснить. Пока адепты внятных доводов не приводят.
>>1611206 Тем что главная функция не зависит от других. Барьеры абстракций же. Слои не зависят друг от друга. Если тупо под каждый тип писать отдельную функцию, это будет просто копипаста.
>>1611202 >Если проектировщик создал систему для решения задач, но она оказалась сложнее в использовании чем решаемые задачи, то это разве можно считать решением задачи? Да. Пример: решаемая задача: сделать табурет простое решение: принести пенёк решение проектировщика: выкачать из земли нефть, очистить её, полимеризовать в пластик, создать линию по отливке табуретов из пластика, сгенерировать электричество, подключить линию к электричеству, доставить сырьё, и наконец создать табурет. Что сложнее?
>>1611154 >Лишние абстрации это лишняя сложность. В крестах набором же, добавляется больше с каждым стандартом, но что было раньше наоборот легче и внезапно быстрее
>>1611191 Для embedded наверное есть какие-то преимущества, типа стандартная библиотека не такая большая, и легче предугадать, как компилятор сгенерит код. Или разрабы просто не знают, на каком ещё утюге им придётся запускать своё творение, и сразу берут по минимуму. Или если библиотеку пишешь, или прослойку между языками, то Си может пригодиться. Ну и для копания в линуксах и прочих опенсорсах. А в остальном, я не знаю, зачем Си ещё нужен.
>>1611247 Я вот думаю почему коммитет по си до сих пор не внесёт 2 маленьких, но удобных изменения - к структурам можно обращаться как в С++, не обертывая typedef'ом и добавить uint для соращение unsigned int, и все блять, язык в 10 раз удобней станет
>>1611144 > Лишние абстракции это зло. Тред Go ниже. Возвращайся когда заебёт самописная кодогенерация, RTTI на говне и рефлекшонах, и отсутсвие абстракций в языке, приводящее к их переизобретению в коде. Это не критика Go, многим заходит писать и так. >>1611132 А теперь подумай, когда он это писал и с чем сравнивал? Си хорош когда у тебя нет вариантов, а иначе можешь пойти в ядро и изучать как они эмулируют плюсовые абстракции.
PS. Не бойся изучать новое, бойся зацикливаться на старом - вылетишь с рынка быстрее чем успеешь сказать котлета.
>>1611292 >В классе есть сырые указатели. Но туда же кроме nullptr ничего не записали? Тогда можно.
Кстати, подчеркивания перед аргументами ставить не обязательно. Можно писать прямо Font::Font(std:string fontPath) : fontPath(fontPath) - компилятор поймет, что один fontPath - это член класса, а другой - аргумент.
>>1611292 Бросание исключений в конструкторе абсолютно легитимно, следи только, чтобы они бросались до всяких new и тд, чтобы при раскрутке не было утечек, а лучше вообще используй только смарт поинтеры, это требует совсем небольшой привычки, зато про утечки в 99% случаях можешь забыть. В то же время бросать исключения в деструкторе абсолютно нелегитимно, никогда так не делай, если интересны подробности можешь погуглить про ключевым словам stack unwinding, libunwind, libcxxabi, чтобы понять как это вообще всё работает https://monoinfinito.wordpress.com/series/exception-handling-in-c/
>>1611427 Конкретно про СДЛ не скажу, но вообще, когда получаешь объекты от других библиотек, то у них обычно процедура освобождения тоже бывает какая-то библиотечно-специфичная, и для них просто так нельзя вызывать delete. Возможно, тебе нужен смарт поинтер с кастомным deleter-ом.
>>1610920 Ну ок, значит мув пока не трогать, хотя я поэксперементировал и оно работало, (видимо как ты написал?) Можешь дать хороший пример или статью про мув? А если вот так сделать? container.data = std::move(AAA()); Тоже хуйня под капотом происходит?
>>1608862 > вывести все простые числа до 100 Не благодари. // This file is a "Hello, world!" in C++ language by GCC for wandbox. #include <iostream> #include <cstdlib>
template<std::size_t... Args> struct NotDivideTo;
template<std::size_t N, std::size_t P, std::size_t... Args> struct NotDivideTo<N, P, Args...> : public NotDivideTo<N, Args...> { static constexpr bool value = N % P != 0 && NotDivideTo<N, Args...>::value; };
template<bool b, std::size_t N, std::size_t... Args> struct PrimesImpl;
template<std::size_t N, std::size_t... Args> struct PrimesImpl<true, N, Args...> { using value = PrimesImpl<NextPrime<Args...>::value < N, N, NextPrime<Args...>::value, Args...>::value; };
template<std::size_t N, std::size_t Head, std::size_t... Args> struct PrimesImpl<false, N, Head, Args...> { using value = PackedPrimes<Args...>; };
template<std::size_t N> struct Primes { using value = PrimesImpl<true, N, 2>::value; };
>>1611602 Пиздец, какой же уебищный синтаксис у этих последовательностей. Недавно потребовалось удалить последний элемент последовательности для последующей передачи в другую функцию... Это просто пиздец. Вместо какой-нибудь функции типо pop пришлось строит рекурсию через несколько структур в 30 строк.
>>1611484 Погугли universal reference, move semantics, c++ reference collapse rules >>1611720 >а мув из lvalue делает rvalue. Тут будет && && и это схлопнется в &&, смотри скрин.
>>1611693 >>1611719 Мне нужно было передать цепочку хешей которые гарантированно считаются в компайл тайме, поэтому тупл тут не катит. Чтобы заставить компилятор при компиляции их высчитывать приходится вызывать функцию внутри треугольных скобочек.
Помогите написать кастом удалитель для SDL Вот так пытаюсь сделать (на пике) Получаю ошибку C2027(использование неопределенного типа SDL_Texture) & C2338(can't delete an incomplete type); ftexture это поле класса, выглядит так std::unique_ptr <SDL_Texture> ftexture = nullptr; Можно ли вообще указать удалитель при создании, чтобы не писать его постоянно в make_unique?
>>1611788 >The correct answer - as stated by Herb - is that according to the standard a constexpr function may be evaluated at compiler time or run time unless it is used as a constant expression, in which case it must be evaluated at compile-time. https://isocpp.org/blog/2013/01/when-does-a-constexpr-function-get-evaluated-at-compile-time-stackoverflow В общем если у тебя constexpr auto result = evaluate_hashes(), то гарантированно будет считаться в компилетайме.
>>1611819 Ну это явно лучше чем как ты говорил, 30 рекурсий через рекурсии или там аргументы в шаблон засовывать. Ну бля, таплы для того и были придуманы, типа вот у тебя есть там ArgsA... и ArgsB... и из-за той же проблемы, что они слипаются, нельзя написать template<class A, class... ArgsA, class... ArgsB...> и вообще ничего нельзя написать после вариадик темплейта, юзаются два тапла tuple<ArgsA...>, tuple<ArgsB...>, они как раз и нужны для обхода подобных ситуаций, я думаю скорее всего можно там сделать через тапл и это будет относительно норм выглядеть.
@chico: But programmers can rely on constexpr being fully compile-time in the cases where it matters -- to do compile-time things like initialize array sizes or instantiate templates. If they try to invoke something that isn't compile-time, the compiler will let them know.
In all other cases (using constexpr in places the language doesn't require to be compile-time), it doesn't matter. Programmers don't need to rely on anything else being done at compile vs. run time, and can't anyway because of optimizations -- the point of optimization is that the compiler can move work around, including in either direction from/to compile time to/from run time, and all such optimizations are legal as long as a well-formed program can't tell the difference (have different output) -- so it doesn't matter because the program is indistinguishable.
I could imagine someone may want to force a variable to be written to ROM (say), but that (a) is rarely necessary or interesting in practice (I can't remember if I've seen a true need for it myself), (b) is handled using compiler- and platform-specific extensions if at all (e.g., optimization levels and related controls), and (c) isn't specific to constexpr (e.g., it has always been the case that a compiler "might" put a static const int variable into ROM, and that's often cited as the canonical reason why casting away const is undefined behavior -- it may not be physically possible to mutate the const object).
Bjarne Stroustrup said on Jan 14, 2013 08:58 PM:
It seems that I was too terse and caused confusion. Sorry. The correct answer - as stated by Herb - is that according to the standard a constexpr function may be evaluated at compiler time or run time unless it is used as a constant expression, in which case it must be evaluated at compile-time. To guarantee compile-time evaluation, we must either use it where a constant expression is required (e.g., as an array bound or as a case label) or use it to initialize a constexpr. I would hope that no self-respecting compiler would miss the optimization opportunity to do what I originally said: "A constexpr function is evaluated at compile time if all its arguments are constant expressions."
>>1611858 >In particular, std::move produces an xvalue expression that identifies its argument t. It is exactly equivalent to a static_cast to an rvalue reference type. Чел...
>>1611138 Проходил. но тогда он только выходил и я покупал отдельно каждый курс. Первые два достаточно простые. Красный повеселей. Коричневый сложен, черный не стал проходить, там подписка началась. В общем курс неплохой. Но следует учесть, что у меня было за плечами несколько прочитанных книг, мини проекты и на работе я перекатился в разраба. По сложности задач, зависит от времени и терпения. Некоторые я решал неделя+, другие за пол часа. Финалки достаточно сложные. Готовься к разрыванию очка на грейдерах.
>>1611893 При том, что есть функция f(T&& a) и мы туда отдаём переменную типа object&&, поэтому T будет object, получается я лох, а ты прав, прости меня, дурака.
>>1611900 >При том, что есть функция f(T&& a) и мы туда отдаём переменную типа object&& В `std::move(object())`, `object()` это 1. Не переменная, а выражение 2. Тип которого `object`, а не `object&&`
>>1611812 У тебя все правильно с делетером. Тут проблема с тем что SDL_Texture в хедере специально не определен, чтобы скрыть внутреннюю имплементацию, а unique_ptr разыменовывает указатель этого типа, например в методе get. Так можешь начать писать свою обертку для таких случаев.
>>1611906 Я про func писал, а не про мув, в func мы передаём rvalue reference object&&, я жопой смотрел, думал там что-то типа func(object&& &&), то есть сам тип object&&.
>>1611913 >в func мы передаём rvalue reference object&& В выражении `std::move(object())`, у `std::move` возвращаемый тип `object&&`, а у самого выражения тип `object`.
>>1611918 static_assert(std::is_same<object, decltype(std::move(std::declval<object>()))>::value,""); статик ассершн файлед static_assert(std::is_same<object, decltype(std::move(std::declval<object>()))>::value,""); всё ок Так что здесь вы неправы.
>>1611826 >>1611829 Вот типо для примера, как это выглядит. Функция констекспр и строка залупа нигде больше не используется. Почему пидорас на компиляторе не может это заранее подсчитать и подставить готовый хеш? В итоге приходится делать вот такой лайфхак с аргументами шаблона.
>>1611937 > Почему пидорас на компиляторе не может это заранее подсчитать и подставить готовый хеш? Ты пробовал аргумент std::string_view constexprом сделать?
>>1611979 Вот так сделал, ничего не изменилось, выход компилятора все тот же со строкой в бинаре. >>1611972 Ну вот интересно почему так нахуй, что мешает посчитать при компиляции?
>>1611993 >А какая разница константный он или нет? Ну больше там не на что ругаться как мне кажется. А тут может он не понимает, что его можно оптимизировать.
Кстати кто может объяснить как стдшный basic_string_view добился того, что при инициализации из константной строки он считает длину на этапе компиляции? Почему мой кастомный класс так не может и считает все в рантайме?
>>1612026 >>1612045 Все я походу понял почему, в char_traits::length юзается магическая функция __builtin_strlen которая позволяет зафорсить компилятор посчитать длину заранее.
>>1612054 Ну вот вроде почти так написал, все равно не хочет при компиляции считать. А вы кстати проверяли как гцц компилирует? Может он так же в рантайме считает.
>>1611875 Мне в принципе пох. Я писал на множестве разных языков, включая большое количество функциональных. Это меня не пугает. Дело в том, что боюсь погрязнуть в байтоебстве. Раньше то я вручную памятью не управлял. И с другой стороны стоит прагматик, и говорит: нахой оно тибе нужна? Смысл в чем?
И я не могу ответить на эти вопросы. Даже самому себе. Дело в том, что сук тянет к плюсам. Почему не знаю. Просто тянет. Наверное какие то детские мечты. Помню один чувачок с моей группы, а я учился на программиста, рассказывал, что C++ язык для "Ылитки". Я конечно в это поверил тогда. Потом уже, когда писал код на разных языках, включая Хаскелл, я смеялся над этой шнягой. Но теперь не знаю, хочется закрыть этот ебаный гельштат.
>>1611995 Слушай, вроде как std::move(...) это xvalue expression, и что, можешь тыкнуть где написано про то, что у xvalue тип становится не T&& а T? А лучше вообще на статью, где объяснено про xvalue, glvalue, prvalue и тп.
>>1612193 МунлаеSFINAE пойми да посмотри пару примеров ,"метапрограммирование с++ шаблоны" можешь погуглить, на степике есть курс(бесплатный) https://stepik.org/course/3206/promo, там ближе к концу что-то разбирается, ещё неплохо помогает на хаскеле каком пописать, потому что там те же принципы, а вообще это был пример как сделать простую задачу сложным способом, в реале 95% всей этой хуйни никогда никем не используется, а то и вообще могут ебало набить за подобную хуйню в коде, как заметил анон выше>>1611635, потому что почти всегда всё можно сделать проще, читабельнее и тд
>>1611492 >Что такое рефлекшоны? Что бы как в qt ты мог в рантайме узнавать информацию об классах, делать циклы по енумам, узнавать кем был вызван метод и т.п. В стандарте это все пока на уровне планов.
Почему char ch = new char[20]; ch = (char)"full time"; if (ch == "full time") cout << "true\n"; Выдает true, a cin.getline(ch, 20); if (ch == "full time") cout << "true\n"; falce? Как это работает?
>>1612384 То есть, "full time" хранится, как константная переменная, но вторая "full time" не может же иметь тот же адрес памяти? Почему тогда true выдает.
char ch = new char[20]; // Выделяется кусочек памяти на 20 чаров, с адресом первого байта например 0х4242. Так что ch==0x4242 ch = (char)"full time"; // Берется адрес первого байта статической константы, например 0х0013, и перезаписывается в ch вместо старого значения. Теперь ch==0x0013. Первоначально выделенная память с началом в 0x4242 и размером 20 байт при этом становится недоступной и течёт. if (ch == "full time") cout << "true\n"; // Ну тупо сравниваешь значение указателя c тем, что только что присвоил. Очевидно 0x0013==0x0013.
А вот во втором случае надеюсь последние две строчки не продолжение той же программы, иначе это уже совсем пизда всё по-другому:
char ch = new char[20]; // Так же, как в прошлый раз выделяется память. ch==0x4242. cin.getline(ch, 20); // Читается строка и сохраняется в участок памяти, на который указывает ch. Сам ch продолжает указывать на ту же память, т.е. ch==0x4242 if (ch == "full time") cout << "true\n"; // За каким-то хуем сравнение адреса первого байта статической константы с адресом первого байта выделенной памяти. Очевидно 0x4242!=0x0013.
>>1612853 Мне студия нравится больше, чем креатор. Там даже расширение для Qt есть специальное. Не могу только понять как там проект под андроид создать. За 3 дня перерыл весь интернет и не один способ не работает
Думаю на чем делать ГУИ. Под виндоус, кросплатформенность не нужна
Qt - монструозная хрень, требует кодогенерации, нет нормального дизайнера wxWidgets - в общем норм, есть некоторые корявости вроде обработки событий, нет дизайнера (есть какие-то сторонние тулзы, но ну их) WinForms - очень простые в использовании, есть дизайнер, по сути дельфи от майкрософта. Но нужно будет делать врапперы вокруг плюсового кода. MFC - вроде как легаси ад, а вроде как и нет. Есть кое-какой дизайнер. Отлично интегрирована в студию, проблем с вещами вроде файлов ресурсов не будет. GTK - не юзал, по отзывам имеет нестабильный API, требует танцев с бубном чтобы юзать под виндой.
>>1612887 >нет нормального дизайнера Лолват? Там на виджетах считай теже винформс, только непривычные, а с qml там по-моему даже удобнее чем в студии с xaml.
>>1612887 > Qt - монструозная хрень, требует кодогенерации, нет нормального дизайнера this. Лучше уж код генерировать, чем дрочить MESSAGE_MAP_BEGIN. Если ещё плагин для студии поставить, то вообще ноль ебли. И по поводу монструозности - это скорее всего хромиум (спасибо веб-блядям). По факту тебе нужны только Qt5Core.dll, Qt5Gui.dll и Qt5Widgets.dll (все вместе точно до 50мб). Ну и pdb + дебаг версии этих библиотек.
>>1612887 >Под виндоус а кроме этого? Что делать тулза будет? Какие функции будет? Ну там - базы данных, графики, порты ввода/вывода, сетевые функции, работа со звуком?
Сколько человек будет использовать? Сколько лет, ты планируешь, она проработает? Какие версии винды? Будет ли продаваться (т.е. коммерч. лиценз)?
Будет ли это однократная поделка или допиливаться месяцами/годами? Сколько человек будет участвовать в разработке? Придется ли кому-то после тебя её дорабатывать?
>>1612887 >монструозная хрень На сам деле там есть утилита для деплоя приложух, которая сама тебе выбирает только те длл которые требуются. Получается в районе 50-150 мб у меня обычно.
>>1612940 Редактор для самодельного игрового движка. Продаваться не будет. Будет использоваться и разрабатываться потенициально лет 20, поэтому стабильность важна (а MFC стабилен как кладбище). Писать буду я один скорее всего.
>>1612914 Например, свой компонент так просто не добавишь через дизайнер, да и вообще в нем большинства компонентов нет. XAML тоже плох, но я и не планировал WPF использовать.
>>1612939 Я сколько не пробовал юзать QT в студии, у меня всегда что-то ломалось. То кодогенерация, то обновления файла формы в дизайнере не подхватывались. Чтобы те же файлы ресурсов прикрепить к бинарнику тоже нужны кастомные шаги сборки.
Вроде как Qt очевидный выбор, но на моем опыте с ней требуются некоторые пляски с бубном. MFC ископаемая, но она в студии работает из коробки.
>>1612974 Тут больше имелся размер самой библиотеки - она скачивает гигабайт 10, наверно, при установке, и там есть вообще все на все случаи жизни.
>Получается в районе 50-150 мб у меня обычно. Вообще это очень много, для простой десктопной программы.
>>1612997 >скачивает гигабайт 10, Я хз, у нас анально огороженный инет на виртуалках, кют ставим из оффлайн инсталлятора (на сайте есть такая опция, но в жопе).
Если передать указатель в другую функцию и освободить память там. То вроде же и указатель в мейне должен освободиться? Я знаю, что указателю после delete еще нужно nullptr присвоить. Но если этого не делать, и просто использовать его дальше будто его не удаляли, то что будет? Код на пике ошибку не выдает. Куда он пишет значение 69? Про смарт поинтеры я в курсе, но мне интересно как эта херня работает с сырыми указателями.
>>1613206 delete просто помечает память как освобождённую, мол память по этому адресу может использоваться снова, с самими данными по адресу ничего не происходит, пока нет нужды их затереть и что-то другое туда записать
>>1613224 Ну типа я про то же, сегодня ты записал туда 69 и распечатал 69, а завтра демон насрал и распечатал ты 18962862865923, хотя 69 вроде записывал.
>>1613234 >использовать указатель Точнее дереференсить его. Ну это логично, мы сказали, что больше нам не нужна память, куда этот указатель указывает, компилятор делает с ней чё хочет угодно.
>>1613219 >>1613224 То есть, new резервирует мне память на куче, и только мои указатели могут туда писать. А после вызова delete память освобождается, и писать туда может уже кто угодно, верно? Вообще как и кем это все прослеживается? Например сам размер выделеной памяти new int[10] – это делает C++ runtime (или как оно правильно называется) или операционная система за этим следит? Если потом вызвать delete[], откуда он знает, что память размером 10 интегеров, т.е. где хранится эта информация?
>>1613239 >А после вызова delete память освобождается, и писать туда может уже кто угодно, верно? Вообще как и кем это все прослеживается? Например сам размер выделеной памяти new int[10] – это делает C++ runtime (или как оно правильно называется) или операционная система за этим следит? Размер инта умножается на 10 плюс некоторое смещение, потом с полученным размером вызывается системный malloc. >>1613239 > откуда он знает, что память размером 10 интегеров, т.е. где хранится эта информация? Там в начало добавляется смещение, в котором длина хранится, поэтому кстати и нельзя путать delete и delete[], так как обычный delete ничего про смещение не знает, а скобочный будет размер искать в начале.
>>1613206 Указатель — это просто число, адрес в памяти. Он вообще не знает, есть ли по этому адресу что-то, или нет. Если память освободили, вызвав delete, а кто-то всё равно полез по этому адресу, то может случиться всякое разное: - ничего - дебаггер может поймать ошибку и остановить программу - чтение мусора - повреждение данных другого объекта (который уже успели записать туда вместо удалённого) - порча кучи (внутренних записей менеджера памяти) - access violation (если менеджер памяти уже отдал этот кусок системе обратно)
>>1613239 >Вообще как и кем это все прослеживается malloc.c лол Он какбэ зависит от компилятора, и там обычно сидит оптимизирующий менеджер памяти заточенный под твою ОС. Прямого управления памяти обычно нет никогда.
Я так понимаю, методы структуры хранятся отдельно от информационных полей объектов структуры? Я не проебусь, записав структуру в файл, записав туда какие-нибудь указатели на методы?
Дано: std::vector<MyObj > objects; Как вызвать функцию void fn(std::vector<MyObjBase >) Без лишних мозгоебли с reinterpret_cast и создания нового контейнера?
Заметна ли разница по времени между обращением к элементу по индексу у вектора и массива? Ну мне дохуя раз надо получается. VS пишет, что много времени уходит на [] оператор. Есть эксперты в чате?
сап. тупой вопрос, но я не могу нагуглить хоть убейте. есть функции strchr() и strtchar(). а какой аналог strrchr для strstr? чтоб нашло последнее появление субстроки в строке, а не первое
Что можно почитать по устройству компиляторов/линковщиков и конкретно Visual Studio? Надоело, что процентов 70 сообщений при работе со сторонними библиотеками тупо не понимаю.
Анончики, не подскажите как в C++ получить максимальную информацию о компьютере? Начиная от битности системы, заканчивая видюхой? Гуглил, ничего толкового не нашел...
>>1614393 мне нужна не только это. Мне нужны максимально возможные данные о компе. Понятно, что если гуглить по отдельности, может и сделаю (За 1к строк), но может есть более практичные способы (Где всё храниться в одном месте/либе)
помогите пожалуйста понять что не так с кодом. если убрать из ифа на втором скрине переменные act_leftpressed и act_rightpressed, ошибка исчезает, это кстати приватные поля того же класса actor
>>1614751 Спасибо! 4 курс, ит-специальность, учил плюсы на первом и втором курсах, но очень медленно - тупо освоил книгу Лафоре "ООП в С++", но потом понял, что она очень старая. Год тупо ничего не делал, этой осенью снова взялся за обучение, но плотнее. Попытался найти работу, но ничего не получилось - 4 отказа после тестового/собеседования. Сейчас понимаю, что знал мало. Немного потрогал кьют в ходе решения одного из заданий, неспешно прочитал все книги Майерса кроме СТЛ, петов на гитхабе не было, только несколько решенных тестовых небольших. Если все объединить, то мой объем знаний можно получить за год интенсивного обучения.
Написала эйчар по резюме, которое не обновлял месяца 3, выслала тестовое - сделать клиент-северный чат на сокетах без использования библиотек, компилировать под линукс и написать мейкфайл вручную. Я немного переусердствовал и написал насколько умею и понимаю в ООП-стиле, чтобы было расширяемо и т. д., отправил, позвали на собеседование. На собеседовании, что интересно, вопросов чисто по плюсам не было - тимлид сказал: "мне в принципе всё понятно". Писал насколько могу хорошо - лямбды, смарт-поинтеры, все, что знаю и понимаю из более свежих стандартов в общем. Хотя уже сейчас, глядя на этот код, очень много переделал бы
Мне сегодня приснился сон. Суть его в следующем. Если у бабы сиськи большие, то это аналогично тому, что она хранит данные в самих сиськах, а данные как мы знаем бывают объемные. У мужиков сиськи не объёмные потому, что мужики хранят указатель на данные, а не сами данные.
>>1614739 Быстрее reserve + emplace_back. Во время resize будет создаваться объект конструктором по умолчанию, а потом перезаписываться копирующим =. В случае emplace_back объект будет конструироваться прямо на месте.
Я тут недавно мелькал с тестовым заданием по поводу Понга с ботом. Сдавал его где-то неделю назад, как я понял само тестовое их устроило раз позвали на собес, но на собесе я ужасной чепухи наговорил и мне так и не перезвонили. https://github.com/AI-Decay/Pong-with-Bot
>>1615025 ? Я скинул гитхаб же, код весь там, должно собираться. Сейчас уже вижу много проблем в этом коде, но я ничего не изменял с момента отправления.
>>1615069 Это что то типа парадокса Блаба. Новичок не может знать что такое нормально, для него это и есть нормально. Потом он узнает о новой фиче, и начинает считать ее нормальной, а предыдущую - недостаточно хорошей.
>>1615144 >указатель, направляемый в сторону двух больших шаров женских данных Лучше, когда указатель является указателем на член класса. Забыл, на каком языке пишешь?
>>1615040 > 2020 > xml Лучше никак. Если будешь использовать libxml2, то отруби в нём всё то же что отрубали в xmlsec. Для базового использования можешь взять rapidxml или tinyxml2.
>>1614810 Сначала испытательный срок - платят только оклад 24к, затем добавляется бонус 0-40%, который зависит от результативности на проектах, т. е. после исп. срока 24к-33.6к. Не ДС-ы.
>>1615183 >Все не так плохо. Но если тебя взять на работу, то вреда будет больше, чем пользы: кому-то придется тебя учить. Я думал Джунов обычно и учат по началу.
>>1615346 Не, учат интернов, а джун это такой имплементщик, предполагается, что он способен нормально выполнять задачи по данному описанию, ну там создай класс, который ведёт себя так-то, отрефактори вот это и это, чтобы было вот так, добавь функционал такой-то по аналогии с тем-то и тд
>>1617248 >2020 >найти книжку в интернете по любой версии qt не проблема >есть смысл более старую версию ставить, если книжка по ней именно? Как же мне не понять этих людей
ist.get(ch2); if (!ist) { ist.clear(); ist.unget(); } return;
Я правильно понимаю, что unget() положит обратно ch1? Влияет ли ist.clear() на память потока (последний символ)? Влияет ли неуспешная попытка ist.get(ch2) на память потока (последний символ)?
Анон, дай совет студенту (хотя тут и так одни студенты). Есть вот такой код http://cpp.sh/74jmm Да, это лаба, но при её выполнении у меня появилось аж два вопроса: как сделать 132, 161 и 173 строки хоть немного короче, чтобы умещались хотя бы в 24 дюймовый экран в 100% масштабе? Почему в строках 132 и 137 если для переменных chas, minuta и sekunda написать пространство имён Triad вместо Time, то нихера не работает, а переменным god, mesjac и den вообще насрать, через Triad к ним обращаются или через Date?
>>1617433 А почему переменные god, mesjac и den изменяясь в Date меняются также и в Triad, а с классом Team такого не происходит? Что-то мистика какая-то.
>>1617415 >как сделать 132, 161 и 173 строки хоть немного короче берешь и переносишь. Код у тебя тот еще пиздец, конечно. Последняя строка функции SohranVremja что должна делать?
>Почему в строках 132 и 137 если для переменных chas, minuta и sekunda написать пространство имён Triad вместо Time потому что protected
>>1617443 Ааа, а я это говно месяца два назад написал, а пришло время сдавать только сейчас. Спасибо за терпение. >>1617445 >Последняя строка функции SohranVremja что должна делать? Хрен его знает. Наверное, рудимент от чего-то остался. Вообще, этот код ещё надо бы чистить и править.
>>1617452 Я б честно говоря все выкинул и переписал. Мне кажется что идея у тебя была такая class Triad { int a,b,c } class Date : Triad { getDay() {return a} setDay(d) {a=d} ...} class Time : Triad { getHour() {return a} setHour(h) {a=h} ...} class DateTime : Date, Time { Date date; Time time; setDateTime(long long unixtime) { date.setDay(...)} }
>>1617457 Ой, в последней строчке я имел в виду без наследования, просто аггрегацию: DateTime { Date date; Time time; ... Правда я не знаю какое у тебя задание, может как раз на наследование... С другой стороны, нужен ли класс Triad...
Сап аноны недавно начал вкатываться в программирование и у меня возник вопрос можно ли как то передать адрес массива который определен в другой функции причем что бы main использовался только для вызова других функций вот код который я сделал для примера
>>1617566 Можно Просто делаешь этот массив ДО функции mas и в нее передаешь. Ну например int main() { int * mass; int limit = mas(mass); int summ = sum(mass, limit); delete[] mass; заодно и не забудешь удалить его - каждому new[] должен соответствовать delete[] int mas(int& mas) { //тут передаешь массив по ссылке - все изменения распространятся и вовне ... mas = new int[n]; ...
>>1617642 Надо знать C++, матан, теорию алгоритмов, дискретную математику и, зависимо от направления, физику. Тебе всё это будет проще в универе каком-нибудь выучить. 4-5 лет и ты проградрист.
>>1617644 >C++, матан, теорию алгоритмов, дискретную математику и, зависимо от направления, физику Охуенный список. Из него реально полезно знать только ВНЕЗАПНО С++. Возможно алгоритмы, чтобы на собесах (и только на собесах) деревья вертеть. Все остальное зависит от предметной области. >4-5 лет и ты проградрист. На этом уже шаге можно искать оплачиваемую стажировку. На которой даже платят деньгами.
Аноны, у меня опять проблемы http://www.cpp.sh/5bdot Почему методы класса Date при вызове из объектов в классе Time не отрабатывают? Компилятор как будто их не видит. Использую VS2019.
>>1617669 void ChasPlus(Date& date) .. void PlusChas(Date& date) { ChasPlus(date); PokazDataVremja(); maks(); min(); } .. if (vvod == "ChasPlus") vremja.PlusChas(date); Если я сам не путаю ничего, тоже изучаю только пока.
>>1617679 Он удобен для написания небольших скриптиков, много чего делается искаропки, учится моментально, в каком-то смысле каждый программист умеет писать на питоне, тк он близок к псевдокоду и тд
>>1617681 А мне было бы удобно программировать на Русском цел главн() { строка хуй; вывод << "Эй, анон"; ввод >> хуй; если(хуй == "а?") вывод << "хуй на!"; }
>>1617708 Да, это хуита, я лично всегда пишу рядом с типом, int*, а кто-то пишет пробел перед звёздочкой, в этом тоже какая-то логика есть, но мне её не понять, так получается тип "указатель на инт", а так хз что вообще, ещё с констами какая-то такая параша тоже есть.
>>1617705 Я хочу здесь http://www.cpp.sh/5bdot понять, почему методы Date не вызываются при компиляции из методов Time, если оба методы наследуются от Triad, а Date является другом Time.
>>1617714 Попробуй тут часы, минуты и секунды поуменьшать и посмотри, как не меняются от этого дни, месяцы и годы https://repl.it/repls/ConsciousShamefulOctal А при линейном наследовании вида Tried->Date->Time всё нормально.
>>1617717 Очень, очень тяжело понять, что у тебя там написано, но если я правильно понял у тебя при вызове ChasPlus меняется переменная date, которая у тебя class Date{...}date;, а не vremja.
>>1617725 Да, ну и я бы переделал так, считал бы всё в секундах, ну там addday это добавлял бы к текущему количеству секунд 86400 и тд, а потом как хотел бы печатать брал бы остаток от деления на 86400(это были бы часы/минуты/секунды) и то, что поделилось было бы днями и потом переводил бы количество дней в год месяц день по формуле отсюда https://web.archive.org/web/20170507133619/https://alcor.concordia.ca/~gpkatch/gdate-algorithm.html
>>1617672 Ну он там в середине видео пояснял, что unique_ptr генерит 4 лишние инструкции ассемблера, причем не самые быстрые, косвенный доступ к памяти. Вот об этом речь видимо и шла.
Сап, анон. Делаю бенчмарки своего сатана, бенчмарк сделан так: загрузка файла в вектор значений, запуск таймера, цикл по выходным значениям, мой матан (используется Eigen), результат в другой предсозданный до таймера вектор, таймер стоп. В релизе процессор мммаксиум в 30%, как увести его в сотку?
>>1617696 Блядь. Удали весь свой сраный код и выбери предметную область получше. Для изучения наследования и композиции отлично подходят gui-контролы. Заодно и чему-то реально полезному научишься.
>>1617717 Я тебе вчера уже объяснял, почему.>>1617723 Потому что в MinutaMinus() ты вызываешь ChasMinus() ЭТОГО объекта, vremja. А в ChasMinus() ты вызываешь date.DenMinus() ДРУГОГО объекта date.
>>1617696 Я тебя запутал немного, у тебя объекты были глобальными созданы, т.е. не надо передавать их в функцию. Если я правильно понял твою ошибку, то у тебя дни прибавляются в объекте date, а выводишь ты значения полей объекта vremja.
>>1617746 Нет, в смысле он имеет ввиду например сменить всякие __gxx_personality_v0, __cxa_throw и тд? Ну там сигнатуру поменять, функции убрать/добавить, крч интерфейс сменить или он про другое?
• https://github.com/sosachbot/cppthreadhat/wiki
Ответы на вопросы:
• https://en.cppreference.com/w/
• https://www.cplusplus.com/reference/
Прошлый тред: