Это копия, сохраненная 30 марта 2019 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Ответы на все вопросы - http://en.cppreference.com/w/ http://www.cplusplus.com/reference/
Прошлый >>1336773 (OP)
Около-виртуализацию пишем самопальную, Виндовс 10\2016, Вижуал студия самая последняя, Виндовс драйвер кит, решарпер\всякие разные ништяки по желанию. С++17 разрешен и активно используется.
Из внешних зависимостей только какая-то говнолиба для парсинга жсонов
>Тред уже был, хоть и кривой
Дебил, тот тред создан задолго до бамплимита и ссылку на него как на перекат вбросили по-приколу.
Код должен открывать файл и читать оттуда.
Мне это надо реализовать через указатели на строки блядь, нахуй мне эта функция? Лишь бы сказать чего
Ну так обьясни мне дебилу тогда
char a[N][M] это сишный массив из N строк, максимального размера M.
a[0] - первая строка
a[1] - вторая строка
Сравнение - strcmp(a[0], a[1]).
В чем твоя проблема?
Мне УКАЗАТЕЛЯМИ, УКАЗАТЕЛЯМИ НАХУЙ нужно это делать, а не готовой функцией, ну еб твою мать
Про то, по какому принципу сравнивается целиком вся строка, я даже спрашивать не хочу
ну это твоя главная проблема, додик. Ты вообще не знаешь С. Иди почитай, что такое указатели, что такое сишные строки.
Это первый элемент, указатель это a, a[0] то же самое, что *(a+0), то есть a.
http://faqs.org.ru/progr/c_cpp/cfaqrus.htm
Надо в шапку добавить
Похоже, что в задаче строками называют не C-строки, a row двумерного массива. Тип элемента не обязан быть char.
>сортировку ... по ... последнего столбца массива
Чтобы эта хуйня имела смысол, необходимо чтобы каждая строчка имела одинаковую длину.
>Поступил в вуз на ит
>Надеется, что люди с зп 10к знают программирование и продолжают работать учителями
Благодаря тебе разобрался, спасибо, анончик, добра
for (int i = 0; i < arraySize; i++) {
for (int j = 0; j < arraySize; j++)
{
if (elements[j]==0)
{ elements[j]=(char)" ";
}
cout << " " << elements[j];
}
cout << endl << endl;
}
не работает, стринг не шарю
"abc" - указатель на строку. Ты должен добавить символ-пробел, а не строку, первый символ которой пробел, а символ обозначается одинарными кавычками.
сложно для чела который указатели понял на уровне int *hi=&a;
на двач так скопировалось, это не кейс
даже если правильно писать пробел заменяется на интовый номер таблицы аскри
Ааа, ИНТОВЫЙ массив. Никак. Он на то и интовый, что в нем числа, а не символы
Можешь попробовать сохранить код пробела и потом постоянно преобразовывать его в чар или перегрузить оператор индексации массива, чтобы там меняло код на символ.
я об этом:
XL = new QAxObject("Excel.Application", this);
А, всё, нагуглил наконец решение.
Мб я как даун перегрузил? Ну естественно да.
Нормальный хуй. Чаю тебе анон. Как же мне не по глазам было..
Если планируешь на жаве, то кют будет бесполезен. Это по сути фреймворк уровня дотнета, построенный на расширении крестов, с метапрограммированием, рефлексией и системой общения объектов, не свойственной стандартному ооп. Плюс новый реактивно-декларативный интерфейс.
я понимаю, но некст 2 семестра qt на плюсах, поэтому хочу не хочу, прийдётся освоить, книгу с моими знаниями стоит читать, или что то ещё подучить?
И что, норм книга? Смотрел отрывки в гугле, показалось, что те же самые экзамплы с сайта куть.
я не ебу, посмотрел шо кьют 16 гб весит в лучшем случае, скину с 100 мбит интернета в общаге, с понедельника начну читать, если смогу себе позволить сразу её, а пока шо узнал что такое классы и что их в идее надо по разным вкладкам ебашить, КАКАЯ ТО НЕАДЕКВАТНАЯ ХУЙНЯ.
то всё таки стоит читать, по ходу можно выучить всё недостающее, или стоит что то отдельно до чтения знать?
Пиздец ты деловой.
Возьми да попробуй почитать неделю-две. Ты что, блядь, 300 кк/наносек зарабатываешь, что так свое время ценишь?
Читай, никаких запредельных фич языка там в основе не требуется. Я его вообще по хелпу в основном изучал, он там хороший и с примерами, кроме может только последних тестовых дополнений.
Создай опрос на стравполле
прочитай чуть дальше свою первую книгу по языку.
Спасибо)
Прата проще, показывает как можно писать нехитрые программки на c++. Это скорее книга для полного снуля, чтоб вкатиться в для первого знакомства с программированием. Сам язык описывается довольно поверхностно. Простые внятные задачки + есть ответы на контрольные вопросы (но не решения задач).
Липпман сложнее. Упор делается именно на описание языка и STL, а не на программирование как таковое. Задачки часто абстрактного характера и завязаны на ранее написанные классы, почти всегда с невнятной логикой.
Перевод у обеих книжек ужасный + сделан с первых выпусков, до исправления оригинальных опечаток во всяком случае это касается тех экземпляров, что можно скочать бесплатно без смс.
доусон годнота
Лоу-левел системное программирование к языку мало отношения имеет.
Ебашишь либо какой-нить референс красноглазого апи, либо богоподобный МСДН. И все.
что тебе надо, то и делай?
Я выучил системное программирование на уберхардкорном уровне когда меня взяли работать системным программистом. Без этого - хуй бы что получилось имхо
А вот, что от тебя требовали на этой работе на приеме, какие навыки, какой стэк(LIFO)? Вообще, в основном под какую платформу системные программисты более востребованы, или требуется иметь познания и на шиндовс и на юникс?
Оверолл больше нужны красноглазые полудурки, мне же повезло найти нормальную работу с нормальной ОС. Требовали очень сильный С++, ну и если есть кернел-опыт то сразу 10 из 10 (мне повезло, писал драйвер на удаленке очень убогий).
Что посоветуешь из literature для написания дров и вообще понимания системы и кернел-еблей?
а если в массиве изначально были элементы, которые совпадают с кодом пробела? Тогда при выводе они будут заменяться на пробел
Мне кажется, если ты объяснишь, что, а не как, пытаешься сделать, советы будут гораздо лучше.
Хуйня, я как-то реализовал интереса ради индексацию массивов а-ля паскаль [x, y], благо кресты даже такие извращения позволяют.
Кро
Qt уж только, если С++. Или wxWidgets, но я за них не шарю.
А вообще...:
-Java Swing
-C# (WinFoms, WPF)
-Tk (python и прочее)
-С (gtk)
Это не ты в ситреде спрашивал аналогичный вопрос?
Вообще, если нужна поддержка ХР можешь на винапи насвинячить.
QT, там и примеров дохуя, выбираешь один из видов проектов и появляется окно готовое, все бля
>. Желательно с поддержкой от XP и до бесконечности
Qt, самая поздняя 5.6.3 (официально 5.6.1) , дальше не поддерживает ХР
конкретно как получить адресс метода класса?
Перегружаю все операторы в том числе и new с (), твои контрагрументы? А вообще мой вариант с перегрузкой оператора индексации охуенен.
Строка это массив символов. То есть массив char. Ссылка на строку то есть на массив символов указывает на первый элемент этого массива, то есть на первый символ этого массива.
Двачую. Я вообще ахуел с этой параши. Лучше буду на винапи формочки клепать чем обмазываться 100гб-фреймворком.
WPF с C#. Либо делаешь обёртки над внешним интерфейсом в C++/CLI и используешь их прямо в шарповом коде, либо оборачиваешь внешний интерфейс в extern "C" и используешь P/Invoke из шарпов.
Расскажи как ты это сделал (если x и y - инты)?
Перегружать оператор индексации можно только с одним аргументом, а оператор запятой только для классов.
P/Invoke позволяет вызвать обычные сишные методы из обычной динамической библиотеки. Скажем, у тебя есть метод double foo(char , int) в bar.dll, который ты хочешь вызвать из кода в шарпах (ну или любого языка на CLR). Для этого нужно просто написать https://pastebin.com/EwEJvFYD . Сам не пробовал, но говорят, что работает даже под Xamarin.
Шарпы позволяют довольно хорошо интеропиться с этим делом, есть плюшки типа автоматических конвертеров (string в char, если стоит в атрибуте CharSet.Ansi или wchar*, если CharSet.Unicode), точное указание того, как передавать структуры с помощью MarshalAs (можно даже указатели на функции/делегаты возвращать и передавать) и прочее. Там много подводных камней, правда, которые я так на ходу не вспомню (некоторые передаваемые объекты нужно удерживать с помощью GC.KeepAlive, передача COM объектов как-то странно устроена и другое).
RAD Studio C++ Builder
Остальных петухов не слушай, с вышеуказанным ничто не сравнится и близко как по удобству разработки, так и по скорости готового приложения. Билдер делает нативные GUI приложения винды и нативный же бинарный исполняемый код.
С СИРИОЗНОЙ проблемой,собсно сабж - есть файл.тхт,в нём строки формата первая строка-"2ch_uje_neTOT Вот так вот " вторая строки- "SPASIBO_ABU axaxa kek lol" собственно вопрос как считать только 1 слово из строки(т.е. 2ch_uje_neTOT,SPASIBO_ABU) и перейти ко второй строке,желательно используя string а не char ?getline считывает всю строку,а >> все слова из строки и не переносится в низ после первого
Читаешь строку, потом ее парсишь
ifstream infile("файл.txt");
string line;
while (getline(infile, line))
{
string word = line.substr(0,line.find_first_of(" "));
//
}
вернее там еще единичку отнять
типа как они на хлеб зарабатывают если не фрилансят а сидят вв конторах обычных
языки с++ с# mysql
Где ты такое вообще видел?
Серверную часть для видео/аудио вещаний. Конкретно сейчас работаю над SFU. Стек: C++17, немного легаси из Boost и C++14.
Dev окружение: ArchLinux, Emacs
Спасибо конечно большое, но мне уже обьяснили, что препод обозвал строкой не строку, а row двумерного массива
Сам когда-то давно ради фана сделал: визуализатор множества Мандельброта. В принципе ничего очень сложного в этом нет, зато красивая картинка и навыки создания интерфейсов
Продвинутая версия: многопоточность. Чуть более продвинутая: оптимизировать на SSE
Спасибо. Это то что надо. Чет мне кажется что с этим придется нормально так повозиться.
Спасибо большое. Займусь как нибудь.
Чтобы уменьшить и оптимизировать код, это очень часто юзают
Два чаю, анон. То что нужно было.
if (b) {
// код
}
return;
или
if (!b)
return;
// код
return;
Как думаете, написать свой СТЛ полностью с нуля сложно вообще?
Напиши двухсвязный список с использованием SSE2/AVX или чего-то подобного. Сравни скорость работы с традиционной реализацией и сообщи результаты.
Ну, если ты правда его напишешь - то получишь +много к скиллу. Но, с вероятностью в 99.9% ты даже простецкий вектор напишешь вкривь и вкось и забьешь.
https://stackoverflow.com/questions/38236771/do-i-need-to-use-closehandle-after-creating-a-new-process/38236860
tl;dr Он это зомби-процесс, закрывай.
Все зависит от твоего умения себя подать.
Вектор коварнее списков? Это же просто динамический манямасив, это проще чем списки даже.
template <typename T>
using Bits = std::bitset<sizeof(T) * 8>;
Как мне при помощи шаблонной магии сделать так, чтобы не нужно было каждый раз явно указывать тип класса, с котором я его вызываю?
Например писать не Bits<int>(12345), а Bits(12345)?
Напиши через ✡
Какое бабло лол. СТЛ признан сообществом и долгое время используется, никто не будет отказываться от него в пользу твоей библиотеки, потому-что его писали люди с опытом программирования больше твоего срока жизни. Если ты ничего революционного не напишешь, а просто копию кривую СТЛ то можешь себе оставить ее. Но твои проекты станут непереносимыми, а читать их другим людям без знания твоей библиотеки будет невозможно. Но как выше анон сказал - скилл подтянешь
Как аллоцировать память, чтобы вставка была O(1)? Через указатель на конце массива?
>Как аллоцировать память, чтобы вставка была O(1)?
помогает короткая, но искренняя молитва перед самим актом аллокации!
Нет, ну допустим вектор это динамический массив. Вот выделил ты вначале памяти на 100 элементов и твой пушбек представляет из себя вставку на позицию после последнего. Когда массив закончится, как ты сделаешь очередную вставку?
если бы так решались все проблемы :(
Аллокация в k раз больше памяти, перемещение содержимого вектора. В целом, очень даже О(1). Реаллокаций будет log(k)(N) штук, то есть мало.
CreateThread это WINAPI
_beginthread - это похоже на обертку некоей стандартной библиотеки для С от микрософта.
>>45141
Прибавка бабла тут только косвенная от получаемых скиллов.
>>45147
Абсолютно точно, можно сделать helper функцию, которая будет из аргумента за тебя выводить тип для битсета и конструировать его, аля auto zalupa = make_bit_set(1488).
Чистыми шаблонами скорее всего не выйдет, т.к. у битсета нет нужных конструкторов. Хотя могу быть не прав.
>>45224
мув конструктор для всех твоих кастомных типов должен быть noexcept, иначе ломается много гарантий для стандартной библиотеки.
Аллакация*
я когда в пайтоне пайинсталлером собираю свою сранину в экзему, то могу указать --onefile чтобы не было всякой требухи дополнительной.
как скомпилировать свои хеловорлды с++ так, чтобы они запускались на других компах, без вываливания ошибок про отсутствующую длл? че, поменять "дебаг-режим" сборки на "релиз"?
как вообще внутрь exe поместить нужные либы, ну или хотя бы от ошибок избавиться подобных, мол "crt хуйни нет на компе"?
собираю в g++ он потом mingw.dll требует. собираю в "высрал студио" -- требует crt_что-то.dll, при сборке сраного хеловорлда
Со студией специальный дебажный CRT поставляется. В релизной версии используется обычный.
Если перемещение бросает, то это какое-то ебанутое перемещение, по-моему.
https://helloacm.com/how-to-static-link-vc-runtime-in-visual-c/
В случае студии, в других вариантах гугли "Статическая линковка рантайма" или чето в таком духе
>>45365
В этом была изначальная идея библиотек - переиспользовать их в разном софте, идея на бумаге была неплохая, в реале увы, не сложилось даже у красноглазой питухос
>отлично, спасибо!
Если соберешься Qt статически собирать, сразу купи антипригарный коврик под жопу.
Ну хуй знает, мне этого за глаза хватает. Но я 3д не делаю, конечно.
Приложение в итоге с DLL весит около 20мегабайт.
В чем разница-то? Можно их считать всегда взаимозаменяемыми?
Формально для size_t нужен сишный хедер <stddef.h>, а для std::size_t <cstddef>, но у меня все эти типы без хедеров нормально подхватываются и я использую вариант без std, так как так удобнее.
А если я везде использовал просто size_t, но в каком-то месте оно попало под using namespace std, ничего криминального не произойдет? Они всегда эквивалентны в рамках одной платформы?
Как видишь, фактически это один и тот же хедер, поэтому они дефайнятся одинаково.
template<typename T>
using IDENTIFIER<T> = бла-бла-бла;
это синтаксически некорректно, в alias-declaration может быть только идентификатор, угловые скобки после него недопустимы. https://timsong-cpp.github.io/cppwp/n4659/dcl.dcl#nt:alias-declaration
Но почему-то на пике в >>45541 написано только, что "идентификатор не определён", а сам кривой шаблонный alias-declaration не подчёркнут.
Заюзай костыль с си, создай прешку в старом стиле только для объекта, попавшего в юн, или как выше сказали вызови сишный хедер. Ещё вариант спиздить функцию из сишного хедера и под другим названием переписать в хедере, превращая с помощью стракта или прешки в сайзт, но это костыль уровня обхода студенческого антиплагиата
>size_t и std::size_t
>
>В чем разница-то? Можно их считать всегда взаимозаменяемыми?
Стандарт говорит так: если какая-то хрень "из C" (точнее, из C++-ного хедера, представляющего C-хедер) доступна без `std::`, то эта хрень должна быть полностью эквивалентна хрени с `std::`.
Но стандарт не обязывает, чтобы хрень без `std::` вообще была.
Не нужно знать. Древние программисты таким образом добавляли в программы защиту от тупости своей/железа
Прешка — прекомпилятор, препроцессор. Такая штука которая перед компиляцией или объектизацией собирает весь текст всеех файлов в твоих прогах и начинает переводить его в язык более понятный компилятору, но в отличии от компилятора не будет пытаться исполнить хуйнюя если не знает что она значит и обрабатывает макросы, собирает функции из библиотек. Например можешь функцию в хедере создать и вызвать ее указателем из него, и при компиляции препроцессор заберёт эту функцию из хедера, не смотря на то что в программе она не объявлена. Если юзаешь стандартные библиотеки, с помощью прешки можешь переделать свой код в си99 формат, короче важая вещь, чем бы ты на сипипи не занимался, ознакомься
Кстати, вот касательно этого.
Есть же в 17 стандарте свёртка, которая умеет выполнять нужную команду над переданными через запятую аргументами, а не над initializer_list.
И, чисто в теории, можно же собрать строку с именами аргументов, которую потом пихнуть в макрос, вызывающий эту свертку. Насколько это пиздец?
Не то чтобы я прям могу придумать, как это применять, но, например, в pl/sql такое используется часто - собирается динамически строка с запросом/анонимным блоком и отдаётся на выполнение серверу. Интересно, реализуемо ли это в плюсах и вообще может ли быть смысл?
Хотя можно не ебать мозг и работать с initializer_list, конечно.
>Есть же в 17 стандарте свёртка, которая умеет выполнять нужную команду над переданными через запятую аргументами
Троеточие вроде еще в C++11 добавили.
>можно же собрать строку с именами аргументов, которую потом пихнуть в макрос, вызывающий эту свертку.
А смысл? Это же во время компиляции все выполняется, со статическими строками. То есть без разницы со строками ты работаешь, или прямо с аргументами. Строки только добавляют лишний гемморой.
Не очень понял что ты имеешь в виду, но судя по всему это возможно реализовать ещё чуть ли не в 89-ом стандарте си через стракты, значит и стд плюса для этого будет достаточно. Эскперементируй, что не получится — приноси код.
Я просто встретил троеточие со сверткой непосредственно у Галовица в C++17 STL, вот и проверил, что только в этом стандарте появилось.
>Во время компиляции ... со статическими строками
А, то есть такой во время работы программы это уже не так будет работать?
>>46142
Хотел метапрограммирование через жопу - формировать код во время выполнения программы и исполнять его в той же проге, но без шаблонной магии. Не ради профита, а понять, можно ли так.
Но за наводку спасибо, покурю сегодня.
>Прешка — прекомпилятор, препроцессор
За много лет ни разу не слышал такого сокращения
Мимопроходил
А борланд это турбо, я ваще нем си изучал...
>формировать код во время выполнения программы
А вот хуй, это тебе не пхп.
Единственный способ запустить код на цпп, это его скомпилировать. Если ты наркоман, можешь сгенеренный код передать в какой-нибудь компилятор, заранее подключенный в виде библиотеки (хз бывает ли такое вообще). Потом полученную dll в той же программе динамически подключить и запускать.
Алсо, есть интерпретаторы (!) для С, которые позволяют говнокодить на нем в лучших традиция джаваскрипта. Насчет интерпретаторов Спп: не уверен, что нашелся поехавший, реализовавший эту идею. Но если они существуют, я хочу это чудо увидеть.
Можно наследоваться от QFileDialog, и написать обработчик сигнала filterSelected, который вызывается каждый раз, когда юзер выбирает элемент комбобокса. Запоминать тип, выбранный в комбобоксе, затем при закрытии диалога вручную дописывать его к имени файла.
Вероятно, существуют более красивые решения.
ты всегда можешь затянуть интерпретатор LUA или Питона в свой код
Манька, если нет денег, делай сам
Только учти, что во всех без исключениях браузерах он должен выглядеть абсолютно одинаково.
Вроде да. Недостаток, верно.
псевдодвумерный динамический массив с элементами целочисленного типа.
Сначала память отводится под адреса строк, потом в цикле под строки.
Размеры массива вводятся с консоли.
Массив заполняется случайным образом.
После заполнения массива находится та характеристика (max, min), по которой нужно отсортировать строки массива.
Выводится массив в виде матрицы с выводом справа найденной характеристики.
Массив упорядочивается и снова выводится таким же образом.
Переставляются два столбца согласно варианту задания и снова выводится массив.
Строки массива упорядочить по убыванию минимума в строке.
Поменять местами 2 столбца, чтобы минимальный элемент для всей матрицы оказался в нижнем левом углу.
Сделаю за 1000 рублей
vector<int> g[MAXN]; //массив
bool used[MAXN];
vector<int> ans; //ответ
void dfs (int v) {
used[v] = true;
for (size_t i=0; i<g[v].size(); ++i) {
int to = g[v];
if (!used[to])
dfs (to);
}
ans.push_back (v);
}
void puzyryok_sort() {
for (int i=0; i<n; ++i)
used = false;
ans.clear();
for (int i=0; i<n; ++i)
if (!used)
dfs (i);
reverse (ans.begin(), ans.end());
}
Не благодари
Можете вкратце но аргументированно объяснить почему программист на c# или backend зарабатывает в среднем больше, чем на c++?
Спасибо.
Зарплата программиста зависит от места работы, а не от технологии.
В среднем вебмакакоконторы богаче, чем НИИ имени подзалупина, которая за 40к в месяц требует 10 лет крестов. Однако это все средняя температура по больнице, которая вообще ничего не показывает.
Чтобы всё аутентично было
вопрос не в том, а в том что сможешь ли ты открыть, к примеру, александреску "современное проектирование на с++" и понять хотя бы часть написанного, а потом еще понять что за последние 20 лет еще на порядок больше в языке нахуевертили
вопрос не в зарплате, а в уровне твоего сумашествия
>о
и вообще это хуевое сравнение, тк ситуация с сишарпом в россии (и на постсовке) еще хуже чем с крестами
Потому что спрос на программистов C# выше, чем на программистов C++. Backend - это вообще не технология, а часть продукта, которая может написана теоретически на любом языке, а практически - С++ для этого не подходит. Короче говоря, потому что С# более отвечает потребностям сегодняшнего дня.
Возможно я ошибаюсь, но по моему если ты в самом начале кода, после включения библиотеки напишешь - using namespace std; то std в дальнейшем не надо указывать, но я только вкатываюсь, может херню несу
> ситуация с сишарпом в россии
Да кого ебет рашка, я например наугад открыл вакансии в Торонто.
Постсовок блядь.
>Зарплата программиста зависит от места работы, а не от технологии.
Пригорает от попугаев, повторяющих фразы, не понимая смысла. А технология и место работы не взаимозависимы?
Мудак блядь.
И смысл тогда? Для души?
Ну тип например 5 столбцов, берёшь по строкам проходишься, сравниваешь и меняешь.
int^^ array;// заполненный массив
for(size_t i = 0; i < n; ++i)
{
for(size_t j = i; j< n; ++j)
{
if(array[n] > array[j][n])
swap(array, array[j])
}
}
Да, нормас.
>if(array[n] > array[j][n])
>swap(array, array[j])
if(array[n - 1] < array[n - 1][j])
swap(array, array[j])
Пидорство.
В новое охотнее вкладываются, а в хайповую тему особенно. Вот и все.
Это касается любого бизнеса.
В айти просто новое чаще появляется.
нет, баба-дауниха, не зависимы. Кто-то ебет говно на С++, писанное дедами, кто-то работает в Нвидии на х5 зарплату от этого. Технологии схожи. А иногда, одинаковы.
потому что out of date
Просто С++ преподают в вузах вот и выкатываются от туда либо вебмакаки, которые хуже червя-пидора, либо говнокодеры на С++, которые пишут всё в одном файле на стандарте прошлого века, не чистят память и вообще не моются.
Обычный С++ программист зарабатывает больше С# кодера, но и ебется с самим кодом больше.
> которые пишут всё в одном файле на стандарте прошлого века, не чистят память и вообще
Больше легаси, больше багов, больше работы вкатывальщикам с двощей. Охуенно жи.
У них хайлоад, нужна максимальная производительность и отказоусточивость, поэтому все на нативе написано.
штук 100 в милионниках, в ДСах процентов на 30-40 побольше, наверн
сап анонам. Учусть в университете. Тут хуй знает как объясняют. Как лучше самому учить. Видео или литература, или что-то еще?
Видео, литература, интернет, желание и труд. Только большую часть местных советов не забывай скипать
Самофикс в первом случае g(a, b).
Фундаментальная разница в том, что указатели (которые *) могут быть нулевыми и к ним можно применять адресную арифметику, а ссылки (которые &) нулевыми быть не могут, и адресную арифметику к ним применять нельзя.
Хорошим тоном считается использовать только константные ссылки, а если тебе нужно менять значения, то использовать указатели, так программисту понятно, что если он пишет g(&a, &b), то a и b могут поменяться. В случае же неконстантных ссылок у тебя функция g(a,b) может ВНЕЗАПНО поменять a или b, что не очень красиво.
Спасибо за разъяснение.
Ну типа пишешь перед каждой переменной const, дальше само пойдет, особенно когда захочешь написать цикл.
>>47836
че? именно по языку с++ основные книги переведены - старуструп, саттер, джосаттис, александреску, мейерс...
на английском тебе придется читать когда будешь специализироваться в чем-то, да и то не факт
к примеру, если будешь крипту делать, то придется почитывать уже статейки на английском..
а изучать язык можно спокойно по книжкам что переведены
изучаешь концепции функционального стиля, смотришь как это можно выразить средствами языка
Английский, конечно, нужен, но это не первостепенная задача для тебя.
>>47821
Там же императивный стиль. Или ты угараешь?
>>47809
А в чем проблема писать в функциональном стиле, зная саму ФП парадигму? Все возможности (почти) для этого тут есть, особенно, в С++17.
>>47794
Во втором случае:
1) Нельзя в адресную арифметику и вообще как-то менять ссылку.
2) Не нужно разыменовывать.
3) Не может быть нулевой.
>>47673
Да начни просто делать и все.
>>47221
>как получить доступ к микрофону/разъёму-микрофон
Windows API. Или в юниксах надо на /dev/залупа обращаться.
Понятно примерно с чем он борется и как его использовать.
Не понятно, как он вообще вписывается в механизм виртуальных функций?
Ведь виртуальная функция во всех производных классах должна иметь такое же имя, как в базовом. Но в производном классе деструктор всегда будет иметь другое имя.
Алсо, если посмотреть типичный пример (пикрил), то производный класс никак явно не переопределяет виртуальный деструктор базового. Получается зря старались, зря объявляли его виртуальным? Но вроде нет, не зря, все работает ведь.
Популярен где? На линуксе кроме кутэ и нет ничего, он вот и популярен у красноглазиков, а сибилдер под винду, там он не один, вдобавок быдло скатилось на шышарп который проще.
Надеюсь теперь понятно, что долбоеб это ты - хвалишь более убогое.
>Ведь виртуальная функция во всех производных классах должна иметь такое же имя, как в базовом
Это особый случай, в конструкторах деструкторах работает стек из функций от базы до конечного потомка. >>48314
>Алсо, если посмотреть типичный пример (пикрил), то производный класс никак явно не переопределяет виртуальный деструктор базового.
Просто частный случай.
>линуксе кроме кутэ и нет ничего
как это? прямо так и нет? а я в чем тогда пишу? в том что НЕ существует?
>в производном классе деструктор всегда будет иметь другое имя
и че? смещение в vtable будет одно и тоже
>как получить доступ к микрофону/разъёму-микрофон на звуковой карте?
Эн лет назад я обращался через WASAPI, уже и не вспомню как. Наверняка есть портативные библиотеки под всё это дело.
Ты бредишь, это всё оптическая иллюзия. На самом деле ты используешь православный ImGui.
Как правильно использовать список инициализации с этим перемещающим конструктором:
Vector(Vector &&tmp) : fuck(tmp.lng), oppai(tmp.angle)
OR
Vector(Vector &&tmp) : fuck(move(tmp.lng)), oppai(move(tmp.angle))
?
Надо include-ить header-файл. Добавить библиотеку через GUI студии.
Чтобы использовать классы и функции, тебе все равно нужны их объявления, даже если реализация целиком в .dll. Поэтому, во-первых, подключи хедер.h. Во-сторых, вместе с собранной библиотекой идет .lib файл с таким же названием. Он нужен, чтобы временно разрезолвить нереализованные объявления на этапе статической линковки (попробуй сбилдить без него). Чтобы его подключить, пропиши его в target link libraries в настройках проекта (загугли) или используй #pragma comment(lib, "LibVector.lib")
Нет, файла с .lib, даже поиском не нашло, библиотека собралась успешно
Блядь, как много заебов с динамическими библиотеками.
Лучше почитай в каких случаях твой код на С++ будет быстрее чем из коробки на том же С#. С++ сосет без оптимизации, если что.
>Надеюсь теперь понятно, что долбоеб это ты - хвалишь более убогое.
Я где-нибудь это хвалил? Зачем ты сразу в обзываки скатываешься, как бука злая.
Имею ввиду, что большинство вакансий (конечно, может я в глаза долблюсь) требуют знания Qt, а не билдера.
Что?
"12345" - в памяти создается массив из 6 байтов (по одному на цифру + нуль терминатор в конце) и возвращается указатель на этот массив.
Вопрос: Как сделать то же самое, только с цифровыми байтами вместо букв, и чтобы никаких объявлений переменных (как видно в примере выше нет никаких переменных).
Используешь не-компайл-тайм фичи? Плюсы будут медленнее (скрытые аллокции и всякая шняга). Используешь компайл-тайм фичи? Компиляция плюсов будет медленнее раз в пять-шесть-сто. Быстрее? Говорят, что в плюсах не нужен указатель на void, потому что есть шаблоны, поэтому компилятор обладает более полной информацией о типах и способен лучше оптимизировать, но матёрые си программисты-оптимизаторы, которым нужен ПЕРФОРМАНС, и так не используют указатель на void.
Таким образом, если тебе нужен ХАРДКОРНЫЙ ПЕРФОРМАНС, то ты будешь использовать плюсы только как си с классами-структурами и неймспейсами. Но процент кода, который требует такого, обычно довольно маленький, поэтому не еби себе мозг и пиши нормально. Большая часть скорости обычно зависит от архитектуры программы, нежели от конкретного языка. Если ты не используешь фичи плюсов не по назначению (например, проходишь циклом по паре тысяч объектов, вызывая у каждого виртуальные методы), то скорость программ будет одинаковая.
Добавь printf в конструкторы и всё увидишь.
Во втором вопросе move нужен. Объяснения: https://en.cppreference.com/w/cpp/utility/move
Сделай консольный todo
и да, и нет
если ты захочешь делать, как ниже, то нужен:
struct Child : Base {};
BasePtr b = new Child{};
delete b;
быстрофикс: в смысле его не язык требует, а это считается хорошим тоном, чтобы потом не наебаться
Хороший тон это да конечно... Вот стаким кодом https://ideone.com/iDRQAp у меня получилочь воспроизвести утечку с нетривиальным деструктором, но с char[10000] нет. Если без традиций, ритуалов и хорошего тона - нужен или нет?
Например, с гитом понятно. Запускаешь программу с аргументами и тд.
А как быть которые обрабатывают ввод? Там, грубо говоря, внутри крутится бесконечный цикл и обрабатывает ввод?
Не бесконечный, а пока в stdin не встретится eof
В кернигане и ричи параграф 1.9 содержит пример
>Чому нет? Можно даже явно вызвать.
Это не значит, что у него есть имя.
Про конструкторы явно сказано, что у них нет имени. Про деструкторы не сказано. Вот я и спрашиваю.
Это неформальное описание.
>Почему… Не прикрутят какой-нибудь универсальный менеджер пакетов.
Потому что таких не существует.
Да даже если расслабить требования да "хоть какой-нибудь стандартный пакет менеджер", всё равно не смогут сделать. Потому что коммитет не способен его стандартизировать, сделать и потом мейнтейнить. А вот язык от конкретной канторы себе такое позволить может.
>Это же был бы лучший язык эвер.
Только для твоих задач. Далеко не всем нужны умные указатели и "универсальный" менеджер пакетов.
Возьми Swift, там и умные указатели и менеджер пакетов, или какой-нибудь язык с GC вроде D или Go.
Ну что делают.... как всегда, с ноля пилят супер-пупер какую-нибудь систему учета чего-нибудь на предприятии.
>мемберы в произвольном классе с автоматическим типом хранения?
У подобъектов такой же storage duration, как у содержащего их объекта. Будет объект с automatic storage duration ("на стеке") — будут его member subobjects с automatic storage duration. Будет создан динамически (dynamic sotrage duration) — такой же storage duration будет у member subobject-ов.
Если ты имел ввиду что создаёшь объекты всегда "на стеке", то ему не особо нужен виртуальный деструктор.
А если ты имел в виду что-то другое, то у тебя в голове каша.
О, какие флаги нужно хуйнуть компилятору, чтобы он принял не-ASCII в идентификаторах?
>Что значит "функция не генерирует исключения"
Это просто еще одна проверка кода компилятором. Ты объявляешь noexcept, и если компилятор видит, что где-то бросается исключение, то он выводит ошибку. Так же как const не гарантирует, что значение нельзя изменить, ведь это всегда можно сделать через void указатель. Просто лишняя возможность проверить, не стреляешь ли ты себе в ногу.
>будет неопределённое поведение
Там вполне определенное поведение. Вызовется только деструктор родителя (а деструкторы наследников - нет).
>Не прикрутят какой-нибудь универсальный менеджер пакетов.
как это нету?
в линукс системах dpkg, rpm и другие, в bsd-семействе тоже есть системные менеджеры пакетов..
Нужно еще проверить на предмет исключений все функции, которые ты вызывал из своей функции (библиотечные можно проверить по справочнику). Если ни одна из них не кидает исключений, значит можешь (но не обязан) объявить свою noexcept.
В некоторых случаях компилятор может применить дополнительные оптимизации, если знает, что функция не кидает исключений.
Стоит или нет?
Смотря как твоя функция будет использоваться. Все подряд объявлять noexcept конечно же излишне.
Стоит, если, например, ты будешь передавать свою функцию как предикат в алгоритмы STL; или если твоя функция может вызываться неявно (твоя функция — конструктор перемещения, например). STL не всегда отдельно обрабатывает noexcept функции.
Там, в принципе, не такая и сложная задача, так что сделаю рейт поменьше тебе. $3800 USD - и по рукам.
Это у тебя в голове каша. Storage duration никак не относится к памяти - стеку или куче. Automatic storage duration - это не на стеке, а то что объект создается в начале скопа и удаляется в конце, без участия юзера. Dynamic sotrage duration - объек создается и удаляется через вызов функций аллокации памяти, т.е. с участием пользователя.
"на стеке" взято в кавычки, мамкин разоблачитель.
>Automatic storage duration - это не на стеке, а то что объект создается в начале скопа и удаляется в конце
scope это свойство имён https://timsong-cpp.github.io/cppwp/n4659/basic.scope#def:scope
> In general, each particular name is valid only within some possibly discontiguous portion of program text called its scope.
Объект можно создать с помощью placement new внутри массива unsigned char с automatic storage duration, и у этого объекта будет automatic storage duration, а имени не будет и ни о каком скопе смысла говорить вообще нет.
>создается в начале скопа и удаляется в конце
{
Class ass; // начало скопа для ass
{
Class ass; // конец скопа внешнего ass. внешний ass удаляется?
}
}
Нахуя это нужно? Нигде не пригодится.
Виртуальный деструктор нужен для вызова деструктора базового класса при удалении объекта неследованого класса. Что там в наследуемом классе находится неважно (он может быть вообще пустым). Если у тебя в классе имееться кастомный (не по умолчанию) деструктор то ты или объявляешь деструктор виртуальным, или от класса нельзя наследоваться.
>Тащи пруф.
Посмотри в стандарте как деструкторы работают, там вполне определенное поведение. В смысле порядок вызова деструкторов в данном случае однозначный. Что конкретно произойдет из-за того, что у потомка деструктор не сработает в стандарте не описано, конечно же.
>и у этого объекта будет automatic storage duration
Не будет. Деструктор-то у него не сработает при удалении стек фрейма.
>Виртуальный деструктор нужен для вызова деструктора базового класса при удалении объекта неследованого класса.
:facepalm:
> Если у тебя в классе имееться кастомный (не по умолчанию) деструктор то ты или объявляешь деструктор виртуальным, или от класса нельзя наследоваться.
Наследуюсь от контейнеров из stl, у которых нет виртуальных деструкторов. Брат жив.
>>49583
>Посмотри в стандарте как деструкторы работают, там вполне определенное поведение.
Посмотри в стандарте описание поведения delete.
Там явно сказано, что если ты подсовываешь указатель на T который не указывает на объект типа T, а указывает на объект типа U, и T не является базовым классом U с виртуальным деструктором, то поведение не определено.
>Не будет. Деструктор-то у него не сработает при удалении стек фрейма.
Будет. Срабатывание или несрабатывание деструктора при выходе из блока это не тот способ, которым определяется automatic storage duration.
Найс лаба. Но согласен полную херню написал про деструктор, что-то воскресенье на меня негативно влияет.
По какому справочнику смотреть, бросают ли исключения библиотечные функции? Открыл http://www.cplusplus.com/reference/cmath/cos/, там не написано, бросает ли cos()исключения.
https://timsong-cpp.github.io/cppwp/n4659/library.c#2
> The descriptions of many library functions rely on the C standard library for the semantics of those functions.
Смотри в стандарте C, бросает ли cos исключения
У меня сразу работает, lol.
Смотря какая консоль, попробуй UTF-8 отправить.
Зависит от конструктора перемещения. Стандартные просто копируют значения.
Наконец-то до спермоблядков дошло что будущее за UTF-8.
Из 30 лет со дня изобретения UTF-8 не прошло.
Конструктор перемещения нужен, если у объекта есть внешние ресурсы (причем с уникальным владением). Типа хуйни, выделенной в куче, или там открытого сокета.
А если все поля класса это простые типы (и массивы из них), то копирование и перемещение делают одно и то же.
выбор двухбайтового представления юникода инженерами майкрософт был абсолютно верен, для их ситуации
нет, из соображений производительности в первую очередь
ведь юникод они в ядро запиливали, надо было чтобы быстро работало
потом удобней с двухбайтовой кодировкой работать самим программистам..
потом им не надо было ни жить ни быть чтобы была обратная совместимость с ascii кодировкjq как в utf8 сделано, так как в ядре уже была поддержка и широких кодировок для азиатских языков и других трюков, те в ядре винды не было такой жесткой привязки к asci как было в некоторых операционках юниксового семейства..
вообще, выбор представления юникода - это не холивар, это обычный инженерный выбор, одни представления удобней для одного, другие - для другого
на rsdn были длинные обсуждения этого, и почти никто не обсирал выбора инженеров майкрософт
>на rsdn были длинные обсуждения этого, и почти никто не обсирал выбора инженеров майкрософт
Ещё бы на сайте чьё название каргокультирует MSDN обсирали Microsoft
Ты... ты пользовался наследием без глубокого изучения теории типов в System F<: ?! А ну живо иди извиняться лично перед Мартином-Лёфом!
Чего только борщехлёбы не выдумают, лишь бы байты не ебайть.
Конечно можно, даже необходимо. Обязательно перед эти выучи работу машины Тьюринга, автомата Маркова, машины Поста. Иначе будешь говнокодером
Ты же петухан, который ни одной программы не написал.
Иначе было бы очевидно, что UTF-8 это говно ёбаное, вообще невозможно с ним работать, потому что это не простые строки, а пожатые. Ты буквально не можешь взять какой-то символ из строки так: ch = str[5] - взять пятый символ из строки, потому что там пожато и символы все разной длины, так что нужно ПАРСИТЬ СТРОКУ НАХУЙ. Это всё равно что держать все структуры и прочие буферы в памяти пожатыми в ZIP, и при каждом обращении распаковывать, таская за собой библиотеку зипа. Ты чё, ебанутый, блять? Это не только неудобно, но и производительность по пизде. Это каким же надо быть отбитым говноделом, иди нахуй на питоне говни, пидрила тупорылая.
нужно скорее понимать, что лямбды в с++ скорее синтаксический сахар
нужно понимать, как раньше использовались функциональные объекты, их фишки, как использовались такие оригинальные средства как bind и mem_fun
посредством лямб делать те же задачи стало удобней
но это не лямбды функциональных языков
кстати, функциональные объекты в крестах так и не стали популярными, большинство кода работающего с stl так и работало в структурном стиле с унылым циклом по коллекциям, это конечно печаельно
по видимому из-за того что поддержка вложенных классов в компиляторах медленно появлялась, да и потому что вложенные классы вообще считались экзотической особенностью и не стали по настоящему рабочим инструментом
В виндоус для юникода используется 2 байта. Это не совсем верно, потому что бывает символы которые в 2 байта не влезут, но там совсем экзотика - всякие матановые символы.
Потому что несмотря циклы проще, лучше читаются, быстрее компилируются, дают более понятные сообщения об ошибках.
Нет никаких причин извращаться со всякими transform, back_inserter и лямбдами, если можно написать простой цикл.
>Второй - как получить доступ к микрофону/разъёму-микрофон на звуковой карте?
https://www.openal.org/documentation/OpenAL_Programmers_Guide.pdf
>Нет никаких причин
причина в увеличении абстракции
разделяется код обхода контейнера и код выполняющий что-то над элементами
это если простыми словами, тк ты похоже low
>увеличении абстракции
Но лямбда же удобнее всего, когда она на месте создается для передачи в алгоритм.
ИМХО это не увеличение абстракции, а магические числа с поведением функции.
я лоу
>причина в увеличении абстракции
Не всегда абстракция хорошо. Особенно там, где она не нужна, иначе у тебя будут абстрактные фабрики свободных монадических стеков аппликативов-визитёров, настраиваемых через XML. Пару тредов назад давали ссылку, где хорошо расписал парень всё. http://aras-p.info/blog/2018/12/28/Modern-C-Lamentations/
>Иначе было бы очевидно, что UTF-8 это говно ёбаное
А вот инженерам из Microsoft Console Team очевидно, что за UTF-8 будущее даже во внутреннем представлении. Поэтому они переходят с UCS-2 на UTF-8 внутри.
Правда, приходится использовать под 1 UTF-8 code unit wchar_t, а не обычный char. Слишком много везде wchar_t.
>Ты буквально не можешь взять какой-то символ из строки так: ch = str[5]
Это нигде в реальной жизни не нужно. Только в laba2, где задание звучит как "перевернуть строку".
ты тоже чорт
Выводиться оно может хоть в UTF-8, хоть в анус мамаши, разницы нет, проблема во внутреннем представлении в программе, с которым ты работаешь.
Ну а что они там сейчас думают, мне плевать, как и данному треду, потому что тут C++, а не сисярпы и прочие UWP-скрипты говно-мобилко-веб-платформы, которую они лепят, стараясь убить нормальный десктоп и его приложения, т.е. С++ убить. Современный тренд - уходить с нормальных приложений на тормозные скрипты виртуальных машин, лепить обертки оберток оберток. Даже если в их строках, чтобы тупо напечатать одну букву будет вызов десятка вложенных функций, каждая с циклами по всей строке, им похуй, только рады и скажут "заебись, потому что это говно написали они и без него никто другой ничего не сможет, а значит они - гегемоны абсолютной власти. ПРОФИТ.
С++ это хайлоад и системное программирование в основном, десктоп на С++ уже считай мертв. Но я понимаю твой подрыв..
>десктоп на С++ уже считай мертв
Ой вэй, слухи сильно преувеличены.
Просто взял несколько приложений, что у меня на рабочем столе: LightAlloy, Audacity, Sandboxie, MS Office, куча музыкального софта, торенты, браузер. Все писано на плюсах, либо с их участием.
Как setbuf узнает размер буфера который ты ему сунул?
Каво
Все ссылки находятся по адресу улица Пушкина, дом Колотушкина
Ссылка не объект, а потому не имеет адреса.
но ведь они хранятся в оперативке под определенным адресом, проблема в том, что обычным способом, адрес указывается на объект в любом случае
По твоему адрес оперативки хранит адрес на другой адрес оперативки?
У тебя 16к монитор что-ли? Все видно, не пизди.
cout я добавил чтобы посомтреть что там.
Ты видимо тоже не понимаешь что она делает.
Похоже на высер какого-то декомпилятора. Мне непонятно, например, почему в строчке с return есть +1. Примерно понятно, откуда взялся >>5 - декомпиляторы любят подобный мусор.
Но в целом из названия и кода понятно - метод возвращает соответствующую имени класса virtual table.
По адресу self лежит табличка вида
указатель_на_virtual_table указатель_на_имя_класса
указатель_на_virtual_table указатель_на_имя_класса
указатель_на_virtual_table указатель_на_имя_класса
указатель_на_virtual_table указатель_на_имя_класса
Размер строки таблицы - 0x8. По смещению 0x4 лежит указатель на имя класса, который загружается в test и дальше сравнивается по имени с name. По смещению 0x0 лежит указатель на йобу, в йобе по смещению в 1 байт лежит указатель на virtual table.
неа, просто 3д тыкнул, одна версия ~10гб весит, если несколько внутри тыкнуть точек
Половина фич плюсов - попытка исправить недочёты сей. Следующая четверть - попытка исправить недочёты плюсов. Если тебе меньше 19 лет, то я бы начал с си. Иначе - добро пожаловать в волшебный мир "а нахрена это сделано вот так".
нет, но тебе все равно придется
вообще не стоит изучать щас с++ если ты новичек
выбери что-то другое
это не троллинг, это лучший совет который можешь получить
Хз, мне наоборот всё логичным кажется, то и дело восхищаюсь инженерным гением разработчиков компилятора.
Двачирую, разобрался. Эта функция делает обход таблиц в памяти и ищет подходящую по имени.
Смотря что ты собрался делать потом на плюсах. Если системное программирование/десктоп, то лучше начать с СИ. Если решил работать на высоком уровне абстракции, то СИ учить не нужно. Накатываешь какой-нибудь QT и рубишься.
Так я понял, что С++ это С со всякими новыми парадигмами и фичами из коробки. Я же могу просто писать как на ванильной сишке и не использовать привнесенные костыли которые мне не нравятся?
>>50839
Почему так? Знаю только пиздон, но не могу придумать, что на нем писать кроме скриптиков, а на работки он идет обычно как бонус, а не основное требование.
Веб-языки меня не прельщают, т.к. ненавижу сети вообще и даже на фронтенде я так понимаю мне придется с ними часто париться. Не статические сайтики на бесплатных настроенных хостингах же всю жизнь делать.
>>50861
Спасибо.
> что С++ это С со всякими новыми парадигмами и фичами из коробки
Это абсолютно другой язык, но практически совместимый с си. Ты вполне можешь писать на си, используя только некие фичи крестов, но зачем?
Кроме сохранения лямбда функции в std::functional ничего в голову не приходит (и такое решение мне не очень нравится по эстетическим соображениям - там наверняка намного больше ресурсов уходит, чем требуется для сохранения двух указателей на класс и метод) - с шаблонами ещё совсем не разобрался, и как это написать мне не понятно - каким-то образом нужно сохранить тип класса, чтобы вызов его метода по указателю скомпилировался и сработал. Может быть там есть какая-то хитрая фича с использование std::invoke или ещё чего-нибудь?
>(и такое решение мне не очень нравится по эстетическим соображениям - там наверняка намного больше ресурсов уходит, чем требуется для сохранения двух указателей на класс и метод
Ебанутый, лучше просто сдохни
>чем требуется для сохранения двух указателей на класс и метод
Указатели на метод обычно очень нетривиальные (это не обычный указатель), и не факт, что они будут расходовать меньше ресурсов, чем лямбда.
Ну это только если с виртуальным наследованием. Там компилятору и правда приходится дрочить вприсядку, чтобы получить правильное смещение.
Да, ибо абсолютно ВЕСЬ функционал крестиков реализовываем на сях.
они не спонсируют визу вроде бы, сам хотел в команду студии податься в свое время.
А вкатиться в метапрограммирование для самого себя очень полезно.
>и не факт, что они будут расходовать меньше ресурсов
То есть если переписать все эти методы как статические и явно передавать им указатель на экземпляр (в таком случае тип всех методов (точнее, уже почти просто функций) совпадает), то это будет лучше в плане ресурсов?
У меня довольно много претензий к языку, если честно. Первое, что приходит на ум:
>почему std::initializer_list в сочетании с list initialization рушит все оверлоуды?
>такие правила выбора, тебе просто стоит запомнить
>почему при передаче в тред ссылки я должен использовать std::ref?
>такая семантика у ссылок, тебе просто стоит запомнить
>кто в своём уме придумал Most Vexing Parse? Просто потому что кому-то взбрела в голову идея объявления функции внутри функции, не значит, что это надо было делать
>ну, эта грамматика нам от сей досталась, тебе просто стоит запомнить
>std::unordered_map всегда использует open_hashing
>такой вот он STL, тебе просто стоит запомнить
>почему нет аналога defer? Я не хочу плодить классы, если мне что-то нужно всего один раз
>пользуйся RAII и молчи
>почему мой проект собирается два часа?
>потому что надо использовать меньше темплейтов, а темплейты генерят столько кода, потому что мы унаследовали модель компиляции сей
Если напрячься, можно было бы ещё много чего вспомнить. Да, все эти проблемы решаемы. Да, для большинства это не проблемы. Но если бы их не было, мир бы стал чуточку лучше и добрее. И ведь другого "Си, но лучше" на горизонте нет. Jai мог бы стать, но по текущему состоянию он становится таким же кластерфаком, что и плюсы.
>Но если бы их не было, мир бы стал чуточку лучше и добрее
Я бы даже согласился на то, чтобы все это осталось.
Но что мешает как-то визуализировать при необходимости, то что фактически происходит "между строк". Те же временные объекты, например.
Изучать язык стало-бы в разы проще, да и опытные программисты делали бы меньше ошибок.
И ладно бы всем похуй было бы на вкатывальщиков. Так ведь нет, книжки пишут, курсы всякие пилят, а такой очевидной вещи за 35 лет никто не сделал.
Что за херня? Почему в пайтоне один результат, а в сиплюсах другой?
Алсо, пайтоновский вариант ближе к правильному ответу.
Похоже, что кресты 1 / 3 ебошут целочисленным делением, т. е. 1 / 3 == 0.
Попробуй записать так: 1.0 / 3
А вообще православнее все цифры записать с точкой.
Цифра без точки считается int, а с точкой - double. Поэтому в твоем выражении будут неявные преобразования int в double.
Если все записать с точками, то преобразований не потребуется.
>преобразований не потребуется
Они всё равно будут только при компиляции и будут только там где это требуется
Да, точно, константы же
бамп вопросу
Какая unix система чаще всего используется у разработчиков? Как пример для понимания Bubuntu, CentOS/Fedora.
И что-нибудь кроме g++?
Вопрос возник из-за того, что в одной вакансии требуется знание линуха плюс netbeans и я отчаянно пытаюсь узнать, а что вообще используют программисты. Речь как ни странно идёт именно о С++ программировании. Мне нужно это всё опробовать, дабы не сесть в лужу.
Я же эту бабанту или федору ставить буду, потом на это нетбос и г++, надо потренироваться иначе буду красным сидеть и гагатать от происходящего.
Вообще для новичка гит и прочее, то есть портфолио очень важно, да? Программы как оно самое есть если что.
И ещё вопрос. Как оно вообще происходит то, там, на работе программиста на линух? К самому линух отношусь нейтрально из-за большого веса VS 2017.
Ubuntu-подобные системы де-факто стандарт для обычного десктопа. Если бы мне пришлось сидеть с красноглазым говном вместо ОС, я бы, наверное, накатил Kubuntu.
>>51337
С каких пор ВЕС ВИЖУАЛ СТУДИИ это важно? У тебя ССД на 60 гигов? Ну серьезно. Флаеры пораздавай день, купить на 256гб.
И да, нетбинс это просто анальный террор, если пользоваться не-студией, то хотя-бы культикреатор, а не этот жавадерьмо.
У меня есть ССД на 256, но время установки огорчает, сильно.
Касаемо нетбоса, я понимаю. И что такое кутьикреатор? А эклипс?
Касаемо бабанты, это хорошо, меньше проблем, наверное.
И ещё вопрос, тут стращают, шо шаблоны это плохо. Так что же это получается, мне придётся писать некоторое количество реализаций классов на нужные мне типы данных и терпеть ради скорости?
И второе. Как раньше народ игры на С писал. Например, дум. Что конкретно? Вот есть кучка монстров, их над создать, причём разных и управлять, и если про управлять это допустим стек, очередь или список самодельные, то как быть с разнми монстрами? Структуры?
>И что такое кутьикреатор?
qtCreator. Более-менее компактная и минималистичная ide. Хреново справляется с подсветкой (и автоотступами) всяких новых фич из новых стандартов, в остальном почти золото, по сравнению со всякими студиями или тормозными clion - я по своей воле ни на чём другом писать не стал бы. Попробуй, сам посмотри, оно за десять-пятнадцать минут ставится.
>И второе. Как раньше народ игры на С писал.
А в чём проблема?
>и если про управлять это допустим стек, очередь
Вот тут вообще не понял что ты имеешь ввиду.
Угу, структуры. У тебя есть структура под монстра. Можно несколько разных как разные сущности, если требуется для разных функций. Или можно в структуре хранить указатель на "пользовательские данные", которые требуются для конкретного монстра. В зависимости от типа монстра вызываются разные функции, чтобы они по разному действовали во время игры. Хранить монстров в списке или массиве, как угодно.
Постановка задачи.
Разработать объектную программу для хранения и обработки данных об участниках групп социальных сетей. Сеть рассматривается как набор групп, где каждая группа имеет уникальное название. В свою очередь, каждая группа рассматривается как набор участников, причем каждый участник имеет уникальное имя и параметр «Статус участника».
Разработка включает в себя определение необходимых объектов и описание их в виде классов, программную реализацию методов добавления и удаления групп в соцсеть и участников в группы с подсчетом общего числа участников, всестороннее тестирование методов с помощью консольного (при разработке) и оконного (в окончательном варианте) приложения.
Для объединения групп в рамках соцсети используется структура данных в виде адресного разомкнутого упорядоченного однонаправленного списка с заголовком. Для объединения участников в группы используется очередь на основе обычного массива со сдвигом элементов.
Сначала в консоли, в перспективе еще и ГУЙ запилить, но это все лирика. Как это хоть примерно должно выглядеть?
>Как раньше народ игры на С писал
Точно так же, как и сегодня пишут на сях, плюсах, питонах и других языках.
Если сильно упростить, в том же думе каждом кадре тебе нужно сделать:
1) Посмотреть текущее состояние, скажем, клавиатуры
2) Исходя из состояния алавиатуры обновить мир
3) Вывести мир на экран
4) Воспроизвести звуки
5) GOTO 1
Каждый из этих шагов есть отдельная функция, которую тоже можно разбить на подпроблемы. Вот так и пишется. Только в реальны0 приложениях есть куча других вещей типа загрузки-выгрузки ресурсов, обработки сети и тд.
Попробую под бабанту, всё таки простота сред на линух манит, недавно прознал про билдер, восставший, задумался, ибо вес 2015 и 2017 просто повергает в шок, 2015 - 35ГБ, а уж сколько 2017 остаётся гадать.
Значит таки структурами. Проблема в бобработке некоторой кучки разных монстров, которые создаются тем же редактором карт. Но вот беда, структуры разные, их только последовательно друг за другом массивами или списками.
Я ту поглядел время появления шаблонов, это начало 90х, так?
>установки огорчает
Я не понимаю твоей проблемы. 1 раз поставил, и забыл. Апдейты отнимают по минуте.
> Касаемо нетбоса, я понимаю. И что такое кутьикреатор? А эклипс?
QtCreator - написан на крестах, и не лагает как остальное джавадерьмо. Я бы сказал, что топ2 ИДЕ после божественной студии.
> И ещё вопрос, тут стращают, шо шаблоны это плохо
Шаблоны - это инструмент. Иногда инструмент не подходит под действие, иногда подходит идеально. Знать и уметь в шаблоны надо хоть на каком-то уровне. Я на работе в свое время нахуевертил вариадиков, зато у нас auto buff = serialize(a,b,c,d,e,f, ...) например, вместо хуевой горы говна.
> Как раньше народ игры на С писал.
Народ писал и на ассемблере. Идеи одни и те же, плюс минус, как написал >>51420 просто кресты выразительнее, нежели си
Один сканлайн с бросанием лучей это целая куча функций и структур, забыл ещё про отброс того, шо не видим, по идее кстер должен решать эту проблему.
Считаю это главным гемором.
>Я не понимаю твоей проблемы.
Йота, Ростелеком не может провести к вам инет, ведь вы в чёрном списке с 90х годов плюс ВЫ невыгодны для нас, похуй, что рядом с центром ДС2.
А так, убедил, таки попробую его добыть, но пока для меня круче 2010 ВС ничего нет.
>10 Посмотреть текущее состояние, скажем, клавиатуры
>20 Исходя из состояния клавиатуры обновить мир
>30 Вывести мир на экран
>40 Воспроизвести звуки
>50 GOTO 10
Поправил зумера.
Что-то как-то прям очень тоскливо.
>адресного разомкнутого упорядоченного однонаправленного списка с заголовком
Non-intrusive singly linked list что-ли? Ну а так у тебя всё расписано.
Есть связный список групп. Группы можно добавлять в список, удалять из него, изменить название или произвести операцию над участниками этой группы. В каждой группе есть массив участников (не знаю, он должен быть статического размера или динамически расширяемый). Участников можно добавлять, удалять, или изменять имя и статус.
>>51433
На телефоне был, извиняйте.
...чёрт, на телефоне. Скоро стану как эта вся молодёжь. Надо пить больше Монстра и играть в кваку. clack Да, вот в моё время были игры чтобы погамать, не то что сейчас. sip
Ты повторил то, что написано в задании, это никак не помогает(
Я структурно не могу понять что да как. То есть, я создам класс "Участник", "Группа" и "СоцСеть" Потом отдельно нужно навернуть классы "Очередь" и "Список". Очередь будет в private секции Группы, а Список в свою очередь там же у СоцСети или как?
>У тебя ССД на 60 гигов? Ну серьезно. Флаеры пораздавай день, купить на 256гб.
И сколько дней мне надо флаеры раздавать, чтобы новый ноут взять?
Ну я кроме плюсов языками не владею, да и их только учу.
>к джавистам надо.
Для меня это тоже самое, что на монгольском языке ответ искать.
И вообще, вопрос у меня возник в процессе чтения книги именно по плюсам. Чую, что там применяется один из паттернов, но не могу ссобразить какой. Вот вроде подходят фасад и делегирование, но оба с натяжкой.
Тащить же сам пример из книжки будет слишком громоздко - 9 классов, код с объяснениями занимает около 30 страниц.
Как показывает моя практика работы С++ макакой (а это уже почти 5 лет), то эти убер-паттерны нигде не используются, тупо за счет того, что они безумно громоздкие, и слишком глобальные. Если ты какая-нибудь джава-энтерпрайз макака - может быть да. Кресты вообще про другое.
Если правильно помню, то Фасад - упрощение сложного интерфейса. То есть тебе нужно, скажем, создать объекты A, B, C и вызвать у каждого по десять методов. Вместо этого ты делаешь класс Zayobcer, у которого есть метод makeZayobca(), в котором выполняются все эти действия. То есть это по сути простое применение абстракции, но энтерпрайз в лице банды четырёх сделал, как обычно, всё сложнее, чем оно на самом деле.
Delegation не помню, что бы в GoF был. Судя по гуглу, это, если тебе нужно использовать метод foo класса A, но чуть расширить b lheubv, ты создаёшь класс B и хранишь в нём экземпляр А (например, по имени m_a). Затем B::foo() просто вызывает m_a->foo(). Сейчас такую вещь нахывают принципом composition over inheritance.
Facade использует Delegation. По сути одно и тоже, просто разные цели. Цель Delegation - размазать реализацию класса по нескольким с целью сделать возможной модификацию поведения класса (например dependency injection) или преиспользовать код (сделать что-то похожое на миксины). Цель Facade - не светить наружу десятком классов, а выставить только один. Но Facade реализуется с помощью Delegation, тоесть реальной разницы нет.
>не надо было хуевый покупать изначально
Он изначально пиздатый, если винду и студию не ставить.
>и не факт, что они будут расходовать меньше ресурсов, чем лямбда.
Угу, ты оказался прав. Лямбды хороши.
Сравнил дома в каком-то искусственном тесте, 6 типов классов, 100к экземпляров каждого типа, 10кк сохранённых пар, 10кк вызовов:
1. std::bind сохранённые в std::function
64 байта на каждую пару, общее время сохранения - 1700 (миллионов тактов), вызовы - 462. Отвратительно.
2. Лямбды с связыванием по ссылке в std::function
32 байт на пару, 758, 427 (выходит лямбды почти не занимают память (std::function уже имеет размер в 32 байта) - видимо как-то хитро сжимаются, сохраняясь по одному разу для каждого из 6 классов, а одно связанное значения сохраняется в std::function (если добавить ещё связанных переменных, то при превышении захвата в 16 байт потребление скачком прыгает до 64 байт на пару) Вот бы где почитать про подобные тонкости реализации...
3. Пары из статического метода в std::function + void указывающий на экземпляр
40 байт, 758, 426
4. Статические методы в обычных указателях на функции + void указывающий на экземпляр(>>51067)
16 байт, 805, 334
Не представляю почему сохранение в std::function<int(void,int)> быстрее, чем в int ()(void,int) - числа почти не прыгают, из раза в раз получается 805 и 758-759. Если попытаться выровнять структуру до 32 или тех же 40 байт - время сохранения только увеличивается.
мимо-нуфаг
Только оно посредственно работает, у меня почти не поменялся размер в открытом сейчас проекте.
Сложно. Даже обычный std::string имеет хуеву тучу тонкостей которые ты можешь даже не знать, не то что заимплементить. Типа того что при малых длинах строк контент хранится в самой структуре и аллокаций памяти не происходит.
То есть, написать самому можно (и если есть время и упорство - постараться точно стоит), но гарантированно выйдет менее производительный чем стандартный.
Вроде в 17-х крестах noexcept спецификация является частью системы типов, а значит можно в компайл тайме выбирать между перемещением и копированием.
К тому же, std::vector как мне кажется юзает именно перемещение, ведь ты можешь сделать вектор юник поинтеров, например.
>Вроде в 17-х крестах noexcept спецификация является частью системы типов, а значит можно в компайл тайме выбирать между перемещением и копированием.
"В огороде бузина, а значит в Киеве дядька".
Пиздец, нахуй.
https://en.cppreference.com/w/cpp/utility/move_if_noexcept существует со времён C++11 и никакие части системы типов тут не нужны.
Используются. Другой вопрос можно/нужно ли этого избежать.
Ящитаю так: если есть вероятность что-то встретить в чужом коде, то есть и смысл в этом разобраться.
>>51588
>Delegation не помню, что бы в GoF был
Да, в ГоФ не описывался. На педивикии есть.
>>51596
>Facade реализуется с помощью Delegation
Вот это, похоже, и есть мой случай.
Алсо, забавную вещь нагуглил в процессе
https://en.wikipedia.org/wiki/Schizophrenia_(object-oriented_programming)
>паттерны нигде не используются
Паттерны какбэ не указывают что тебе делать, это про просто список широко распространенных уже используемых техник. Их назвали для более понятного общения программистов друг с другом, а не твоей обязанности их использовать.
>практика работы С++
хуевая у тебя практика, однако
за много лет коммьюнити с++ накопило большую базу знаний о реализации паттернов в языке
они могут реализовываться динамически, в стиле gof и чем то копировать смаллтолк приемы
они могут реализовываться статически, в стиле книги александреску "соверменное проектирование" и дальше то что пошло в буст на основе этого
они могут даже реализовываться в стилях функционального программирования, что одно время было популярно и стало возможным с последними стандартами языка
зачастую перед проектировщиком сейчас не стоит вопрос о придумывании чего-то нового, а вопрос выбора, как будет реализовываться та или иная связка паттернов..
Так и что получается, дрочишь паттерны и можно сразу сеньором помидором устраиваться?
>хуевая у тебя практика, однако
Ну почему сразу хуевая? Просто повезло человеку с местом работы.
если отвечать без ерничанья, то простому то кодеру не надо это зубрить
в том смысле что на это надо нихуево времени потратить
чтобы тот же gof проштудировать надо время
не говоря уж о книжке александреску, до нее надо читать "шаблоны" джосаттиса иначе вообще нихуя не понятна магия будет
ну и само, собой понимать, что все не стоит на месте, и то что там уже понаписано, щас делают немного другими способами, тк новые стандарты языка щас уже, новые семантические и синтаксические конструкции есть
скорее это нужно проектировщикам библиотек, архитекторам.. в общем уровень ведущего кодера и выше..
const char* giveText()
{
return TEXT;
}
Такое может работать, или будет ошибка?
Чисто теоретически. Интересно, где хранится константа. Не будет ли той же ошибки, что и при возвращении указателя на локальный объект, который удаляется при выходе из скопа
"This is a text" это статическая сишная строка, которая хранится в образе экзешника. Т.е. у нее есть строго определенное место, и каждый раз ты будешь на нее указатель возвращать.
>Интересно, где хранится константа.
Ну, так и прогугли - "где хранятся строковые литералы?"
Насколько я помню в какой-то области перед глобальными переменными, что подтверждается значениями указателей. (тут для сравнения указатели на переменные из стека, из кучи и глобальную)
Полагаю, здесь у тебя дата-мегмент.
Это зависит от компайлера, на самом деле. Я не знаком с самыми современными трендами в мемори лейаутах, но главное, что они не хранятся на стеке, что позволяет им быть доступными из любого места в коде.
>>51996
поведение будет зависеть еще и от ключа компиляторов, которое управляет совместимостью
раньше это не было строковой константой, в него можно было писать
к примеру, в книжке кернигана "программное окружение юникс" только в путь так делают - в нескольких местах в примерах там изменяют строковый литерал
И всё равно UB
Ну можешь make взять. Начешь с самого начала привыкать к тому что плюсы это боль.
Вопрос с подвохом. g++ это программа, у неё нет души, и поэтому не может дружить. Вот я с #include<thread> дружу давно, очень хороший хедер.
А я обожаю <windows.h>.
Нужно вручную линковать pthreads (ну или ide может за тебя сделать, если какая-то годная, не знаю существуют ли такие).
>алгоритм создания цилиндра из одной точки
В каком смысле? Далее ты говоришь про рей-трейсинг. Тебе нужен алгоритм пересечения луча и цилиндра?
>Нужно вручную линковать pthreads
Нужно указать флаг -pthread
Это не только на линковку влияет.
Спасибо, попробую осилить.
>выбор двухбайтового представления юникода инженерами майкрософт был абсолютно верен, для их ситуации
Хватит видеть мудрость там, где была банальная лень и похуизм.
Делали по принципам "640 килобайт два байта хватит навсегда" и "после нас хоть потоп".
ты вообще понимаешь, что когда это дизайнилось, там циклы процессора вручную считали еще?
Windows NT это 1989-й год. Intel 80486 вышел, с пайплайном и кэшем.
Windows NT писали под 32- и 64-битные процы (ладно, на 64-битной DEC Alpha оно работало в 32-битном режиме, так что только 32 бит) на C. Какие циклы вручную, когда C, пидоран?
>когда не можешь в аллегории
Давай тогда своими именами. Полудурок ебаный, хипстер ублеванный, ты понимаешь, блядь, что СТРОКИ это очень важно, они собираются на каждый чих и модифицируются во всех бизнес-приложениях, да и даже в работе ФС\реестра?
И что, потенциально, каждая операция по лукапу и замене превращается из O(1) в O(n)?
>даже в работе ФС\реестра?
И что там надо? Разбить строку по слешу (бекслешу), конкатенировать строки, выполнить поиск по таблице файлов/ключей.
Разницы в этих операциях никакой для UCS-2 и UTF-8.
>Ядро уже пропатчил на поддержку 2048 ядер? Нет? Пиздуй работать, ленивый похуист.
Зачем патчить в меньшую сторону?
$ grep NR_CPUS /boot/config-4.15.0-4*
/boot/config-4.15.0-43-generic:CONFIG_NR_CPUS=8192
/boot/config-4.15.0-44-generic:CONFIG_NR_CPUS=8192
/boot/config-4.15.0-45-generic:CONFIG_NR_CPUS=8192
Навернул Липмана и сверху Прату для закрепления. Там пишут, что в с++11 появились много чего полезного в том числе многопоточность.
Погуглил кратко про boost. Я до этого думал, что это чисто библиотека под многопоточность, но, как я теперь понял, это какая-то чудо сборная солянка всяких ништяков, которые впоследствии попадают (или уже попали в с++11) в стандарт.
Так что же такое std и примочки с++11? Это часть библиотеки boost или уже войдя в стандарт оно стало независимым?
Например, std:vector существует аналог в библиотеке BOOST? Это одно и тоже? Они Взаимозаменяемы?
А std:thread?
В очереди стоит книга Вильямса про многопотосность. Там будет именно с++11 функционал? Есть ли книга по boost или его изучать только по документации?
Какой минимум нужно прочитать, чтобы переходить к изучению boost?
std это стандартная библиотека. Когда говорят C++11, подразумевают std, а boost это сторонняя библиотека, нужна если тебе стандартной мало.
Если ли причины в 2019 писать новый проект на расте, а не на плюсах? Вроде текущий борроу чекер более приятным стал, но до количества библиотек и поддержки плюсов всё равно не дотягивает ведь.
На чём хочешь, на том и пиши.
Хеллоу ворлд ты можешь хоть на лиспе писать.
Лучше сразу на пхп или жабоскрипте пиши, чтобы "приятнее" было
Если ли причины в 2019 писать новый проект, а не допиливать старый? Вроде этот процесс более приятным стал, но до рефакторинга всё равно не дотягивает ведь.
>новый проект
Это такой эвфемизм чтобы слово "лабы" звучало по солиднее?
Наша компания ведущий разработчик программных решений и комплексов для лаб по программированию. Уже более половины семестра решения компании laba1 и laba2 являются эталоном в области лаб по программированию. Регулярная сертификация на соответствие стандартам индустрии позволяет нам создавать лабы мирового уровня.
В настоящее время вы активно исследуем возможность использования языка Rust для разработки надежных и качественных программных решений. В частности наш новый продукт laba3 релиз которого запланирован на вторую половину семестра является первым коммерческим решением на Rust в этой области.
Всё правильно, так сеньорами в 19 лет и берут.
Как мавен у джавы...
или нужно пердолиться скачивая и конпелируя все дерьмо, указывая папку в настройках проекта итд
apt
нихуя нет. тоже задавался этим вопросом
за столько лет эти инвалиды нормальные тулзы даже не придумали. то ли дело мавен/гредл в джаве или карго в расте
в питоне такая же хуйня на самом деле
vcpkg
msdn + google
int main(int argc, char argv) {
parse(argv[3]);
}
Как задать функцию parse, чтобы она, допустим, читала третий символ из второго аргумента?
Потоками система занимается. После вызова sleep она помещает поток в список отдыхающих. Когда проходит нужное количество времени - перемещает в список ожидающих своей очереди на выполнение.
В argv хранятся поинтеры, которые указывают на строки. Эти строки в общем случае разбросаны по памяти, то есть не идут друг за другом подряд. Поэтому сомневаюсь, что можно по адресу начала одной строки как-то найти начало другой.
Если я тебя правильно понял, то думаю так: argv[0] это название экзешника, а первый аргумент находится в argv[1], так что тебе нужен индекс 2 для второго аргумента. Дальше третий символ строки это второй индекс
int main(int argc, char* argv[]) {
parse( argv[2][2] );
}
>>55160
на самом деле мне надо более сложно парсить этот аргумент, не очень понимаю как его передать в функцию. Скопировать в массив чаров или строку и передать функции уже его? допустим
char *с = new char[strlen((argv[2]) + 1)];
strcpy(с, argv[2]);
и как тогда инициализировать parse, чтобы она читала c и выводила третий символ?
В стандартной библиотеки все загажено каскадами шаблонов. К сожалению я не настолько крут, чтобы расшифровать эти джунгли.
>>55126
>Когда проходит нужное количество времени
Вот мне интересно как это происходит, как система считает это время? Каждый цикл например if (counter >= sleetime) ? Но это же затрачивает ресурсы.
> Но это же затрачивает ресурсы
Невозможность приостановить бесполезный тред еще больше ресурсов затратит. Тем более потери на проверку счетчика очень незначительные по сравнению с общими потерями на работу ОС с потоками.
Обернута функция системного апи какая-то.
Например это https://docs.microsoft.com/en-us/windows/desktop/api/synchapi/nf-synchapi-sleep
>как система считает это время
Есть такая штука на уровне процессора, как прерывания. Если по-простому, то это событие, при котором процессор бросает всё, что делает, и берётся выполнять обработчик прерывания. Среди них есть прерывание таймера, которое происходит с одинкаовым интервалом. Когда случается прерывание таймера, ядро смотрит, что прошло столько времени, значит, состояние текущего треда можно сохранить и запустить другой. Вот там внутри где-то и есть какой-нибудь список из спящих тредов.
Вкатываться в ойти не собираюсь, это так, для общего развития, так что расслабьте булки.
Почему именно видео в хуёвом качестве и на английском?
И если ты разом собираешься это всё смотреть, то мало что отложится в голове, надо на каждую тему по несколько часов уделять.
Именно это потому что увидел это видео в меме.
Так то я уже нашел по совету достойные книги по сетям и крестам.
Самому их достоинство сложно определить, я только начал, но их мне посоветовал знакомый, с 10-летним стажем джавы, работающей удаленке за четверку грина, а ему я доверяю.
Я видел как кто-то в треды скидывал эту книгу, говорил, что слишком сложная.
Я сейчас это буду читать: http://naymov.com/edu/ukit/olifer.pdf
Я не боюсь сложностей, в конце концов работа со сложными материалами тренирует мышление.
да, но какая-нить виртуалка с линуксом все равно будет необходима, т.к. студия будет на ней все ремоутно собирать и дебажить
Забыл прикрепить
Фрапс внедряется в процесс. Нужен глобальный метод без вмешательства взаимодействия с процессом.
Стимовский оверлей, например, выводится поверх любой вещи. В теории реально, но как это сделать...
Стимовский оверлей тоже внедряется в процесс.
ну, ты в кернеле можешь найти сигнатуры драйверов и их переписать по идее, но это же пиздец
Шарпы, например, легко декомпилятся.
Проебал исходники, экзешниу есть. Люто не хочу писать заново - шансы есть?
Из гугла нашел только некий бумеранг (как-то не сработало) и декомпайлер от аваста, но с ним вообще не разобрался.
Декомпиляция в каком-то виде существует - кури HexRays, но это, фактически, дизассемблер, который обратно в С попытались собрать, т.е. убожество.
Миф. С++ компилируется в машинный код сразу понятный процессору. C# в байткод, который потом интерпретирует виртуалка. Если хочешь освежить память/забыл какие алгоритмы использовал, подрубай иду/олю и смотри. А так в любом случае придется писать все заново.
Так и нужно было сразу, [] - оператор для Си-червей пидоров, нормальные С++ господа используют array или string
https://ideone.com/OKWUbz
потому-что ты вообще не понимаешь, что делаешь. Вперед читать книгу про функции и возвращаемые значения
Абсолютно вся работа с чем-то, кроме заранее выделенной памяти - это дерганье API операционной системы.
Учить фреймворк нормально без его кишок. Он для этого и фреймворк, чтобы быть самым низким слоем абстракции, вместо API системы
То есть сами запросы в веб/блютуз и другие беспроводные сети идут от системы, а возможность их использования зависит от языка ну или библиотек?
int result = digital_root(n);
вообще все идет от операционной системы. У юзеров прямого доступа вообще ни к чему. Все системное API это "Уважаемая операционка, сделай пожалуйста вот это", не более.
Все это апи - чистая сишечка обычно, Микрософт немного С++ потом добавил.
Винапи - сишечка. КОМ-параша - С++. Там кое-какая работа со звуком доступна только из КОМ-параши, например
DirectX тоже на COM.
Попробуй скомпилировать с оптимизацией например.
А каким образом тогда Qt предоставляет кроссплатформеность? Он для каждой системы хранит пак функций которые заменяют аналогичные для другой системы?
Нихуёвую там работу проделали. Спасибо за ответы
почему
yoba=3;
cout<<yoba++ + ++yoba + ++yoba; будет 15
а не 11 если считать как даун
и не 14 если все же брать во внимание, что после сложение, посфексный инкримент перезаписывает yoba-y но откуда 15 то?
Вот тут например выходит 14
https://ideone.com/elwYPG
А все потому, что порядок вычисления в этом случае неопределен:
https://en.cppreference.com/w/cpp/language/eval_order#Undefined_behavior_2
а по итогу чемуу доверять? если не сложно, можно подробнее про эту неопределенность и как вообще логику найти?
>Шоб друзьям не стыдно было показать
ваше место у параши -> https://2ch.hk/gd/res/550538.html (М)
Не могу найти как в распределении бернулли поменять параметр распределения на живом объекте после конструктора. На цэпэпэ рефе нихуя нет. Функций у класса beroulli_distribution с гулькин хуй и ничего похожего не set я там не вижу. Мне нада соотношение рандомных булей поменять несколько раз в прожке.
Или из вариантов делать только временный объект с нужным параметром?
В статье об этом сказано.
Алсо, в 2014 и даже позже, были актуальны старые компиляторы с неполной поддержкой 11
STRUCTURA moyaStructura;
memset(&moyaStructura, 0, sizeof(STRUCTURA));
Или просто так:
STRUCTURA moyaStructura = {};
Насколько я знаю, в STL с отключением исключений всё довольно плохо. Но я вплотную этим не занимался, так что может что-то есть.
по хорошему, ты пишешь сишный интерфейс, который полностью инкапсулирует все говно внутрях, и где-то внутри ты все эксепшены и ловишь
Забыл сказать, что я имею в виду табуляцию в консоли, а не ошибку в коде для вывода.
Число больше размера табуляции - вот и колбасит. И, да, во втором цикле твоё j должно быть меньше количества столбцов, а не строк
Только начал читать, а там ёбаная математика и нихуя не подробно. Не то чтобы вообще ничего не понятно, но некоторые вещи не понятны. Как читать книгу где не всё понятно?
Вот хочу я создать свой первый шаблонный класс.
В примерах шаблонного класса вижу вот такое:
template <typename T, int N>
Вопрос: зачем нам вообще объявлять переменную N в поле template? Что нам это даст? Подразумевается, что N это нечто, которое будет использоваться в конструкторе.
чтобы смочь где-то сделать статический массив, например
Например std::array<int, 5> не аллоцирует память на хипе, т.к. N - это компайл-тайм значение
>Дропать и читать другую.
>>58601
>Это тебе не формочки на хтмл+цсс клепать. Учи математику или дропай книгу
>
Может есть что по алгоритмам, но с более подробным матаном? Полистал Кнута, там вроде бы матана побольше, но, судя по отзывам, в том числе в шапке, он не менее сложный да ещё не на плюсах
Старайся читать на несколько раз и понимать, бери усидчивостью. Седжвик пишет феноменально скучно и хуево.
Кнут не то чтобы сложный, его просто сложно читать. Что-то вроде справочника, сухой и точный язык. А по алгоритмам может аноны курсы какие посоветуют, я лично Седжвика осилил с базой 1 курса универа по тех. специальности. А точнее: что не знал - гуглил, и пытался найти разъяснение человеческим языком
Спасибо, но я слишком тупой и ничего не понял. Впрочем, неважно.
Другой нюфажий вопрос:
Если я хочу перегрузить оператор для созданного мною класса, то я могу делать это как внутри класса в области "public", так и вообще снаружи класса, я всё верно понимаю? Спасибо!
>Если я хочу перегрузить оператор для созданного мною класса, то я могу делать это как внутри класса в области "public", так и вообще снаружи класса, я всё верно понимаю?
Не все операторы можно перегружать снаружи класса, например как =, и не все можно перегрузить внутри класса, некоторые через friend функции, как >><<. Учти, что некоторые операторы нужно перегружать попарно.
Спасибо, анончик.
Нагуглил вот такое:
template <typename T1> friend ostream& operator<< (ostream& out, const Matrix<T1>& m)
Объявление перегрузки собственно оператор вывода для шаблонной матрицы мне и нужно было перегрузить
По поводу статического массива. Размер класса равен сумме размеров его полей. Допустим у тебя есть класс, где ты строго определил массив int размерностью 10. Тебе не нужно не больше не меньше, ровно столько.
Если ты пишешь так:
class A
{
vector<int> a
}
То тебе при изменении размера vector<int> нужно будет писать код, чтобы ловить исключение об отсутствии памяти(можно не писать, но программа с вероятностью 1/1^6 будет падать при некоторых условиях). А размер класса равен размеру sizeof(vector<int> a). Данные в векторе при этом хранятся на другом участке памяти, а не внутри класса.
А если ты пишешь
A
{
array<int, 10> a
}
То во время компиляции a - будет статическим массивом из 10 int'ов. и размер класса A будет равен sizeof(arrray<int, 10>a) - в данном случае 44 байта.
Перегруженные операторы можно объявить в виде функции
Главное что бы внутри класса было дружественное определение
friend A operator+(A l_ob, A r_ob)
Особенно когда продаешь ПО клиентам, среди которых 90% - Linux.
хуево работать с красноглазым говном, но я бы, вероятно, раскурил студийную кросскомпиляцию под линукс
И код пишет сама.
Спасибо большое за подробное объяснение!
притворюсь что понял
Подскажите ещё, пожалуйста, а как мне создать функцию, которая будет принимать как аргумент произвольный итератор, а не итератор конкретного типа (то есть не итератор по вектору, по мэп'у, етц.)? Спасибо!
Не обязательно красноглазить. Качаем Visual Studio Code и плагины для cmake и дебага. Но если у тебя в проекте еще какая нибудь CUDA, и прочая залупа которая требует дополнительного компилятора - приходиться ебашить.
Вот ты и спалился, первокурсник. Есть ПО не из раздела компьютерных игр, или всяких фотошопов, где как раз большая доля продаж - серверные версии под linux - Встроенные системы, сервисы с машинным зрением и всякие СУБД, за которые клиент отдает 7000$/шт. Вот и приходиться изъебываться с кросс-платформеностью.
Ты пойми - это не ПО, которое ставиться на комп для одного юзера аля фотошоп или игрулька. Гугли цены на корпоративные решения Oracle DB. У них, по твоему, небольшой объем продаж?
Цена образуется не из крутизны софта, он может быть вообще бесплатным.
Микрософт, допустим, может себе позволить продавать винду/офис занедорого тупо за счет объемов продаж.
>решения Oracle DB. У них, по твоему, небольшой объем продаж?
В штуках относительно небольшой.
Ораклу, только чтобы в ноль выйти, нужно ставить очень высокий ценник.
Вон, например, продукты Embarcadero тоже стоят по полтора ляма, и че?
https://www.codepile.net/pile/7R798Ngk
Отбой, понял я еблан, вместо ifstream нужно писать istream
Всё стоит, я уже скачал новую версию впрочем. Не ебу в чём ошибка была, в инете всё как-то размыто и советуют какие-то параметры добавить в pro файл, при том что он не менялся вообще.
я бы посоветовал таки собираться либо собираться комплектным MinGW, либо полноценно ебашить в студии с qt плагином
ну как бы, все, что ты можешь хранить в файле, это какие-то байты.
Соответственно, тебе надо написать некий функционал, который конвертирует твою мапу в байты, которые можно записать, и потом такой же функционал, который принимает байты, и создает из них мапу.
Если у тебя мапа самая простая, а-ля uint32,uint32, то вполне можно сделать хуйню типа, первые 4 байта - количество элементов, и дальшее читаешь по 8 байт, кастишь к числам, и в пустую мапу записываешь. Это все несложно, да и весьма хорошая задача для обучения.
Зелень, тебе все равно никто не поверит.
Учи, читай книги из шапки, практикуйся и ищи хоть какую-то работу, чтобы получать опыт уже реальной разработки.
И вообще https://2ch.hk/pr/res/1358809.html (М)
Правда, его скоро перекатят в C++ #84, но это хотя бы последний на данный момент тред.
Это копия, сохраненная 30 марта 2019 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.