Я полный нуб, если что Перекот вопроса Дано: две проги, которые делают один и тот же Х. Первая сделана по принципу: main.cpp вызывает функцию 1, та что-то делает, вызывает функцию 2, 2 делает что-то и т.п. Вторая сделана по принципу: есть класс, в котором функции 1 и 2, main.cpp вызывает функцию из класса и далее по списку. Т.е. единственное отличие, что во второй проге я запилил класс, чтоб не передавать миллион переменных из функции в функцию. Вторая прога работает на 10-15% медленней. Это нормально? Или я испортил?
>>1719925 "Полный нуб" под спойлером вам вообще ничего не говорит? "Полный" = считайте, что я умею вызывать функцию с хэллоу ворлд и сделал класс с хэллоу ворлд и больше нихуя не умею.
>>1719934 Примерно так: unsigned int start_time = clock(); // начальное время // здесь должен быть фрагмент кода, время выполнения которого нужно измерить unsigned int end_time = clock(); // конечное время unsigned int search_time = end_time - start_time; // искомое время
>>1719939 Ясно. Говоря об оптимизациях, если компилируешь через g++, то добавь флаг -O2. Если не через него - хз, гугл в помощь. Может, просадка из-за времени, уходящего на создание объекта класса. Попробуй замерить уже после создания.
>>1719954 >Может, просадка из-за времени, уходящего на создание объекта класса Вряд ли, т.к. у меня в функциях вычисления в цикле, и хоть маленький цикл, хоть большой, время в % приблизительно одинаково отличается. >А вообще - забей. Если бы я мог, хех.
Ну я так понимаю, так быть в целом и вообще не должно?
Это снова я! Как заебал c++! Хочу, чтобы функция инстин... инстини... function gets instantiated с const. Знаю, почему вызывается без const - ранк ниже из-за квалификатора const.
А кто-то попал в ловушку плюсов, когда ему сказали что все остальные языки — медленное, нетрушное абстрактное говно и только на швитых плюсах можно пройти путь от макаки до человека, тот начал учить плюсы, а теперь плюется с них но ничего другого не знает и не умеет.
>>1720075 Мне тоже так говорили, но я вовремя понял, что не способен выучить плюсы настолько хорошо, чтобы найти на них нормальную работу, и съебался. Но я до сих пор согласен, что > только на швитых плюсах можно пройти путь от макаки до человека
A/B - типы, a/b - экземпляры. Код std::tuple<A,B> test(a,b) компилируется. Я написал свой shablon<A,B> test(a,b) и он тоже компилируется. Но std::tuple test(a,b) компилируется, а shablon test(a,b) не хочет, мол "no viable constructor or deduction guide for deduction of template arguments of". Что мне нужно сделать, чтобы можно было не указывать тип шаблона явно и он сам выводился из списка?
>>1720098 Всё, разобрался. Нужно было написать этот синтаксис через: template<typename... a> shablon(a...) -> shablon<a...>; Интересно, по какой причине оно не могло сделать это самостоятельно?
>>1719896 Мне тоже (очень) интересно посмотреть код. Если у тебя класс без виртуальных методов - то должно работать не медленнее кода без класса. А если ты передавал по 10 переменных во все функции цепочкой - то возможно чтение полей класса находящихся в одних и тех же местах было бы даже быстрее, чем громадное разворачивание стека, которое хреново кешируется - если я хоть что-то в этом смыслю.
>>1720427 Красава, я тож знаю, но все же думаю есть места, где неплохо было бы подучиться. Я уже прочитал все книги из шапки за пару месяцев и совершенно не понимаю как местные шизики могут говорить, что выучить с++ за 21 нельзя. Понятно, что они виляют задом и начинают задвигать про опыт, умение и т. п. - что все это нельзя овладеть в такие сроки, но по сути, они занимаются подменой понятий. Реально дела обстоят так, что с++ за 21 день можно пройти вдоль и поперёк, как я, собственно, и сделал.
Вот думаешь, почему языки все так любят изучать языки и фреймворки, а алгоритмы не особо? Может быть все дело в том, что языки, в отличие от матчасти, обладают своей выраженной "идеалогией", ответвляются от других себе подобных, создавая свою независимую фракцию с четко выреженными границами. Это позволяет людям отождествлять себя частью некого сообщества и пощряет "командный инстинкт", благодаря которому человек может позволить себе тратить больше своих ресурсов, изучая язык или фреймворк, что трактуется как работа во благо сообщества.
С другой стороны алгоритмы и математика. Обе науки представляют глобальный фундамент, ветвление в которых возможно только в высших своих проявлениях. Не так ли?
>>1720562 >Врёшь же nope. Я когда читал Мейерса заметки делал, вот гляди
- delete over private, because
+ нет неоднозначности + удаленной может быть любая функция + с помощью private нельзя отключить инстанцирование шаблонов, потому что нельзя специфицировать шаблон в области видимости класса
- override применяется для указания перепределения виртуальной функции
+ обеспечивает документируемость кода + позволяет не ошибиться в выборе сигнатуры переопределяемой функции
Ф-я осщуествляет перекрытие если: 1) Совпадает имя 2) Совпадают параметры и их типы 3) Совместимое возвращаемое значение и спецификация исключения 4) Идентичный ссылочный квалификатор 5) Константность функции совпадает
* Ссылочные квалификаторы позволяют переопределять поведение функции в зависимости от категории объекта (rvalue или lvalue). Используется, когда копирование излишне:
>>1720569 просто сейчас ты пишешь для конструктора "= delete" чтобы его "отключить", а раньше просто пихали его в private раздел, но там какие-то траблы с шаблонами могут быть тогда
Какой алгоритм слежения лучше всего подойдет для мобильных телефонов и компьютеров в риалтайме, по задачам должен просто следить за выбранным объектом, распознавать не нужно, юзаю OpenCV. Смотрел в сторону KCF, но может есть что-то побыстрее. Юзал пример с их сайта с этим алгоритмом и ужасно тормозило, у челов на ютубе с питоном в 10 раз быстрее было. Если у кого-то есть пример такого рабочего алгоритма, то тоже хотел бы посмотреть. Джун-новичок
>>1720100 >template<typename... a> shablon(a...) -> shablon<a...> Вот как можно обозначить эту деятельность не иначе как пердоленье? Вы же самые настоящие пердольки! (даже хуже, ведь от линуксом хоть пользоваться можно)
У меня есть вопрос касательно git. Читаю книжку по плюсам, там гайд по настройке Eclipse, cmake, git. Надо скачать репозиторий по адресу https://github.com/ TrainingByPackt/Advanced-CPlusPlus/tree/master/Lesson1/Exercise01/project, для этого дают команду - git clone https://github.com/TrainingByPackt/Advanced-CPlusPlus/tree/ master/Lesson1/Exercise01/project Но при ее выполнении я получаю ошибку git clone https://github.com/TrainingByPackt/Advanced-CPlusPlus/tree/ master/Lesson1/Exercise01/project Если я зайду на пару папок выше на той странице и выберу clone with SSH - [email protected]:TrainingByPackt/Advanced-CPlusPlus.git, то git clone работает, что-то скачивается без ошибок, но я не вижу куда оно сохраняется. Что я делаю не так?
>>1720693 на кресты слoжнее пoпасть пoтoму чтo на них тупо вакансий меньше. на десктопные приложения спрос упал сильно с развитием веба. сейчас почти всё можно сделать через браузер + встроенные средства винды сильно улучшились. в нулевые помню набор из 10-15 программ дополнительных им которые допом. ставил на систему. а щас всё в винде или в браузере. видеконевертеры, редакторы видео, даже аналог фотошопа есть в онлайн версии.
Но тем не менее на с++ всё равно можно дохуя денег заработать если высрать что-то своё. он так больше для предпринимателей в погромировании
>>1720700 Формошлёпства не хотелось бы, интересного там мало, перспектив тоже, учиться особо нечему. Если и заниматься десктопом, то это должно быть что-то масштабное, уровня хотя бы САПР или игор, вебу пока с этим не тягаться. Ну или какой-нибудь жёсткий реалтайм, но я слабо представляю, что там.
>>1720718 В этом и суть крестов, пилить какие-то свои проекты на которых ты лично можешь бабла поднят, а не в том чтобы работу найти за 300кк в наносек. В любом случае в С\С++ с душой, а всё остальное ни то. Нету там души, хотя когда я вкатывался то да, повёлся на форс про то что с++ язык крутых погромистов. А когда понял как там долго ебаться нужно было уже поздно, т.к. я всё таки начал уже, залез туда. В си хорошо освоился + у меня характер такой не бросать начатое так и сижу на срр
>>1720732 Немного изучал, ничего сложного на нём не писал. Тупо не хватает усидчивости, чтобы делать в 10-20 команд то, что на высокоуровневых языках делается в одну строчку. Возможно, ассемблер идеален для каких-нибудь контроллеров, но не более, но сейчас там даже чуть ли не JS можно.
>>1720615 > Юзал пример с их сайта с этим алгоритмом и ужасно тормозило, у челов на ютубе с питоном в 10 раз быстрее было Ты собирал-то хоть релизную версию? Это типичная ошибка новичка - сравнивать скорость алгоритмов в дебаге
>>1720743 С ним лучше поймёшь, как работает железо, и во что примерно превратится код после компиляции. В теории это должно помогать писать более оптимальный код, но обычно оптимизатор оказывается намного умнее.
>>1720710 Ну извини, по уровню твоего вопроса сложилось впечатление, что ты в первый раз открыл терминал под виндой и скопипастил туда строчку из туториала.
>>1720471 Объясните новодебилу что на пикче за хуйня, зачем нужны многоточек, как это работает? (то что тут шаблон я понял). В универе не учили такой хуйне, на практике не видел, но похоже на функция множественных аргументов? Поясните, пожалуйста.
>>1720752 Оптимизатор-хуизатор твой не человек и не может усмотреть все моменты из твоего говнокода, а ты, зная досконально работу всех команд, которыми пользуешься, сделаешь намного лучше.
>>1720913 Это нужно быть сеньором-помидором, воспринимать плюсовый код как сахарочек для ассемблера и заодно сильно упираться в производительность. Оптимизатор может и не человек, но в среднем он оптимизирует лучше, чем обычный кодер.
>>1720982 Забей на манипуляторы. Форматирование вывода в потоки это дрочба еще хуже самих потоков. Единственный адекватный способ изкоробки это (s)printf.
>>1721003 Тебе в любом случае придется хуярить размер "столбца", да и ты можешь написать функцию определения этого размера и в зависимости от результата работать.
>>1721013 Я "изъёбываюсь" и заебись живется. Да и типа из изъеба тут лишние пара минут на создание функции... Не вижу особо трудностей. Каждому - свое.
>>1721028 Если компилятор диагностирует ошибку, то это то же самое что просто ill-formed. Если не диагностирует, а оттранслирует программу, то её поведение не определено.
Насколько это корректное использование decltype? Я методом тыка подобрал и изначально там нули были в скобках.
Почему код из книги "Шаблоны C++ Справочник разработчика" не компилируется? Потому что она 2003 года. Что новое почитать, в частности где про всякое разное с произвольным количеством параметров рассказано. А то в стандартной библиотеки немного перегруженные примеры, довольно сложно иногда понять что происходит в каком-то конкретном месте, мягко говоря.
>>1721112>>1721113 Мне не в этом конкретном случае - тут то всё ясно, я просто самый короткий пример привёл. Например, мне нужно задать переменную пригодную для хранения произведения всех аргументов функции (может быть даже в структуре) - при этом прямо сходу первой строчкой задать произведение я не могу, потому что умножать нужно только на некоторые члены по сложным правилам.
>>1721109 >не компилируется? Нужная версия стандарт не включена.
А пикче хрень какая то нарисована. Инстанц шаблона функции один и тоже тип должен возвращать, вне . А кто сказал, что T и G это один и тот же тип? Не, они допустим один в другой может сконвертироваться (int в long например), но все равно это говнокод. Не делай так.
>>1721119 >>1721109 >Инстанц шаблона функции один и тоже тип должен возвращать, вне зависимости от от того, что во время выполнения больше/меньше окажется.
>>1721119 Так всё верно же, я могу засунуть туда int+double, а могу double+int, и в обоих случаях там будет double. А мне и нужно получить минимальный тип, умещающий сумму всех аргументов шаблона, причём написать auto я не могу - потому что это поле структуры, которое заполняется когда-то после при вызове одного из методов. Написал что-то вроде decltype(T()+(G()+...)) name и вроде работает во всех комбинациях верно.
>>1721124 Все равно фигня какая-то. Арифметика в компах не такая, как в абстрактной математике. Тем способом, которым ты хочешь решить задачку, ты либо округляешь число с плавающей запятой до целого (и то если влезет, что очень не факт) теряя точность, либо преобразуешь целочисленный тип к типу с плавающей запятой, опять же теряя точность, но теперь уже целочисленную. Повторяюсь, еще раз, во время выполнения функции, ее тип результата меняться не может. Можно динамическим полиморфизмом решить это (функция возвращает указатель на полиморфный объект), но все равно это херня с потенциальными подводными камнями.
Копай в сторону того, как тебе уйти от использования в одной операции целочисленного типа и типа с плавающей запятой. Это само по себе уже очень подозрительно.
P.S. В околоайтишных книгах использования типа с плавающей запятой для хранения денег приравнивается к экономическому преступления.
>>1721146 >ты либо округляешь число с плавающей запятой до целого Никогда не округляю, только наоборот. Я в курсе же - всё-всё знаю про плавающую запятую. И вообще, я просто практикуюсь и присматриваюсь к возможностям шаблонов - в действительности эта задача решалась в райнтайме с использованием нескольких переменных (можно и через твой полиморфизм было бы, да) - мне просто немного неприятно делать в райнтайме то, что можно полностью на уровне шаблонов и макросов сделать. Это как год-назад-тут-обитающий видос про гетерогенную хэш-таблицу в компайл-тайме - такой же бред в общем-то, только проще на порядки.
>>1721124 Вся наука борется за максимальную конкретизация типов, чтобы килограммы нельзя было складывать например с метрами и тому подобное, а ты хочешь максимально генерализованный арифметический тип.
>>1721152 у тебя просто задач как бы учебная, и ты скорее играешь с этим всем, а не пишешь что-то для реальной жизни? Ну тогда норм, ок.
>>1721146 >В околоайтишных книгах использования типа с плавающей запятой для хранения денег приравнивается к экономическому преступления. И как тогда надо хранить?
>>1721155 В копейках либо в структуре данных, где отдельно копейки и рубли. Помимо этого хранить как рациональное число, где отдельно числитель и знаменатель, и в числа с точкой переводить только на вывод.
Анон, объясни мне пожалуйста, как делают софт, использующий несколько языков. Первый вариант, как я понимаю - скомпилить (например, из хаскелля) объектный файл или либу, и как-то сделать хедер для c++. А как делают со скриптовыми языками, например, питон или js? Вставлять интерпретатор в свой c++ проект? Как тот же питон передаст инфу в c++ часть? Потоки ввода-вывода? Сокеты?
>>1721203 Например вот так. Это TCL. Создаешь объект "интерпретатор", и потом кормишь его кодом на TCL прямо посреди си. Уверен, примерно так же можно сделать с питоном или жс.
>>1721203 Ну посмотри на qt. Там реально ты пишешь условный бек на крестах + qt dsl на макросах и дополнительных ключевых словах, условный фронт на qml + js, и внутри обоих css для задания свойств виджетам. Часть этого jit компилируется на v8, часть как обычно.
>>1721219 Проценты начислять например каждый день. Даже байка была (а может и не байка), как какой-то хитрый банковский погромист округлял всё до цента, а доли центов воровал себе, и довольно много так наворовал.
>>1721402 Никак. Само получается. Я процедурками пишу когда пишу что-то маленькое, а вот если пишу крупную программу то там сам уже продумываю классы т.к. если этого не сделаю то я потом просто запутаюсь и охуею.
>>1721402 Продолжай придерживаться структурного подхода из Си, только добавь к нему что у структур бывают еще методы. Это сейчас самое модное направление в плюсах, его называют "си с классами".
>>1719888 (OP) Как прикастовать метод класса к статическому методу? Пишет что не может кастовать (classname::★) к (★). Мне всё статическим делать что ли?
Двачкованы, вопрос по #define Есть один проект который тестируется другим проектом. У них общий #include. В настройках 2-го проекта определяем например __TEST__ И в их общем #include чего-нибудь переопределяем #ifdef __TEST__ #define .... #else #define .... #endif
Это работает заебись, когда каждый из проектов заранее знает кто он, например для экспорта/импорта DLL.
Но я хочу передать __TEST__ в первый проект чтобы он перекомпилировался вместе с тестом и чтобы у них #defines делали одно и тоже. Другими словами чтобы весь solution компилился или в тест моде или продакшн моде. Такое легко сделать через makefile, а как через проекты? Можно конечно через Configuration это сделать, например если Configuration=Debug, то в обоих проектах определить __TEST__. хз. Или сделать отдельный Configuration для unit tests?
Кто-нибудь с g моком ебался? Какая уебищная хуета, но лучше кажется ничего нет. В С++ моки это мучение.
>>1721660 Так а в чём отличие указателей на эти методы? Ему не похуй ли в классе оно или нет? Как мне, например, писать обработчики событий и передавать их либам, которые просто (★) принимают?
>>1721666 > Можно конечно через Configuration это сделать, например если Configuration=Debug, то в обоих проектах определить __TEST__. хз. Или сделать отдельный Configuration для unit tests? Выбирай
>>1721682 Оба подхода кривые так как придется конфигурить два билда на билд сервере, дебаг и релиз. И в релизе снимать галку, чтобы тестовой проект не билдился. В идеале хочется собирать только релиз и его и тестировать, потому что иначе это технически другой код. Мало ли что там дефайны наделают. Косяки короче. Тестируем одно а релизим другое. Похоже хуйня эта затея, придется передумавать.
>>1721618 Наверное как-то так: https://ideone.com/vriHUY Вроде работает. Там в комментариях описан ход мысли. Но это говно ебаное, я просто методом тыка это разобрал - нет никакой гарантии что это заработает на другой версии компилятора, с другими настройками или в других случаях.
>>1721677 >Как мне, например, писать обработчики событий и передавать их либам, которые просто (★) принимают? Через лямбду с захватом? Ну, или через функцию с глобальным переменной. Просто если ты прикастуешь метод вышеописанным способом, то функция вызовет метод, но по указателю this там мусор будет, потому что либа ничего не знает про экземпляр класса, к которому этот метод имеет отношение.
>>1721725 > Через лямбду с захватом? Лямбда тем более не кастуется к (★). > Ну, или через функцию с глобальным переменной. Так и сделал, но это какой-то говнокод.
>>1721760 >Лямбда тем более не кастуется. В самом деле, мой косяк. Только пустая без захватов кастуется.
Странно, если в либе нет вомзожности передать вместе с твоей функцией число или другой идентификатор - чтобы можно было различать разные экземпляры твоего класса. В винде полно звёздочек в каллбеках, но помимо этого они ещё идентификатор возвращают, по которому можно не без некоторого дополнительного кода определить вызывающий экземпляр.
>>1721760 Можешь привести пример, что ты хочешь кастовать? Так то статик функции похожи на pure function в моем представлении: понимают аргументы, вычисляют независимо ни от чего, возвращают значение. А для инстанцированных объектов вроде используется std::bind, если нужно передать функцию объекта мимо
>>1721924 > что ты хочешь кастовать? Обработчики исключений WinAPI. Туда лезет только (*). Везде в гугле ахуительные примеры прям в main, естественно там никаких проблем нет с доступом к глобальным переменным из обработчика. А вот как адекватно внутри класса с этим работать не очень понятно.
Аноны, как снимать хук RawInput? Вот я зарегал через RegisterRawInputDevices устройства, кинул хук, потом делаю UnhookWindowsHookEx и RegisterRawInputDevices пустым, но хук так и висит у меня, а инпуты не возвращаются к приложению. Мне надо вручную как-то устанавливать обратно на приложение эту поеботу? Или как это вообще делается, чтоб после хука я мог отключить его?
>>1722333 А меня могут взять на такое, если у меня нет опыта работы (вообще), но есть куча всевозможных физических симуляций на гитхабе с поверхностями, кватернионами и другими вычислительными методами (в том числе многопоточными или под видеокарту)? Ну и ещё что-то про opengl, всякие ретрейстеры на октодеревьях, которые тоже про линейную алгебру.
>>1722851 Для начала пусть сам Раст вырастет из пердольного поделия уровня Nim. На этом говне только сами разработчики умеют писать. Ну или линукс-пердоли, которым и собака Bash норм. Мало того что при написании системщины мгновенно утыкаешься в стену и вынужден ансейфить, так ещё и все врапперы сишных либ на ансейвах и работают хуже чем без Раста. Это говно просто не имеет задач. Индусы/веб-макаки/дети пусть на го/шарпе пишут, а нормальным пацанам и кресты норм.
>>1722919 главнoе не пoдалеть денег на рекламу. вoпрoс тoлькo в тoм чтo игра будет реальным гавнoм и вoзвраты oт игрoкoв или низкие прoдажи не oтoбьют даже денег пoтраченных на рекламу. да там пoдвoдных дoхуя, нo этo лучше чем идти на эту ебучую вакансию
>>1722922 Проблема с игрой в том что её очень долго и забёно писать. Потом ты её выкидаешь и люди её покупают. Но большинство разработчиков увы не выстреливают и их игры в лучше остаются на среднем уровне. То есть ты написал игру люди купили, основная волна прошла все преданные фанаты есть и денег и больше нет. Очень многие начинают тупо сосать бабло с фанатов игры выпуская длси, всякие новые ёба версии, разумеется всё это делается с максимальной ленью чтобы побыстрее бабла выскрести.
Ярки пример power revolution годная игра, аналагов ей нет. Но увы они продали 4 части в которых вообще толком нихуя не меняли даже баги не залатали. По итогу у этой игры очень часто можно встретить кучу негативных отзывов, т.к. фанаты игрушки очень сильно бугуртят с продажи одного и того же гавна.
>>1722333 К теме твердотельной геометрии линал с апроксимацией только 20% составляет. Также странно, почему нет требований по знаний верстки латекса и знание матлабаматлаба. Мне кажется, работа эта новая, нет ещё наработок
>>1722256 >Деструктор d всё равно вызывается. А чего ему вызываться, если reference count не изменится, объект не удаляется. Для этого и dtor у share_ptr переопределен на пустой. Сам объект d никуда не денется. А проблему я решаю с ебаным gmоck. Там такой компот, если че-нить тронишь начинаются какие-то side эффекты. Добился устойчивой работы, ну и ладно.
Да ну, а почему нету _mm256_dp_pd? И при этом какой-то треш вроде _mm_crc32_u8 там есть - хотя этот crc32 вряд ли заслуживает аппаратной поддержки, не говоря уж про то, что он и так достаточно быстро работает.
>>1723157 Вот конкретный охуительный косяк: если в EXPECT_CALL засунуть shared_ptr, то сам метод вызовется и вернет правильный объект, но вещи типа Times(0) не работают. Если вместо шары засунуть объект, то все работает как надо. А с unique_ptr вообще пиздец еботня. Иногда лечится с помощью std::move иногда нет. Короче все, надо всем на руст переползать. Так жить нельзя.
>>1723406 Да я уже заметил читая предисловие что книга для ньюфань которые даже клавиатуры не нюхали. Но я уже после книжки Ритчи и Кернигана. Ладно буду эту книгу читать.
>>1723354 Ты если "с нуля", не Страуструпа читай. Возьми хоть какого-нибудь Столярова, чтобы от ассемблера попасть в Си, а потом уже в С++. Но написан Столяров этот ужасным языком, глаза вытекают от канцелярита, можно наверное оглавление посмотреть, и составить себе план на его основе, и пройти по другим книжкам.
>>1723458 Пройтись по этому набору, проверяя длину векторов, и сохраняя указатель (или индекс, если это массив) вектора максимальной длины. Потом после окончания цикла - по этому указателю/индексу будет нужный вектор.
>>1723438 прoще изучать с высoкoгo урoвня на низкий. я начал с питoна, перешёл на си, щас на с++ вхoжу. асм пoсле с++ будет. если бы я будучи ньюфаней oткрыл бы книгу пo си, я бы oхуел.
>>1723474 Ну ок, если ты так пошел - почему тогда ассемблер после С++? Его же лишь немного надо задеть, сразу после Си тогда заебись - можно увидеть почти прямо "маппинг" сишного кода в ассемблер.
Отрубить оптимизацию, и еще у гцц есть ключ, с котором он не в машинный код компилирует, а в ассемблер - вообще красота будет и сразу всё понятно.
>>1723438 Самый неудачный способ изучения. Как уже выше писалось начинать надо изучать с выского уровня переходя на более низкий. Никто из не начинал знакомство с компьютером с нолика и единички. Мы все начинали водить мышкой и кликать кнопки в окнах. А не сразу садились за ассемблер. Всё начинается с простого постепенно переходя к сложному. Ребёнок с миром не начинает знакомтсво с разбора его на атомы и молекулы.
>>1723496 А мне кажется нормальный способ. Ассемблер же не будешь выдрачивать до совершенства со старта. Хелло ворлд там, квадратное уравнение какое-нибудь решить, массив отсортировать - и уже пошел в Си. Он (ассемблер) только и нужен, чтобы понять что за зверь такой - указатель, и что там примерно происходит когда вызываешь функцию, или когда делаешь арифметическую операцию.
>и что там примерно происходит когда вызываешь функцию, или когда делаешь арифметическую операцию.
И нихуя не узнаешь.
Потому что компилятор может заинлайнить, может завекторизировать, может наоборот развернуть цикл и вообще, лучше тебя и твоих учителей из книжек по ассемблеру времен Pentium 1 в лучшем случае, в курсе о последней мете в оптимизации на архитектурах современных корок и рязаней.
Ассемблер реально нужен в двух случаях - написать бутстрап при создании операционной системы (специальные команды вроде сисколов и всякой инициализации системных регистров вроде перехода в защищенный режим на языке высокого уровня не сделать) и ... всё.
Ну может еще AVX ИНСТРУКЦИИ ПОКАЖИ ТКНИ вручную запилить, что бы сделать код непереносимым, но БЫСТРЫМ ОЛОЛО АЖ НА КОНСТАНТУ ПЕРЕД N - но и тут есть интринсики, которые делают это лучше.
>>1723511 Ты как-то резко перескочил с задачи обучения на задачи из реальной жизни.
>Потому что компилятор может заинлайнить, может завекторизировать, может наоборот развернуть цикл Серьезно?
Процитирую себя, раз уж ты взялся отвечать на один пост, а не включиться в дискуссию целиком: >Отрубить оптимизацию, и еще у гцц есть ключ, с котором он не в машинный код компилирует, а в ассемблер
>>1723526 >>Потому что компилятор может заинлайнить, может завекторизировать, может наоборот развернуть цикл >Серьезно?
На твоей картинке до 23 строчки, если что, стандартный пролог в котором программа себе стек подготавливает. Сам твой код скомпилировался в строчки 23-27.
>>1723532 >если что Ну нихера себе ты какой умный. Прям глаза мне открываешь. Сам-то я дремучий, не знал никогда ничего подобного.
Неужели отрицаешь учебную ценность написания какой-нибудь мелкой хрени на ассемблере, потом такой же на Си, и сравнения потом листингов твоих, и тех что выдает gcc с флагом -S ?
>>1723785 >Это не UB, это platform specific или что-то в этом роде Это UB из-за нарушения strict aliasing rules предпочитаю именовать это во множественном числе.
>>1723897 А в чём заключается разница между разными платформами? Они могут использовать разный формат числа с fp? Или чё там, регистры бывают меньше чем 4 байта? Или выяснение нан или не-нан происходит в FPU, а туда засылать/вынимать медленно?
>>1723929 Возможно, вся эта канитель с манипулированием битами и передачей по ссылке имеет под собой одну цель — не трогать регистры с плавающей точкой.
Правда, смысл не совсем ясен, число, которое в объекте на который передают ссылку наверняка побывало в таком регистре да и ещё, возможно, было пролито в память только для передачи по ссылке.
>>1723934 Слушай, а может быть у них там есть самописная арифметика с плавающей точкой? Например показатель всегда одинаковый, а они только мантиссы туда-сюда херачат битовыми операциями? (и всё это каким-нибудь расширением типа SSE, чтобы сразу массивы аппаратно обрабатывались)
Хотя зачем тогда проверять NAN и как он может возникнуть - непонятно нихера.
>>1723938 Doom так работал. Они использовали математику с фиксированой точкой в 32битных целых. В те времена выбора не было, операции с плавающей точкой были слишком медленными.
Предположим, есть template<int arr[1024]> что-то там дальше...
Когда я проинстанцировал шаблон, где именно хранится данный массив-параметр шаблона? То есть, если для каких-нибудь мелких параметров типа int-ов они (обычно) тупо сразу вставляются в код как immediate-параметры, но что происходит с более сложными объектами типа того же массива?
Что изменится, если я сделаю так? template<int (&arr)[1024]> что-то там дальше...
Правильно ли я понимаю, что теперь, если я буду менять массив, с помощью которого шаблон инстанцировался, то эти изменения будут оказывать влияние и на шаблонную функцию/класс (т.к. там теперь ссылка)?
Что мне следует выбрать (arr, const arr, (&arr), const (&arr) или другое), если массив известен на этапе компиляции (и не меняется) и я хочу, чтобы мне компилятор максимально поанроллил какие-нибудь циклы, завязанные на данный массив-параметр шаблона? Ну, или какие другие оптимизации сделал.
>>1724056 Какие-то сложносоставные команды. На интеле сначала например and, потом cmp а тут ебала cmpand - два в одном.
>>1724058 Это же как-то называется? А вот сам нагуглил: >VLIW (англ. very large instruction word — «очень длинная машинная команда») — архитектура процессоров с несколькими вычислительными устройствами. Характеризуется тем, что одна инструкция процессора содержит несколько операций, которые должны выполняться параллельно
>>1724067 Мне надо написать шаблон для элементов алгебры с заданной на этапе компиляции таблицей умножения и забыть об этом как о страшном сне. Поэтому мне выгодней по времени задать вопрос.
>>1724095 Это не домашка, а попытка сделать бекенд производительнее... Да и вопрос я задал не в формате "я не понимаю, сделайте за меня", а по конкретной объективной вещи, касающейся языка. Если на каждый вопрос отвечать "смотри man/стандарт/справочник", то данная борда теряет смысл.
>>1724116 ЗАДАЁШЬ РЕАЛЬНО ИНТЕРЕСНЫЙ ВОПРОС @ ТРЕД УМЕР, БОЛЬШЕ В НЕГО НИКТО НЕ ПИШЕТ @ ТЯН ПРОСИТ ПОМОЧЬ С LABA2.CPP @ ТРЕД МОМЕНТАЛЬНО УЛЕТАЕТ В БАМПЛИМИТ
> Array and function types may be written in a template declaration, but they are automatically replaced by pointer to object and pointer to function as appropriate.
Ну то есть будет у тебя в бинарнике лежать массив, а в типе только указатель на него.
Интересно, что там c++20 поменяет? Ведь можно будет передать literal class type - std::array например
>>1724131 В чем проблема ебануть статик констэкспром std::array<T, N> тупо ссылаться на него? И тип, и размер известны. Компилятор сможет на оптимизации хоть издрочиться.
>>1724166 > Не, не. На чём щас пишется кoмплятoр С++20. На чём? АСМ? Серьёзнo скажи чтo там? "кoмплятoр С++20" такой вещи сейчас нет, язык вначале парсится/разбирается фронтендом - это практически отдельная программа (clang например) которая может быть написана хоть на JS, а потом уже в бакенд передается AST представление кода программы, а бакенд уже непосредственно строит по нему программу в кодах машины. В основном бакенды компиляторов пишут на Си, есть там вставки на ассемблере в платформозависимой части кода кудаж без них, но вообще я слышал мнение от компиляторщиков что Си уже маловато, где то и регекспы бы неплохо было заюзать и со строками по проще работать и все вот это вот.
>>1724244 Задания джунам дают такие, где нужно только написать/отладить код, ничего не изобретая. То есть не уровня "запили вот эту фичу" (а как именно придумай сам), а уровня "напиши вот такой-то класс/функцию" - с чётко описанным интерфейсом такого класса/функции, и с требованиями какое поведение от него требуется.
>>1724380 Может быть и можно. Но скорее всего около года придется подрочиться джуном, просто чтобы поняли что ты дисциплинированный, не проебываешься. Ну и понять что контора вообще делает, какие особенности. Такой себе испытательный срок, но длящийся подольше.
По себе: вот я устроился в сентябре (это было много лет назад), зарплата была только на поддержание штанов. К следующему лету стали доверять принимать собственные решения, и сразу зарплату подняли вдвое. Тогда еще не было четких терминов джун/миддл, но это было примерно оно.
Не помойка, а живая, развивающаяся архитектура, потому что успешная и работающая. Да, у какой нибудь некро-трупа вроде MIPS маны покрасивше и покороче. Но только лишь потому, что оно сдохло. У ARM сейчас точно такая же "помойка" как ты выразился, исключительно по причине того что он жив и развивается а не сдох как ваш MIPS и прочие Alpha.
>>1724544 >boost::algorithm::join Почему в std этой хуйни нету? В том же самом питоне есть, и там вывод строк с разделителем делается очень легко и просто.
>>1724517 const -- это не какая-то хуйня, которая слева или справа присобачивается. Лично я предпочитаю писать T const ★ const ptr = ...; Тут получше видно, какой const что делает.
>>1724558 Потому что работа со строками (если это не парсинг) в сиподобных языках - зло. Да и есть std::accumulate, которым в два счёта делается с помощью лямбды.
>>1724558 >Почему в std этой хуйни нету? Главный вопрос в плюсах. В питоне вон в стандартной либе есть гуй, три парсера xml, сокеты, две реализации процессов, http-сервер и дохуища остального.
>>1724596 Потому что её и так охуеешь имплементировать на 100МГц-64Кб вёдра. Алсо складывается впечатление, что не хотят вводить всякие модные штуки с неявными аллокациями - все эти join, slice и т.п. Вон strdup в С приняли только после 30 лет копротивления.
>>1724468 > Не вижу противоречия пока. Не ну просто я подумал ты cmpand считаешь за широкую команду типа две операции в одной. На самом деле это одна операция и они стопкой упаковывааются в одну инструкцию (бандл) в фигурных скобках, потом вся эта гормошка в одном такте запускается. Но это не какой то супер новый подход.
Из необычного тут как бы шесть универсальных устройств каждое это такое типа ядро объединенное с другими через общий регистровый файл. Полноценным ядром мешает считать то что оно с другими синхронизировано и не может работать как тред, но так вообще во время компиляции на него можно спокойно планировать задачи каждый такт (такой мультитред внутри программы). Так же есть еще отдельный регистровый файл с однобитными булевыми значениями (и все результаты сравнения записываются тупо в предикат а не в обычный регистр, поэтому и столько команд на все случаи жизни пришлось делать) и можно любую операцию (риск-команду) внутри шк привязать к этому регистру типа если там true то эта операция исполнится а если нет то нет, чтоб переход не делать. Переход реализован в два этапа - там три конвеера, запасные есть в них можно код подгрузить заранее который возможно или точно будет вызван и когда надо перейти в него исполнить и вернуться обратно как бы в тот же конвеер откуда вызвали код или откуда переход был. Инструкцмии в конвеере можно в прямом смысле зацикливать а не просто переходом возвращаться и еще там дохрена чего.
Но понятно что эти как бы фичи это просто программная альтернатива тому что в таких процессорах как интел автоматически как то разрешается.
Двач, не соображу, подскажите приемлемый алгоритм, есть вектор векторов, как получить вектор с наибольшим количеством элементов? Или несколько векторов если вектор с максимальным количеством элементов не один.
Крестончики, посоветуйте минималистичную либу/фреймворк/движок для написания игорей на С++ под мобилки (iOS/Android) с поддержкой CMake.
Пока попробовал только cocos2d-x. Завелось с полпинка, в целом вроде ок под виндой, но вангую траблы при конпеляции на iOS/Android ещё не успел всё настроить. Может есть более приятный стул который я не смог нагуглировать?
>>1724857 Предлагаю это звезду взять за официальный символ указателя ИТТ. Ведь именно в указателе и вся дьявольская мощь и всё дьявольское коварство С++.
>>1719888 (OP) Начал читать книжку Страуструпа, он там о себе рассказывал написал что большую часть времени своей жизни он участвует в застольях с друзьяшками и поэтому вынужден заниматься спортом чтобы себя в форме держать лол.
>>1725346 Я почитал так что Страуструп о себе пишет, даже его авторский сайтик он такой социоактивный человек довольно. Интересно когда он успел столько всего разобрать в айти если он социоблядок с двумя детьми и женой.
>>1725358 знал бы ты как я в своё время 2 дня пытался понять работу побитовых операций. пока не дошло что число в памяти представляется как 32-х значное двоичное число.
>>1723264 При чем тут мне. Есть либа, из нее наружу торчит extern пойнтер на глобалный класс. Ему логично быть умным. А моя задача его наебать и подсунуть ему как бы умный указатель, а на самом деле хитрый указатель, который притворяется умным. Потому что это объект на стеке. Это же охуенно, косяки обходить посредством наебок. Считаю, что если знаешь, что делаешь, то наебывать умные указатели это очень круто и черный пояс джедай лвл.
Стал изучать этот ваш цпп си плюс плюс. Короче почитал про синтаксис, какие-то примеры в консоли сделал, решил перейти к реальной задаче, там мне надо было делать HTTP-запросы неблокирующие, стал естественно искать библиотеку, библиотека разумеется не одна, рандомно выбрал easyhttpcpp от Sony ибо бренд знакомый, у меня их mp3 плеер с 2013 года и ни одного косяка. Короче стал прикручивать и охуел просто, там в зависимостях еще какая-то огромная библиотека ебиблиотека POCO, она вроде и собирается без ошибок (есть для VS проект), но видимо как-то не до конца; через VCPKG таки поставил ее, но там везде все делается через cMake и я так понял, что тут без шансов: так и не смог нормально прописать ей пути, чтобы она нашла эту ебучую либу. Работа с зависимостями в языке никакая. Разумеется, можно бросить, попробовать взять какую-нибудь header-only либу, но нет, я уже понял, что ваши плюсы - говно.
У меня кстати и раньше редко когда получалось собрать что-то из исходников: всегда не хватает каких-нибудь файлов включения, ты ищешь решение и вроде че-то находишь, начинается пердолинг, но итог чаще всего один и он не утешительный.
Видимо, язык хорош для разработки производительных низкоуровневых приложений с минимумом зависимостей, где критично потребление памяти, он явно не для того, чтобы быстро что-то написать и забыть.
>>1725744 Возьми qt, если хочешь не ебаться с мелочами, а выучить именно язык. Идея не в хорошести именно qt, а в том, что в одной либе собрано всё что может понадобиться (в том числе и хттп), одну её поставил, и уже пишешь.
>>1725744 >перейти к реальной задаче, там мне надо было делать HTTP-запросы неблокирующие, стал естественно искать библиотеку И чего вы все сразу лезете вот в эти HTTP/XML. Закономерно хлебнул говна.
>>1725744 То есть зависимости поставить через vcpkg ты догадался, а саму либу нет? А доки к vcpkg прочитал? vcpkg integrate install и не нужно нигде никаких путей указывать
>>1725751 >То есть зависимости поставить через vcpkg ты догадался, а саму либу нет? А доки к vcpkg прочитал? vcpkg integrate install и не нужно нигде никаких путей указывать Увы, авторы либы не считают нужным поддерживать пакет vcpkg, о чем они прямо заявляют. Ведь в вашем C++ же нет работы с зависимостями, вместо этого много разрозненных менеджеров пакетов, которыми никто не пользуется.
>>1725748 >И чего вы все сразу лезете вот в эти HTTP/XML. Потому что 99.999999% современных приложений сводятся к посылке сетевых запросов и обработке ответов, либо наоборот.
>>1725801 Почему, когда у других все работает, а в твоих плюсах мрак какой-то, виноват кто угодно, но не никакущий паршивый подход к работе с зависимостями в твоем "божественном" языке? Почему, например, в Go (уверен, по твоему же мнению это стремный язык для индусов и школьников с одной извилиной) как правило сторонние пакеты подключаются одной строкой? Да и практически везде уже так.
>>1725816 >сторонние пакеты подключаются одной строкой? Потому что это приводит к тому что плодится макачье говно, которое некоторые называют "экосистемой".
Стандартные либы - у тебя из коробки в С++, Нестандартные, но хорошо проработанные и общепризнанные, легко ставятся менеджером пакетов системы вместе с зависимостями. Нестандартные, написанные васяном левой ногой - подключай как хочешь и используй на свой страх и риск.
>>1725816 > Почему, например, в Go нет аудио и гуя? В джаваскрипте вот есть низкоуровневое апи для работы с аудио, и 2D графика есть, 3D вот вот появится, про гуй просто молчу это самое базовое что там есть. Почему в твое Goвно этого всего не завезли, мм?
>Почему, например, в Go (уверен, по твоему же мнению это стремный язык для индусов и школьников с одной извилиной) как правило сторонние пакеты подключаются одной строкой?
Это где подразумевается что гитхаб вечен и незыблем?
То есть если МС решит закрыть или ребрендировать/переименовать гитхаб, у гоблядей с захардкожеными репами в исходах начнется конец гомирка в режиме чернобыльской АЭС?
>>1726111 Интересно, что в остальных языках с менеджерами пакетов достаточно поменять адрес центрального репозитория в конфиге, если подобное случится. И только в го у тысяч хомячков будет гореть жопа от безысходности, ведь ссылка на гитхаб хардкодится почти в каждом файле.
Помогите со сборкой OpenCV для андроид, у меня получилось нормально собрать на винду, но на андроид какая-то хуйня и ошибки линковки. Собирал с помощью MinGW. И вот что получил на выходе, так и должно быть? Qt Creator не хочет линковать.
>>1726402 Я разобрался. Я пытался передать указатель на вектор и при попытке обратится по индексу выходила ошибка. Я не знал что если написать vector<int>& a и vector<int>⛧ a это разные вещи
>>1726410 Кстати оцените. https://pastebin.com/Edet7kVe Стоит ли добавлять возможность написать произвольный компаратор, добавить шаблоны? Или и так сойдет в образовательных целях?
>>1726419 Не думаю, что в какой-либо стандартный контейнер можно засунуть больше чем 2^64-1 элементов (максималка size_t для 64битной компиляции, для 32хбитной соотвн-но 2^32-1).
Да что за ебаная хуйня-то? Печатаю содержимое массива - все ок, данные именно такие, что и должны. Использую их - начинает пидорасить. В цикле модификации точно нигде не происходит. Я может где-то при перегрузке оператора обосрался и он переписывает текущие значения?
>>1719888 (OP) Аноняне, возник вопрос. Могу ли я научиться С++ до олимпиады на достаточно серьезном уровне, если буду заниматься им упорно и читать много литературы. (Не секундная мотивация, занимался до этого немного другим и тут узнал что это наиболее скоростной язык из возможных, хоть и сложный). Если что олимпиада в начале осени
>>1726431 > unsigned int Говнокод. Ты либо пишешь uint32_t, если тебе нужно именно четыре байта, либо size_t, если это просто индекс из стандартной библиотеки.
Напоминаю, size_t - это архитектурная ошибка стандартной библиотеки
>>1726467 Я вкатился в олимпиады на С в 13 лет за две недели без литературы (но с небольшим клубом таких же задротов). Правда потом еще два года не понимал тех кто писал на С++ и зачем он нужен, если все равно точно так же ебёшь байты и указатели.
Тащемта для вката литература таки нужна, но не по цпп, а по алгоритмам и структурам данных. А для решения задач достаточно умелого владения операторами if и while.
>>1719956 В целом нихуя не понятно без кода. Вообще, в таких замерах может быть много нюансов: кэширование, выравнивание, контекст свитчине твой случай и т.д.
>>1726489 > Почему ошибка? Из за отсутствия определенного в стандарте размера? Дело не совсем в размерах. Скорее в том, что тип беззнаковый. Только представь, сколько багов это породило. >>1726487 > Да кто эти ваши uint32_t? Я о них не читал Ну так почитай
>>1726723 >Просто пишешь код, а компилятор его оптимизирует в том числе и для SSE.
Угу, только он как тот еж, пока не пнешь его всеми возможными прагмами и нон-портабл макросами про "тут SIMD пидор, По буквам - В Ы Р О В Н Е Н О, А Л И Ж Н 8, К О Н С Т"
>>1726467 Дрочи не языки, а матчасть и понимание. Язык это инструмент, его не нужно выдрачивать ради него самого, а только в той мере, в которой он нужен тебе для решения задачи.
Когда я еще учился в шкалке, я думал, что выучу С++ и стану прогромистом, и по итогу, на 1 курсе универа я уже прочитал почти всю литературу в шапке про stl, метапрограммирование на шб и про др. ахуительные практики, сейчас благополучно всё забыл,думаю лучше бы qt изучил, хоть польза была бы какая-то
Друзья, очень нужна ваша помощь. Вот тут с 58 строчки https://pastebin.com/JFMqC85Q нужно как-то передалать алгоритм поиска седловой точки матрицы на итераторах. Я сделал на итераторах ввод матрицы, но вот никак не пойму как передалть алгоритм. Там буквально 2 минуты если вы понимаете итераторы, очень прошу помочь. Заранее большое спасибо.
Плюсаны, инсайдерская инфа: 2гис активно ищет разрабов на плюсах, вот одна из вакансий - https://novosibirsk.hh.ru/vacancy/36850803 Берут как на удаленочку, так и в офис в нск.
>>1727178 > Это то что мне нужно, если я не знаю разницы между void f(int★ x) и void f(int& x)? Достаточно знать, что первое не надо использовать в коде c++
>>1727196 Хз, взяли в тостеры в этот отдел без опыта. Не считая полгода формошлепства на жсе. У них прям пиздец горит, новые проекты запускают, можешь попробовать отклик кинуть.
Почему при вызове >std::cout << str << "\n"; строка отображает мусор в конце? При этом строке было выделено ровно столько байтов, сколько она содержит полезной информации. От куда лишнее дерьмо в конце?
п.с. Я знаю про символ конца строки, но я не понимаю почему строка содержит больше, чем ей выделено.
Анончики, как писать свой аллокатор, сам пишу учусь на QT, но с написанием подобного не сталкивался. На степике не очень хорошо объяснено я тупой просто. Что почитать чтобы реализовать Buddy и SLAB аллокаторы.
>>1727682 > Чел, хуйню пишешь. В си нет операторов ввода-вывода. Это первое. Второе, с такими советами можешь сразу идти на хуй. Я не тот анон, которому ты отвечал, но нахуй идёшь ты, т.к. в изначальном посте код на плюсах. >>1727686 Просто схуяли?
>>1727671 >п.с. Я знаю про символ конца строки, но я не понимаю почему строка содержит больше, чем ей выделено. Не содержит, функция печати печатает символы по очереди, пока не дойдёт до \0, она уже давно вышла за пределы строки и пошла куда-то дальше по памяти.
Тут есть аноны которые пишут какую-нибудь матешу на плюсах? На спеце в моей шараге очень понравилось ускорять код уравнения волнового процесса, метод Якоби 9-ти точечного шаблона и вот это вот всё. Пол стал вакансии в моём ДС-3 есть вакансии для студентов связанные с подобной деятельностью. Стоит пытаться вкатится, если знания линала, ангема и вычей так себе?
>>1727671 Выводится все, до нуль терминатора. Т.к. у тебя нультерминатора нет - выводится мусор хранящийся в памяти за твоей выделенной, пока там не найдется нуль терминатор. Ехал UB через UB.
>>1727677 Блядь, какой же ты тупой. Ты выделил 3 символа в строке - столько памяти тебе доступно для модифицирования. cout(и printf тоже, к твоему сведению) выводит строку до первого '\0' символа, ничего не зная о ее размере. Вызови для своей строки сишный же strlen и завали ебало.
>>1727924 Да иди ты на хуй, омежка озлобленная. Поссал тебе на голову, чмо.
>>1727930 Да знаю я про это. Я не мог логически сопоставить тезис: выделение памяти для хранения. Ведь, если существует понятие такое, логически, оно подразумевает - выделять и хранить столько, сколько было указано компилятору. Но я уже понял, что это такая особенность работы оператора вывода.
>>1727956 Нет, это ты никак не въедешь, а не оператор ввода-вывода работает не так. Почитай, как хранится в памяти строка, что такое указатель и как происходит работа с массивами, а потом уже огрызайся.
>>1728124 У них разная сложность для разных операций. Например, лист лучше юзать для добавления в начало или конец или последовательного прохода итератором, а если нужны частые обращения по произволтным индексам, но размер изменяется редко, лучше брать вектор.