Это копия, сохраненная 1 февраля 2017 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Чтоб воду в ступе не толочь,
крестовики обязаны трудиться,
и день и ночь, и день и ночь.
Коль отведёшь хотя б мгновенье
Одно для отдыха его,
То сразу рухнет без сомненья,
Производительность софта.
А коли дашь ему доп. пайку
Оберегая от забот,
То он последнюю фуфайку
На драфт стандарта проебёт.
А ты лупи его по заду,
За пейсики дери его,
Такой язык для этих гадов,
Поверь, доходчивей всего.
(с) Страуструп, 1983. Апокрифы крестового завета.
Шапка: https://github.com/sosachbot/cppthreadhat/wiki
Прошлый: https://2ch.hk/pr/res/886043.html (М)
Хайп, хуйяп, я хочу экономит время на решения задач, делая при этом их более эффективными и гибкими.
Я сомневаюсь, т.к. прошлый утопили искусственно.
Вот и делай, а не трать время на эту хуйню (паттерны). Своей головы что ли нет?
Ты уже смотрел?
Ну так делись, раз есть.
В лс скинул, проверяй.
У вас в дропбоксе ссылки отвалились
Вась, ну я ж в оглавлении написал
>Если ссылка на какую-то книжку сгнила - http://gen.lib.rus.ec
Прости, я не заметил.
Тыкаешь, а там ничего нет
Хочу чтобы ABRACADABRA тоже была инт. Разумеется никаких вычислений с ней не будет, это просто число возвращаемое функцией, если результат работы не получен.
Не понимаю, в чём проблема?
Делаешь пандорический захват, лифтишь в монаду, потом строишь рекурсивную схему (здесь подойдёт зигохистоморфный препроморфизм) как монадический трансформер из категории эндофункторов, и метациклически вычисляешь результат. Любой второкурсник справится. А если делать на анафорических лямбдах — так задачка вообще на пять минут.
Двачую хачкель-довна.
Спасибо, но это не позволит возвращать именно B, а не 11. Впрочем я нашел другое решение своей проблемы.
Ну вот написал такую шнягу, но она не работает
Ошибка Выражение должно быть допустимым для изменения левосторонним значением для строки (mas + l sizeof(classA)) = new classA (name, p);
Ниже приведен код заполенения очереди из файла
static classA mas;
static int l = 0;
ifstream f("gs.txt");
if (f) {
while (!f.eof()) {
f >> p >> name;
(mas + l sizeof(classA)) = new classA (name, p);
this->add(mas + l sizeof(classA*));
l++;
}
}
else cout << "Ошибка";
}
ifstream fread{"txt.txt"}; //функция чтения из файла
if (!fread)
cout << "don't read file" << "\n";
//cout << books.size() << "\n";
while (fread >> fname >> lname >> tname >> book >> y)//цикл чтения
{
// cout << fname << " " << lname << " " << tname << " " << book << " " << y << "\n";
books.push_back(Book{ fname, lname, tname, book, y });
}
ifstream fread{"txt.txt"}; //функция чтения из файла
if (!fread)
cout << "don't read file" << "\n";
//cout << books.size() << "\n";
while (fread >> fname >> lname >> tname >> book >> y)\t//цикл чтения
{
//cout << fname << " " << lname << " " << tname << " " << book << " " << y << "\n";
books.push_back(Book{ fname, lname, tname, book, y });
}
Ты просил динамический массив — тебе показали на нём (в плюсах это вектор). Без них — руками и scanf-ом.
Я описал динамический массив, но как-то неправильно. Прошу помощи в поиске ошибки и ее исправлении, а не в совершенно ином решении, которое мне не нужно.
Это не задача и не задание, это проблема.
>mas + l sizeof(classA)) = new classA (name, p);
Что ты тут вообще делаешь? Закинь на пастебин хотябы.
mas - по идее указывает на 0 объект массива
mas +l звездочка sizeof(classAзвездочка) - на l-ый объект массива.
В приведенной строке кода я создаю объект и записываю указатель на него в l-ую ячейку памяти
http://pastebin.com/ed5JHXUx
1) В mas память выделена?
2) Ты уверен что нужно измерять размер указателя classA, а не его собственный?
Я и пытаюсь написать свой динамический массив, но у меня проблемы,которые я не могу решить. Пришел сюда спросить совета , а мне в ответ "напиши свой контейнер"))
Цирк
и?
В общем, вот что имею в итоге:
static classA mas;
mas = new classA[];
static int l = 0;
ifstream f("gs.txt");
if (f) {
while (!f.eof()) {
f >> p >> name;
mas[l] = new classA(name, p);
mas[l]->getNumber();
this->add(mas[l]);
l++;
}
}
При компиляции ошибка: размер массива должен быть указан в новых выражениях. Как можно это исправить? Ругается на new classA[]
static classA звездочка звездочка mas;
mas = new classA звездочка [];
static int l = 0;
ifstream f("gs.txt");
if (f) {
while (!f.eof()) {
f >> p >> name;
mas[l] = new classA(name, p);
mas[l]->getNumber();
this->add(mas[l]);
l++;
}
}
При компиляции ошибка: размер массива должен быть указан в новых выражениях. Как можно это исправить? Ругается на new classA звездочка []
А хули ты при выделении памяти размер не указал?! Он тебе гадать что-ли будет.
>> mas = new classA[????]
В любом случае ты должен указать количество элементов. Динамический массив называется динамическим, потому что создается во время выполнения, а не растягивается. Если ты захочешь увеличить область памяти - нужно выделить новую, старое туда скопировать, и затем старую область памяти освободить.
Короче, стек для ЛЁХ, не уверен, насколько правильно он будет работать.
http://ideone.com/PSz4Mp
блять, забыл в деструкторе память почистить, но сделай это за меня.
алсо, можно припереть сюда перемещающие и копирующие конструкторы и присваивания, если желание есть
бамп
Ме именной сертификат дадут? А в резюме такое можно вписать?
Ты, по моему, хуйню какую-то делаешь. Возможно я чего-то не понимаю, но вот, как все это выглядит: ты пытаешься создать динамический массив, то есть массив, который может там расширяться-сужаться, сальтухи мутить. Это нужно в случаях, когда ты не знаешь конечного размера этого массива и все зависит от входных данных (в них, естественно тоже нигде размер не записан и тебе тупо надо считывать, пока ты не дойдешь до конца). И вот ты говоришь программе найти тебе какой-нибудь указатель в памяти (static classA mas) и дальше сохраняешь свои элементы один за другим, начиная с этой позиции ((mas + l sizeof(classA)) = new classA (name, p)). Я, чесно говоря, заебусь описывать все ошибки, которые ты допустил в своем подходе. Но из основных: на с++, как впрочем и на любых других языках, создать идеальный динамический массив просто не возможно. Это объясняется тем, что память представляет собой что-то вроде большой строки, рандомные отрезки, которой бронируются компьютером для хранения в них данных (например, когда твоя программа просит выделить ей память). И, если мы, как и ты, будем просить компьютер найти нам какое-то место в этой памяти, а потом записывать туда даные, одни за другими, то мы обязательно, рано или поздно, наткнемся на уже занятую часть строки и начнем там творить невъебенную такую ахинею (это не учитывая еще много других пиздецов, которые непременно случатся при таких действиях). Все это является базовыми знаниями, без которых человека не следует вообще подпускать к с++ или не учить их работать с динамической памятью. Очень удивлен, что ты ими не обладаешь. Ну а для того, чтобы все-таки реализовать эти "динамические массивы" используют либо стэки, либо вектора, либо, возможно, много чего еще. Тебе советую воспользоваться вторым методом
Только если метод виртуальный (да и то уже давно не сильно медленнее). В остальном — разницы 0.
Уточни, не спутал ли твой советчик плюсы с явой/шарпом.
http://pastebin.com/rsjVwLKQ
http://pastebin.com/GwbhB9Kf
Это вот энто дело http://www.adp-gmbh.ch/cpp/common/base64.html, типо декодер base64.
Делаем так:
std::string str = "0JTQstCw0Ycu";
std::string decoded = Base64::Decode(str);
Выхлоп:
(.text+0x53a): undefined reference to `Alice::Base64::Decode(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
collect2: ошибка: выполнение ld завершилось с кодом возврата 1
Вопрос: где он нашел еще два параметра у функции, когда в хедере и в самом cpp их всего по одному?
Самое интересное, что даже при копипасте примера с той же страницы, где и находится эти сорцы, он выдает такой же выхлоп.
https://github.com/sosachbot/cppthreadhat/wiki#Справочники
>нет пророка кроме Страуструпа
а вы говорите ситхи в шапке нинужны
Мельком пробежаться можно, но многое из чего там просто нахуй не нужно. Достаточно емкое описание библиотеки, согласно стандарту, конечно же.
>в справочниках по ссылке только 2 книги Страуса
С тобой всё в порядке?
я когда переносил шапку конечно думал что будут сложности, но что придётся учить читать кого-то точно не думал.
>>892538-кун
Тебе нужна динамическая зпгрузка разделяемых библиотек. Это совсем несложно, попробуй libltdl. Только там сообщения от ошибках ебанутые. https://www.gnu.org/software/libtool/manual/html_node/Using-libltdl.html
Читал. Читать стоит, но выборочно. Алгоритмы нужны точно, локали точно не нужны.
Т.е. есть, например, метод
world->Draw(world,1);
Семантически выглядит не очень. Дублирование world как-то не в тему.
Зачем ты передаешь ему самого себя
Вызов нестатического метода уже подразумевает передачу себя (this) по указателю неявным образом.
Этот кусок говнокода не работает, хотя при выведении с начала (.begin(); .end(); ++)всё ок.
multimap<unsigned int, string>::iterator curItem;
for (curItem = sortedDict.end(); curItem != sortedDict.begin(); curItem--)
file << (curItem).first << " : " << (curItem).second << endl;
sortedDict соответственно мультимапа
Если он хотя бы на уровне явы работал - купили бы. Дык и на i7 тормозить будет.
Если нужен функциональный язык не страдающий тормозом головного мозга - всегда есть окамл.
Треды есть, библиотеки есть. Работает на сперме прекрасно, но чтобы накатить сам компилятор с окружением нужно хорошо потрахаться, есть такое.
ИРЛ используется побольше чем хачкель кстати, лол.
Да нет, яву уже довели до состояния когда можно работать на нормальном домашнем процессоре. И мейнфреймы у них кстати оверпрайснутое гуано.
>>893650
Синтаксис. Можно подрочить на него, можно описать парсер в 10 строк который на других языках займёт несколько сотен, можно сделать парсер метапарадигм.
https://msdn.microsoft.com/en-us/library/mt762841.aspx#Anchor_2
Осталось дождаться пока нормально форматировать сообщения об ошибках научатся а ещё выкинут половину языка нахуй.
Пусть сначала лямбды научатся форматировать
>не страдающий тормозом головного мозга
Насмешил. К тому же АхВерблюд - это объекто-ориентированная параша похлеще эфшарпа.
Ору с рвущегося довна.
И кстати да - окемл не навязывает никакой парадигмы как и плюсы, в отличие от жав, хачкелей и прочей хуйни.
Кто, интересно, будет смотреть на него?
> окемл не навязывает никакой парадигмы как и плюсы
И как можно видеть на примере C++ и кокамла — "мультипарадигменность" работает плохо. Как и мультикультурализм.
Может еще что добавить?
Шапку открой.
>>894015
Забавно от пейсателя кластеров мультипарадигм на хаскелях слышать что-то про "работает плохо", когда мир программирования поделен на мультипарадигменные и несуществующие языки.
>Хачкель хороший язык. Но иногда слишком медленный.
Хочешь делать системые ультрахайлоад приложения с байтоебством вроде движка БД или 10K сервиса - бери pure C и\или Erlang, хочешь делать прикладуху с кучей высокоуровневой бизнес-логики - бери Хаскель и не парь себе мозг байтоебством. Всякие там common языки вроде сиплюсов, жавы и сисярпа - суть одно и то же, неудачная попытка скрестить ужа с ежом, причем непонятно зачем.
Почему для бизнес-логики ты выбрал Хаскель, а не ООП на плюсах, например? И у перечисленных тобой common языков, хотя бы нормальные IDE завезли c профилировщиками и групповой работой.
>IDE завезли c профилировщиками и групповой работой.
Не тыкай ножом язву. Им иде с нормальным автокомпилтом до сих пор не завезли, лол.
>не ООП
Я описываю процессы, а не объекты.
>на плюсах
Надо уделять слишком много времени\внимания различным низкоуровневым аспектам. И даже при это велик риск получить ошибки на продакшене. Хаскель же часть ошибок исключает как класс, часть позволяет обнаружить на этапе компиляции, короче если и будет ошибка на продакшене - то скорей всего это будет архитектурная ошибка алгоритма, но не ошибка реализации данного алгоритма.
>хотя бы нормальные IDE завезли
Да, с этим беда
>c профилировщиками
GHC имеет профилировщик
>групповой работой
К языку это тащемта отношения не имеет.
В хаскеле нужно извернуть мозги через зад в рот. Не надо ляля, его система типов с чистотой и траляля создаёт ещё больше проблем чем решает, а поиск утечки с его ленивостью повеселее чем в плюсах. При этом писать негде, тулкитов нету, библиотек относительно плюсов нету, тормозит как залупа (а мы сравниваем с плюсами, которые бегают на уровне си). Будь то опенсорс/коммерческий проект — программистов для него ты не найдёшь.
Вот какой смысл его брать, кроме как подрочить на крутые фичи?
Хаскель мне даст хотя бы приблизительный перформанс? Или любая бизнес задача ограничивается на крудом?
>В хаскеле нужно извернуть мозги через зад в рот.
Ты наверно имел в виду в целом ФП?
>система типов с чистотой и траляля создаёт ещё больше проблем
Какие?
>а поиск утечки с его ленивостью
Есть профилировщик хепа.
>При этом писать негде
Выше писал, да с IDE проблемы.
>тулкитов нету
Есть
>библиотек относительно плюсов нету
Ну если бы ты про Erlang так сказал - прокатило бы
>тормозит как залупа
Я выше писал - для хайлода бери pure С. Для прикладных приложений гораздо важней высокая доступность. А проблемы производительность куда проще решаются горизонтальным масштабированием.
>>894468
>Хаскель мне даст хотя бы приблизительный перформанс?
Приблизительный к чему и перфоманс в чем?
Что такое? У нас новый пуревасикдовн у которого конструкторы тормозят?
>>894494
>Какие?
Ну ты открой фп тред, посмотри как там писали najtiElementVMassive подсчёт высоты бинарного дерева. Хороший, годный язык.
>Ну если бы ты про Erlang так сказал - прокатило бы
Про хаскель тоже прокатит. Или у него библиотек уже как у плюсов? вместе с си.
>для хайлода бери pure С
Да нахуя мне твой веб. Нету в вебе понятия "хайлоад" пока ты не гугл/фейсбук. А когда ты гугл — начинаются плюсы где-то у первых был пейпер как это им экономит миллионы.
Вот мне нужно в риалтайме распознавать изображение/выводить йоба-картинку/сделать ин-мемори бд/и тд — мне хаскель сильно поможет? и зачем мне вообще он когда на дворе есть питоны и прочее?
Так же не понятно зачем оно мне при написании верхнего уровня — есть варианты от питона до жвм языков, которые делают хаскель по всем параметрам ах да — твой круд же типобезопасный! Теперь-то заживём!
Алсо, у меня есть опыт поддержки проекта на няшной. И плюсовой код поддерживать несравнимо легче. инб4: кококо 10 этажей шаблонов — в плюсах можно спокойно писать без них, а вот в си такие проблемы не решаются без 10 этажей макросов или еще лучше — кодогенератором сверху.
>>894494
Не понимаю, как можно в 2016 писать что-то сложное, как хайлоад на Си. Это бред полнейший. Зачем жертвовать гибкостью и безопасностью ради 1% ускорения?
>как там писали подсчёт высоты бинарного дерева.
Открыл. Никаких проблем, связанных с чистотой или системой типов, о которых ты говоришь, не увидел. Собственно вообще проблем не увидел.
>Или у него библиотек уже как у плюсов?
Более 10000 в репозитории. Маловато?
>Да нахуя мне твой веб.
Не знаю. Я нигде про веб не писал. Ты сам себе что-то придумал и сам себе что-то пояснил.
>ин-мемори бд/и тд — мне хаскель сильно поможет?
Нет, мой дислексичный падаван, чуть выше я писал, что например для движка БД лучше взять C. Хотя на Хаскеле можно и операционную систему написать.
>есть варианты от питона до жвм языков
Мультипарадигменное динамикоговно. Нет спасибо.
>И плюсовой код поддерживать несравнимо легче.
Любишь пердолиться с ромбами?
>кококо 10 этажей шаблонов — в плюсах можно спокойно писать без них
В плюсах можно спокойно писать и без плюсов.
>>894576
>как можно в 2016 писать что-то сложное, как хайлоад на Си.
А на чем нужно? Поясни, бро.
И чем Go более гибкий чем C?
>Более 10000 в репозитории. Маловато?
http://githut.info/
На одну позицию обгоняет Lua. По мне так количество либ уровня Lua это как-то мало.
>>894588
>Мультипарадигменное динамикоговно. Нет спасибо.
Вполне симпатичный язык. Ты что из этих? Ну кто дрочит на чистоту и метаобъектные манатки? Это говно без задач.
>languages in GitHub
>количество либ
Понятно. А по мне так количество либо ниже уровня JS тоже как-то мало. Шах и мат.
>Это говно без задач.
Ну раз на дваче ниосилятор так сказал - ок.
Я бы даже сказал, ты потратил весь запас удачи своего рода, который копился в генах твоих предков со времён австралопитеков. Да, ты прав, можешь Роскомнадзор, потому что тебе скоро либо сосуля на голову упадёт, либо даги собьют.
Спасибо.
вот для чего нужно было, если чо - (void(*)()) vptr - указатель на функцию в таблице виртуальных функций
При чем тут конструкторы? О чем ты? Посмотри на код среднего C++ проекта и на плюсовый и подумай что именно может тормозить.
>При чем тут конструкторы? О чем ты?
Это мемасик от местного персонажа выгнанного отсюда нахуй пол года назад.
>подумай что именно может тормозить.
Посвяти уж.
Не вижу ничего. Виртуальный функции/RTTI/итд — если в си возникает в них потребность работает точно так же, только работы в 5 раз больше. разве что намного реже удаётся избегать лишних аллокаций в контейнерах и при наследовании.
Идеология кода несколько иная, очень долго чистим эксепшены вместо обработки сообщений по селекту, очень долго сидим в ядре и ждем пока очередное future настанет вместо форка через пайп с месседжем, дергаем семиэтажные IOC контейнеры и прочие DI конструкции с горой виртуальных вызовов, вместо сишных get_component_handle ( COMPONENT_ID ) - подобных разрешений . Это как пример, таких можно много наковырять. Естественно я не про сфероконя и laba1, а про то как реально эти языки применяются.
Ты про сфероконя из мира явы/шарпа по большей части и рассказал. Что нибудь из разряда "тормозящего в языке" а не "тормозящего от ява-энтерпрайз-архитектуры" есть?
Ну, язык бессмысленно рассматривать без его применения. Как что-то может "тормозить в языке"?
Ну я потому и написал про сфероконя — не видал я чото бэкэндов с энтерпрайзными архитектурами на плюсах. Повезло видимо.
С другой стороны говорить что язык тормозит только потому что написано "как-то сяк" тоже неправильно.
>Как что-то может "тормозить в языке"?
Ну ты сам как думаешь?
>повезло
Именно.
Язык - это стандарт, стандарт не тормозит. Он бумажный. Тормозят специфические решения свойственные языку. Я выше тебе расписал примеры, если остановиться на чем-то одном: нынешний подход в плюсах к потокам на практике значимо медленнее того, что обычно используется в си. Сравни производительность решения на селекте с коллбеком и RAI решения с future. Естественно в плюсовых проектах используется зачастую первый подход когда появляется необходимость в производительности, но это решение проблемы, а не факт ее отсутствия.
> дергаем семиэтажные IOC контейнеры и прочие DI конструкции с горой виртуальных вызовов
"IOC" и "DI" можно реализовать и на C (только там вручную и через жопу), и работать они на обоих языках будут с одинаковой производительностью. Такой подход в C++ применяется не сильно чаще, чем в C, и там, где он действительно оправдан. Сейчас мейнстрим разработки и идеология - метапрограммирование и ехал темплейт через темплейт, а не энтерпрайз.
> Сравни производительность решения на селекте с коллбеком и RAI решения с future.
Какой селект с коллбеком? При чем здесь RAII? И почему надо сравнивать future, а не, скажем, lock-free структуры данных, если речь идет об организации работы потоков?
Нет.
>первая часть
Что сказать то хотел?
>lock-free
Это отдельная тема, смысл ее затрагивать? я говорю про специфичные для языков подходы. Я сравниваю параллельное выполнение а не атомарный доступ, это скажем так, принципиально разные вещи.
И как контора называлась?
Суть: C++/Qt5, в *.ts файле переведёно всё (включая ту самую строку), lupdate/lrelease делал перед сборкой (он автоматически выполняется), но несмотря ни что одна из строк на форме не переведена.
Что это вообще может быть?
> Что сказать то хотел?
Хотел сказать то, что и сказал - "про специфичные для языков подходы". Ты утверждаешь, что для C++ специфично писать IOC. Так вот, это неправда.
> Это отдельная тема, смысл ее затрагивать? я говорю про специфичные для языков подходы
И я про них. Специфичный для C++ подход - взять готовую библиотеку, которых для lock-free несколько.
> Я сравниваю параллельное выполнение а не атомарный доступ
Ты вообще непонятно что сравниваешь. Накидал терминов для той и другой стороны без упоминания конкретной задачи.
http://kaisar-haque.blogspot.ru/2008/07/c-accessing-virtual-table.html
>>895519
Может это ты наркоман? Где ты написал, что я наркоман, дебил блять?
Что мне должна дать эта ссылка, довн? Ещё больше убедить в твоей неадекватности?
Даже если в данном ABI вызов member-функций не отличается от вызова обычных функций (прост опервым параметром идёт this), то тип у функций, на которые указывает vtable, никак не (void())
{//содержимое}
int main()
{
Base *p;
}
При таком объявление у создаётся объект пользовательского типа Base и доступ к нему осуществляется через указатель? Или я через указатель обращаюсь к классу?
Или я говорю, что указатель *p типа данных Base.
Указатель на класс вижу, объекта пока не наблюдается. Вот если бы было
Base p = new Base();
или
Base p;
p = new Base();
тогда объект.
Вот нашёл
http://www.amse.ru/courses/cpp2/2010_11_22.html
Он свои названия придумает что ли...
Именно так. Блядская макаба.
И еще, в первом случае с new, объект создается в куче, и при завершении области видимости, не могу вспомнить, вызывается ли деструктор. Во втором случае, без new (если еще и без звездочки), объект создается в стеке, и для него при завершении области видимости вроде бы должен деструктор вызываться.
Студент?
Не пиздишь?
Мне тут один писал, что при этом происходит утечка памяти
Деструктор вызывается при использовании умного указателя
Указатель у тебя вышел из области видимости, а объект как был в куче, так и остался, только теперь на него никто не ссылается.
Нет, если у тебя указатель на тип Base в нем объявленые простые типы, то память освободится нормально. Но, если у тебя там еще что-то динамическое, то нужно писать свой деструктор с delete'ми, чтобы освободить все динамическое. Поправьте если ошибаюсь.
Но если запустить этот код, то получается что нихуя она сама не освобождается.
int main() {
int b;
{
int a = new int;
a = 5;
b = a;
}
cout << b << endl;
b = 2;
cout << b << endl;
system("pause");
}
Результат 5 и 2
быстрофикс
int main() {
int b;
{
int a = new int;
(a) = 5;
(b) = a;
}
cout << (b) << endl;
(b) = 2;
cout << (*b) << endl;
system("pause");
}
Результат 5 и 2
Как же ты заебал. Эта тема тут обсасывалась уже десятки, если не сотни раз.
Если ты делаешь объявление переменной:
>> Base *p;
то в таком случае, при выходе переменной p из области видимости ничего не произойдет, кроме высвобождения куска памяти под указатель размером size_t байт.
Если ты не пользуешься умными указателями, деструктор тебе необходимо вызывать вручную, потому что иначе память под ОБЪЕКТ будет висеть без ссылок и освобождена не будет. Автоматически освободится только память под УКАЗАТЕЛЬ.
Память, на которую ССЫЛАЮТСЯ УКАЗАТЕЛИ не освобождается сама.
Спасибо что прояснил
Порадовало обилие литературы в шапке, в отличие от шапок с другими языками. Буду читать.
Есть ли смысл НЕ использовать using namespace std? Те какой вв этом профит и чем вредно то, что я его постоянно использую?
Дело в том, что ты можешь подрубить какуе-нить либу в которой будет такое же имя класса или объекта как в std, ну тогда получится передкларирование, ошибка.
Пространства имен создали, чтобы изолировать множества имен друг от друга.
Использование директивы `using namespace abc` позволяет обращаться к именам пространства имен abc без указания этого самого пространства имен (например, если указывать using namespace std, то векторы можно объявлять уже при помощи vector<...> а не srd::vector<...>), как минус - возможная коллизия имен. В глобальной области видимости такой хуйней заниматься не советуют (а если ты залепишь такую штуку где-нибудь в начале одного из заголовочных файлов своей программы, опять же в глобальной области видимости, то искать этот косяк будет еще веселее, когда ты про него забудешь и увидишь воочую коллизию имен).
А вообще, в теле функции, да, можно, я так сам часто делаю, когда мне лень писать префиксы.
Спасибо тебе!
Спасибо!
Не имеет параметров?
Мне желательно её сделать без параметров как член класса
И да, и нет.
Правильный ответ - функция-элемент "операторOP()" без явных параметров. Т.к. неявно все равно по ссылке передается вызывающий объект.
Ах ты ж блин, про скобки забыл. Спасибо.
void operator % () - не работает
void operator % (&pes) - Работает
Ещё не получается передать более 1 параметра
Так ты спрашивал про % а не ()? /0
Ясен хуй что у оператора % не может не быть аргументов/больше одного, сам подумай почему.
Спасибо
Какой же все таки нищенский язык.
Хочу написать свою игру, по типу VN. Хочу именно на С с классами, так что RenPy не советуйте. А посоветуйте лучше каким графонием обмазаться. Пока смотрю на curses (для моего нище ноута) и SDL. Но рынок мной не до конца изучен, может есть что то что я не учел.
Второй вопрос, упарывался ли кто TDD на плюсах? Как? Чем ? Подводные камни?
SDL.
>А посоветуйте лучше каким графонием обмазаться.
Каким ещё графонием? У тебя картинка с квадратиком и текстом, это даже на голом opengl в пару строк делается.
Чем тебе так всрались плюсы для такой хуйни — понятия не имею зато мысленно покатываюсь когда вижу что вместо перехода на какую-то ветку сюжета игра падает нахуй. Алсо, если всё же хочешь плюсы, но лень самому всё рисовать и писать совсем низкоуровенную еботу вроде менеджера ресурсов — посмотри на тот же Qt можешь даже на QML если анальной ненависти к жс-подобному говнецу нету.
TDD — это в первую очередь о динамических языках, в которых всегда нужно знать что вернёт функция (в т.ч. особенно её тип), и во вторую очень высокоуровенный, когда сделать ошибку в самой функцие а не алгоритме достаточно сложно. В статических, и тем более низкоуровенных языках мягко говоря бесполезна, как и остальные юнит тесты. Обычные ассерты помогают отловить куда большую часть ошибок. А дальше помогут только полноценные функциональные тесты с тестировщиками.
cocos2D-x
Хочу вкатиться в современные плюсы. Как у вас сейчас модно передавать параметры? Пытался разобраться с пикрелейтедом, сложна. То есть сейчас по старинке писать f(const T&)? И что за хайп по owner<T> уже прошел, не надо так делать?
Куда комитет смотрит? Это СТАНДАРТНАЯ библиотека. Каждый блядский компилятор все делает по-своему.
Теперь я понимаю, почему так популярны толстые буст и Qt.
Что такое одно и то же в твоем понимании? Неявный каст? Детали внутренней реализации?
move тебе нужен только тогда, когда у тебя определен конструктор &&. Т.е. у тебя там нетривиальный конструктор: память, например, выделяется и еще че нить.
Хотя я сам не уверен
В буквальном смысле, в GCC, например, там просто typedef value_type звездочка iterator;
И когда я объявляю метод возвращающий итератор, как указатель, он не ругается, а MSVC ругается.
> Почему в GCC и libc++ std::array<T, N>iterator и T-указатель это одно и то же, а в MSVC++ - нет?
Потому что так можно.
> Каждый блядский компилятор все делает по-своему.
Имеет право.
> Теперь я понимаю, почему так популярны толстые буст и Qt.
Ну давай, расскажи, что ты там понял.
>И когда я объявляю метод возвращающий итератор, как указатель, он не ругается, а MSVC ругается.
Так это метод, возвращающий итератор или указатель? Определись.
Грубо говоря есть класс:
class foo {
private:
int x;
public:
foo(_x) { x = _x;} //тут все ок
}
И второй
class bar {
private:
foo x;
private:
bar(int _x) { x(_x); } //вот это падает с ошибкой.
}
thanks
Я почитал конечно, но все таки почему нельзя просто создавать экзкмпляры других классов, как например в джаве без костылей, типо объявил T x, как поле класс и потом в конструкторе сделал x = new T(парамс)
Все разобрался, нужно было просто через указатели сделать.
Когда начинает выполняться тело конструктора, то все члены уже инициализированы.
Если хочешь инициализировать их — в initialization list.
Ок, но через указатели все заработало внезапно, когда полем сделал указатель на объект класса и в конструкторе как раз сделал T x = new T(params) или это плохая практика?
class vector {
T *pv; // одномерный массив;
int size; // размер массива.
public:
vector(int);
~vector() { delete[]pv; }
T & operator [ ] (int i) { return pv; }
//. . .
};
template < class T >
vector < T >::vector(int n) {
pv = new T[n];
size = n;
}
Аноны, почему он использует пользовательский тип параметра вместо typename?
Смотря что тебе нужно.
Ты о `class T` ?
Так это не пользовательский тип а объявление того, что параметр шаблона T должен быть классом.
А класс это не описание пользовательского типа данных?
Вообще разобрался. Это из-за того, что typename раньше не было и пока допускается такая запись
Хм, действительно. Я вот до этого момента как-то не задумывался даже.
gtkmm
wxwidgets
fltk
Ну а вообще, насколько я знаю, можно динамически линковать Qt и слать всех нахуй, потому что LGPL.
https://channel9.msdn.com/Events/GoingNative/GoingNative-2012/Keynote-Bjarne-Stroustrup-Cpp11-Style
gtk — жопаель.
wx и fltk — что-то уровня mfc, чесслово.
В куте меня смущает что часть библиотек под жопаелью, а так же там несколько редакций LGPL. Кстати, они что, берут деньги только за поддержку?
Слоников на 3-м и 4-м слайдах в зеленый покрасить надо было.
Кто нибудь умеет в опенгл хотяб на уровне хелловорлда?
> Кстати, они что, берут деньги только за поддержку?
Коммерческая версия же, плюшки из которой попадают в опенсорц только через несколько релизов.
http://licenseit.ru/wiki/index.php/GNU_Lesser_General_Public_License_version_3
Как-то так. Посмотрел с англицкой версией LGPLv3, перевод, вроде бы нормально. Естественно, все лицензии ты должен приложить
Есть класс Nvector
В нём массив
Требуется в оператор передать числовое множество(или список. Не знаю как правильно) {1, 2, 3} в operator = ()
Не знаю, что в скобки вписать чтобы он его принял
ЯННП.
Наверное, это пишется не так: {1,2,3), a Nvector(1,2,3) (если конструктор написан правильно) - то есть, ты хочешь создать Nvector из этих чисел и использовать его.
Или твой конструктор может принимать std::vector из чисел, тогда будет так: Nvector(std::vector<int [или что там у тебя](1,2,3)).
В первом случае ты будешь маяться с variadic arguments (http://stackoverflow.com/questions/28866559/writing-variadic-template-constructor) , во втором - будешь тыкать вектор.
в с++11 std::vector можно инициализировать так
std::vector<int> mem = {1,2,3};
http://en.cppreference.com/w/cpp/language/list_initialization
Тредов таки не завезли, вернее завезли, но на одном ядре. Окамль не умеет в multicore.
Хотя что то пилится, но что хуй пойми.
Такие дела.
Но сам по себе язык охуенный и довольно быстрый, если компилируемый.
>ИРЛ используется побольше чем хачкель кстати, лол.
Хачкель не используется вообще нигде.
А на окамле пишется куча компиляторов, например компилятор Rust изначально был написан на нем.
Из крупных дохуя продакшн он используется в Xen'е
Пруф:
https://mirage.io/
https://github.com/mirage
>Окамль не умеет в multicore.
Окамл-то может во всё, это то же самое что написать, мол, на плюсах до тредов в стд не было способа паралелить код.
>Хачкель не используется вообще нигде.
Ты сейчас удивишься, но используется. Другое дело что окемла больше он, внезапно, тупо намного практичнее, хотя и не так фичаст.
Думаю, стоит закончить минутку флуда т жизни в человеческих языках, пока кресторабы не забили насмерть.
чего книги из шапок не открываются?
В каком-то параллельном мире, да?
Дошел до абстрактного типа данных "Очередь (Queue)". И не могу разобраться в одном моменте из примера удаления элемента из начала очереди (см. пик). Может кто объяснит эту строчку кода?
P.S.: Попутно передаю привет издательству Вилльямс за перевод 6го издания, у которых "оператор" вдруг становится "операцией", а "бит - это набор единиц..." (в оригинале units of...). И за этот перевод они просят 2-3 килорубля.
Что зачем? Ты вдруг ты захочешь как-то распорядиться удаленным элементом?
По идее, этот метод должен возвращать Item а не bool, а для индикации ошибки делать или ассерт(как в Qt) или дропать исключение (как в stl). Но тут сделали так.
>По идее, этот метод должен возвращать Item а не bool, а для индикации ошибки делать или ассерт(как в Qt) или дропать исключение (как в stl)
Или возвращать optional.
> В куте меня смущает что часть библиотек под жопаелью, а так же там несколько редакций LGPL.
В куте множественное лицензирование, GPL/LGPL/проприетарка.
Так что твой вариант - Qt. Ах да, это еще и самая лучшая гуй-платформа вообще.
Ты дурак что ле? Ничто не мешает, но тогда ты не получишь экземпляр удаляемого элемента. А эта операция называется "получить первый элемент и удалить его из списка". Вытолкнуть в простонародье.
Типо как ты достаешь жевачку из пачки орбита - ты достаешь экземпляр для своих целей (сожрать), а в пачке эта подушечка исчезает. То что ты предлагаешь - просто достать ее и выбросить, не имея возможности сожрать.
Ничего.
Планирую с НГ начать учить С++ и делать свою простую игру.
Ты че ебанутый? Тебе именно это и сказали.
Дэбыл. Часто контейнеры для данных нужны как "самоцель"?
Лучше бы рефлексию планировал
У B есть метод MethodB, виртуальный
Творим такое:
A a = new A();
D d = a;
Как из переменной d вызвать MethodB, акромя использования dynamic_cast?
Не знаю.
Ответ тот же.
Используя static_cast.
некоторые из символов, которые я использую
хех
вот символы
не помогло(
Для начала - чем выводишь? встроенным логгером в IDE, или все плохо и прям в если у тебя сперма - в ее сосноль?
С другим утф работает? В частности с русскими буквами?
Вывожу через локальный отладчик(консоль). С русскими буквами - работает.
Пока голая DE из коробки не перестанет лагать (причём на хорошем железе, что как бы намекает) можешь пососюкать писю.
Претензии к кедам а не к ним были. Им до лагов ещё надо хотя бы треть функционала той же идеи выполнять научится.
Это кстати очень похоже на байт от гугла: они выпускают язык, пиарят его, мол, позволяет экономить на железе, а сами реализовывают идеи быстрее чем модные стартаперы с го и имеют с этого хороший профит.
Как сделать норм портфолио на гитхабе за короткий срок?
bb
Задача - просто выводить на экран текстуру.
Решил быстренько сделать это через opengl, но вообще не понимаю, как прикрутить glfw или sdl - готовые бинарники обычно скомпилированы для vs или mingw, да и хуй его вообще поймет как заставить линковщик их подхватить.
Пытался собрать из исходников с помощью cmake, но эта срань не видит clang и пытается собрать для msvc.
Если использовать либы для msvc15, и в коде написать
#pragma comment( lib, "glfw3" )
#pragma comment( lib, "glfw3dll" )
то получаю огромный список unresolved external symbol.
Что делать, как быть?
Отклеилось:
код: pastebin.com/P1nRWcvh
ошибки: pastebin.com/9z49Pvqz
как лежат файлы:
-main.cpp
-glfw3.dll
-glfw3.lib
-glfwdll.lib
-GLFW
---glfw3.h
---glfw3native.h
У GCC (он же миниговны) и MSVC разные манглеры имен (да и форматы либ тоже), так что тут нужно точно знать для чего у тебя либы.
Алсо, посмотри чуть-чуть CMake, емнип, на нем GLFW3 собирается нормально, будет проще, чем вот разбирать твою хуйню.
CLion.
"Сигнал" - это вовсе не сигнал (какой придурок его так назвал?), а заголовок функции, который привязывается с помощью QObject::connect к существующей функции или методу, одному или нескольким, каждый из которых вызывается с теми же аргументами, с которыми выпущен сигнал.
При этом ввиду кривости языка C++ connect принимает не два аргумента (сигнал и слот, выраженные через объекты, которые связываются), а четыре (ссылки на объекты и ссылки на сигнал и слот).
В 80-е шпана била лампочки по подъездам и привязывала кошкам консервные банки к хвосту.
В XX1-м веке у шпаны появились компьютеры и она привязывает заголовки функций к существующим функциям или методам.
Что ж, хоть лампочки и кошки целы.
Суть вопроса: допустим, чисто теоретически, есть один пользователь. После всех приемов соц. инженерии, вы понимаете, что у вас есть возможность заставить человека запустить какой-то файл ровно один раз и ни разом больше. Цель: получение полного доступа к файлам компьютера, вебкамере, микрофону и т.д.
Что уже понятно: вы не будете использовать какие-то известные трояны, ratы и прочую залупу ибо раз они побывали в общем пользовании, то в 99% случаев палятся антивирусами. И вот вы решаете писать что-то самостоятельно, обладая нулевыми начальными навыками. Чтобы написать полноценный ратник уйдет охуенно большое количество времени, поэтому нужно более простое и быстрое решение. Какой бы вы выбрали путь? Т.е. что именно вы бы попробовали написать?
Мне в голову пришла только одна идея: написать какие-то ворота так скажем, какую-то простую утилиту, которая после установки человеком даст вам очень простой функционал: прием и запуск любых файлов с правами администратора на зараженном компьютере. Такая утилита помогла бы установить какой-нибудь кейлогер, какой-нибудь файловый менеджер с откликом на отдельный ip, какую-нибудь программу для трансляции с вебкамеры и т.д.
Собственно вопрос: я ебанулся и это нихуя не простая утилита получится, которую тоже охуенно долго писать придется? Есть какие-то более простые способы? Что бы ты выбрал, анон?
Тебя не спросил, что мне лучше.
Современные бесплатные антивирусы уже давно юзают поведенческий анализ.
Им все-равно публичный бэкдор или нет, но если они видят, что это чудо тянет свои ручонки к вводу/выводу системы, они отрубают ему руки и рапортуют юзеру об очередном наглеце.
Платные антивирусы еще и анус досматривают.
Спасибо за ответ, тогда переосмыслю свои желания, отрекусь от идеи и пойду лучше в дотку катать.
>Какой бы вы выбрали путь? Т.е. что именно вы бы попробовали написать?
Как раз пишу ратник, сейчас пилю келоггер на основе RegisterRawInputDevice. Самое сложное, видимо, будет написать графическую оболочку для админки (наверно, буду юзать кьюте) и свой сетевой протокол для более удобного получения инфы.
>Современные бесплатные антивирусы уже давно юзают поведенческий анализ.
Обламывается же антиэмуляцией, не? Во всяком случае, мой криптор позволяет бес палева запускать всякие спидораки. Как еще можно повысить беспалевность?
>бес палева
Блять, проиграл с опечатки, сотона.
Алсо, что еще можно предусмотреть для успешности back connect'а?
>вы не будете использовать какие-то известные трояны, ratы и прочую залупу ибо раз они побывали в общем пользовании, то в 99% случаев палятся антивирусами
У меня кейлоггер на основе лоулвл-хука и raw input палился уже после компиляции в релизе, так что остается только криптовать.
Алсо, читали, какая дыра была в К. Спермском, благодаря которой raw input кейлоггер перехватывал данные даже из защищенного окна с виртуальной клавиатурой?
Насчет крипторов тоже кстати искал тему. Ну изначально я смотрел в сторону самых свежих паблик ратов + криптора, но потом читал и читал форумы, еще раз читал и читал форумы, как итог понял следующее: паблик раты палятся, сильно и всеми палятся, дико ненадежные и отваливаются очень часто + вещают на сторону ибо постоянно с чем-то склеены, а паблик крипторы тоже палятся + еще и убивают стабы ратов часто так, что от него толку становится 0, он просто не установится.
Если есть какой-то отдельный тред для обсуждения подобной хуйни, я б перекатился, чтоб вам не засирать тут не по теме, но что-то при беглом взгляде не нашел ничего подходящего.
Все тот же кун с вопросом
>а паблик крипторы тоже палятся + еще и убивают стабы ратов часто так, что от него толку становится 0, он просто не установится
Ибо надо писать рантайм криптор, а не пидорасить экзешник.
Я правильно понял, что это криптор который будет вшит в тело программы и запускаться будет раньше основных функций программы, чтобы водить антивирусы за нос?
Распаковка программа в памяти и запуск тоже в памяти. Гугли RunPE, LoadPE, LoadDLL.
Бегло погуглил и понял, что я от этого вообще очень далек. Эх, хуй с ним, может удастся найти какого-нибудь человека, который за небольшое количество шекелей реализует мою затею.
За большое количество шекелей сделают. Алсо, нормальный ратник одному написать тяжело, а сделать народную малварь всем форумом не получится, ибо командная работа обязательно развалится. Так что давай сам учись.
Что я делаю не так, антош? Помоги :3
У тебя textBox2_p не определён в текущем контексте. Перед ним ещё что-то должно быть.
p.s. Во всех примерах пишут именно так и всё работает, а тут ...
Это зависит от того, что такое textBox2 и что из себя представляет sender. Там, наверно, должно быть что-нибудь вроде static_cast<MainWindow1>(sender)->textBox2 ... Неужели нигде нет подобного участка кода, чтобы посмотреть, как там обращаются с подобными объектами?
Ну вот есть подобный участок кода.
textBox2_p это элемент windows forms, строка в которую юзер вводит данные, ну и мой код, который вызывает ошибку, я прописываю в кнопку.
А что за _p вообще на конце? может, просто textBox2->Text ? Или this->textBox2->Text хули тут думать прыгать надо
То же самое...
>>900407
>_p
Это просто буква "р" на конце, не суть ведь.
Как ни странно, но ничего из этого не работает, всё та же ошибка. Может ещё где-нибудь копнуть?
Это clr-залупа с похожим синтаксисом для биндингов.
>Окамл-то может во всё
Да не может он в multicore, это самый недостаток ocaml
>Ты сейчас удивишься, но используется
Ты сейчас удивишь, но не используется нигде.
мимо джава-миддл
Для расширения кругозора лучше сразу Хачкель, после него расты, шарпы, свифты и современные кресты гораздо лучше пойдут.
stepik.org/course/Подготовительная-программа-по-программированию-на-СC++-144
stepik.org/course/Углубленное-программирование-на-CC%2B%2B-153
stepik.org/course/Многопоточное-программирование-на-СС%2B%2B-149/
Сигнал - это функция, но ее генерирует MOC. Сигналы ты можешь вызывать без ключевого слова emit, в коде оно не значит ничего, даже для MOC-препроцессора.
>ОшибкаC2440 инициализация: невозможно преобразовать "System::String ^" в "char"
Как преобразовать этот злоебучий String^ хоть во что-нибудь, хоть в std::string, хоть в char?
Пиздуй в дотнет-тред.
#include <msclr\marshal_cppstd.h>
System::String^ managed = "test";
std::string unmanaged = msclr::interop::marshal_as<std::string>(managed);
http://stackoverflow.com/questions/946813/c-cli-converting-from-systemstring-to-stdstring
Жрёшь гов^W C++/CLI
Живешь.
бля я раньше писал на крестах (до выхода c++ 11), потом несколько лет в него не лез, ЧТО СДЕЛАЛИ С ЯЗЫКОМ?? какие нахер decltype(auto)? constexpr? std::initializer_list? и еще куча говна, зачем они его так усложнили..
>ЧТО СДЕЛАЛИ С ЯЗЫКОМ
Попытались привести его к юзабельному виду. Не всегда удачно, но, в общем, стало заметно приятнее пользоваться языком. До этого он был вообще неюзабелен.
Ты не знаешь, что такое виджеты?
doc.qt.io
Шлее - полная хуета, как по мне. Там две трети книги можно выкинуть и все равно останется еще до кучи всякого говна.
Однако же, для самого начала, все же нужно разобраться, как работают сигналы-слоты (по-хорошему сразу красивый синтаксис, который пришел с c++ 11, а не то ебаное говно SIGNAL(signame) ... SLOT(slotname))
А так, проще всего будет научиться по примерам, если уже в крестах чего-нибудь да шаришь, да и документация у них небедная (не то, что у некоторых по доксигену - ни примеров, нихуя, своя терминология, заебешься порой).
Есть советы как написать передаваемую функцию внутри списка параметров функции принимающей?
не гуглится
>>написать передаваемую функцию внутри списка параметров функции принимающей
Зачем?
Ты хочешь передаваемую функцию написать внутри принимающей. Как функция "Запустится" если не примет функцию?
Computer = Computer
ФУНКЦИОНАЛЬЩИК сожрал бумажку и высрал работающий системный блок с ВОДЯНЫМ ОХЛАЖДЕНИЕМ и предустановленой WINDOWS 7. На компьютере уже был установлен АЛАН ВЭЙК и ХАСКЕЛЛ ПЛАТФОРМ. Корпус был красного цвета, с наклейкой ТУРБО на прозрачной боковой крышке. Затем ФУНКЦИОНАЛЬЩИК написал в 2 строчки старую версию G++:
Compiler :: [C++SourceCode] -> [ExecutableFile]
Compiler source =(Link . Compile) source
СТРАУСТРУП взял исходники своего дома и запустил компиляцию. Компилятор начал дристать СООБЩЕНИЯМИ ОБ ОШИБКАХ. СТРАУСТРУП попытался разобрать первую строчку, но увидев такое, дальше лезть не решился(таблица умножения и так вымотала его):
std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::less<std::basic_string<char, std::map<std::basic_string<std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>,std::allocator<char> > const, std::basic_string<char, std::char_traits<char>,std::allocator<char> > > > >char, std::char_traits<char>, std::allocator<char> >,std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>,std::allocator<char> > const, std::basic_string<char, std::char_traits<char>,std::allocator<char> > > > >std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>,std::allocator<char> > const, std::basic_string<char, std::char_traits<char>,std::allocator<char> > > > >
Высрав 10 000 СТРОК СООБЩЕНИЙ ОБ ОШИБКАХ, компилятор скончался от ЛЕНИВЫХ ВЫЧИСЛЕНИЙ ПРЯМОЙ КИШКИ и из монитора вылетела ЛЯМБДА. Придерживая круглые скобки квадратными скобками, ЛЯМБДА в ужасе съеблась под ближайший камень. Ей еще долго не захочется принимать и возвращать значения. Довольный СТРАУСТРУП плюнул в руку, чтобы наслюнявить хуй и уже решился залезать на мамочку, но передумал и решил вначале запостить эту историю на ДВАЧ.
Computer = Computer
ФУНКЦИОНАЛЬЩИК сожрал бумажку и высрал работающий системный блок с ВОДЯНЫМ ОХЛАЖДЕНИЕМ и предустановленой WINDOWS 7. На компьютере уже был установлен АЛАН ВЭЙК и ХАСКЕЛЛ ПЛАТФОРМ. Корпус был красного цвета, с наклейкой ТУРБО на прозрачной боковой крышке. Затем ФУНКЦИОНАЛЬЩИК написал в 2 строчки старую версию G++:
Compiler :: [C++SourceCode] -> [ExecutableFile]
Compiler source =(Link . Compile) source
СТРАУСТРУП взял исходники своего дома и запустил компиляцию. Компилятор начал дристать СООБЩЕНИЯМИ ОБ ОШИБКАХ. СТРАУСТРУП попытался разобрать первую строчку, но увидев такое, дальше лезть не решился(таблица умножения и так вымотала его):
std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::less<std::basic_string<char, std::map<std::basic_string<std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>,std::allocator<char> > const, std::basic_string<char, std::char_traits<char>,std::allocator<char> > > > >char, std::char_traits<char>, std::allocator<char> >,std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>,std::allocator<char> > const, std::basic_string<char, std::char_traits<char>,std::allocator<char> > > > >std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>,std::allocator<char> > const, std::basic_string<char, std::char_traits<char>,std::allocator<char> > > > >
Высрав 10 000 СТРОК СООБЩЕНИЙ ОБ ОШИБКАХ, компилятор скончался от ЛЕНИВЫХ ВЫЧИСЛЕНИЙ ПРЯМОЙ КИШКИ и из монитора вылетела ЛЯМБДА. Придерживая круглые скобки квадратными скобками, ЛЯМБДА в ужасе съеблась под ближайший камень. Ей еще долго не захочется принимать и возвращать значения. Довольный СТРАУСТРУП плюнул в руку, чтобы наслюнявить хуй и уже решился залезать на мамочку, но передумал и решил вначале запостить эту историю на ДВАЧ.
Это хуйтер опять свой хаскел сюда притащил
Не обращай на него внимания
Завидует, что ему лямбду не завезли
А зачем лямбды нужны? Неужто лень создать еще одну, нормальную функцию?
А потом еще 140 и потом сидеть разгребать кучу дерьма.
Читаешь самое начало Шлее. Первых три главы. Ну и все. Потом в документации читаешь про нужные классы и ебашишь.
Ага, в скопе текущей функции, захватив несколько переменных.
Попался кусок кода, а я в нем не понимаю, что делает конструкция такого вида:
(--top) = n;
n имеет это int
топ до этого объявлялся так:
int arr, top;
arr = new int[size];
top = arr + size;
штука с -- мне понятна, оставил ее на всякий случай, а вот что делает * слева от знака присваивания непонятно.
Забыл про макабу
фикс
(тут звездочка)(--top) = n;
n это int
топ до этого объявлялся так:
int (тут звездочка) arr, top;
arr = new int[size];
top = arr + size;
в крестах лямбды - синтаксический сахар
и если принять это и не бесится по этому поводу, то они катастрофически сокращают объем кода в нужных местах, упрощают его понимание (что и должен делать хороший syntax sugar)
Что за дичайший хайп вокруг хаскеля??
for (const auto& hui : pizda)
hui.second.second.fist.second()
чуть менее чуть полностью.
Вернись в похапе-тред.
Хороший код
> for (const auto& hui : pizda)
у меня встал
Какой смысл разыменовывать указатель слева от знака равенства? Мы получим доступ к объекту разве? А не к его копии? Ну вообще да это логично.
d.B::MethodB
Ньюфагов полон тред.
Например у каждого PictureBox выставляешь таг в зависимости от координат PictureBox. Пишешь обработчик события onClick который считывает таг PictureBox которое вызвало событие и записывает нужные данные. Вешает обработчик на все PictureBox.
У меня лётчик.жпг
for(int i...)
for(int j...)
{
pb[i,j] = gcnew System::Windows::Forms::PictureBox();
pb[i,j]->Tag = ???;
}
...
System::Void PictureBox_Click(System::Object^ sender, System::EventArgs^ e)
{
a = Arr[???][???];
}
Что должно быть вместо вопросительных знаков?
Нет.
Отнаследуйся от PictureBox и добавь две переменных для индексов.
>Из этого что будет правильно?
Нахуй иди. Надо было учиться весь семестр, а не последние 2 недели
Я знаю, что джава не тормозит, а у крестов есть преимущества?
А как же кроссплатформенность? там и там gcc, на виндовс запилить ехе на линукс свой формат
Два раза компилить надо
GCC то соберет, а вот как ты виндовский бинарник будешь на линупсе запускать без вина, вот это мне уже интересно. У них, мало того, что загрузчик в память различается, так еще и API совсем разные.
Ну так я и не собирался ехе под линукс, у линукс есть свой формат, не знаю какое расширение, ну ведь хелло форлд запустится, какие-то общие моменты можно найти
Под кроссплатформенностью подразумевается компиляция из одних исходников без их изменения.
>>903067
> хелло форлд запустится, какие-то общие моменты
"хелло форлд" это I/O - там просто так никаких общих моментов не может быть, разработчикам нужно договариваться. Хелло ворлд - технически достаточно сложная программа. У нее исходник простой, так как сложность скрыта библиотеками и системным апи.
Взгляни на программу для DOS и Linux на ассемблере (простейший hello world) и увидишь, что уже, как минимум вызываются программные прерывания с разными номерами, это простейшие примеры того, что бинарники не совместимы теперь уже совсем.
Пажаста
>ядро linux на Haskell переписывают
Никто ничего на него не переписывает.
На хачкеле свои ОСи и ядра имеются, но их никто не использует.
Да, это пиздец.
Вызывать методы у nullptr это UB. Но такую хуйню, как на твоих картинках, делают даже в казалось бы нормальных проектах типа Qt. интересно, что мартышки, хуесосящие STL и восхваляющие Qt на это скажут, лол. Но этому недолго осталось быть, недавно вышедшая версия g++-6 при constant propagation наконец-то полагает, что this != nullptr и, следовательно, код вида if (this == nullptr) { do some shit } просто вырезает, т.к. условие всегда ложно.
>Как цветовая схема называется?
Вручную настраивал.
>боги используют корутины, а не колбэки
Это клиентский код мобильныйх платформ.
Да, я рву шаблоны С++14 кроссплатформой под мобилы.
Конечно корутины и там можно сделать, но в крестах корутины в принципе ненужная вещь в себе.
первое: прямой доступ к памяти (тк нет виртуальной машины)
второе: предсказуемое время выполнения исполняемого кода (тк нет сборки мусора)
третье: механизм реализации шаблонов отличен от механизма ява дженериков, что в конечном итоге дает более быстрый код
Ну или так, отдельно в методе тоже выпиливает
лучше говорить что с++ код имеет предсказуемое время выполнения
в общем это справедливо будет для языков с прямым управлением выделения-освобождения памяти и языков с управлением памяти основанным на подсчете ссылок и неверно для языков где реализована сборка мусора
А так и должно быть, кресты скоро взъебут джаваскрипт изъебством синтаксиса, при сохранении перформанса, и это прекрасно.
>>903275
>И на каких платформах это работает?
Ну mobile-first крестоядро, Ios и Android, для взаимодействия с Java и Swift кодом - кодогенераторы интерфейсов.
Можно под windows-phone легко портировать, там кресты искаропки. А так как вообще взя бизнес логика в крестоядре, линкуемом с опенсорсными статик либами, то и под десктопы влегкую.
>>903276
Табы
>2к77
>даже хачкель уже компилируется род мобилы
>нет я буду отправлять и принимать запросы на крестах
Хачкель ненужное говно для матанонеудачников.
Ты не поверишь, но я как то компилил Окамль со всем рантаймом внутри в статик либу под Ios.
Но при этом я бы никогда не смог объяснить заказчику, да и себе, зачем это нужно на реальном проекте.
Да и на крестах можно такие боярские изъебства с дженериками мутить, что можно смотреть на хачкеледаунов свысока.
Вот тебе отрывок из constexpr string'ов, с возможностью constexpr хэшинга, которые я как то для фана писал.
В первый раз onError колбэкается при низкоуровневых ошибках, вроде отсутствия интернет-соединения, в onResponce делается парсинг джсона от сервера и там тот же самый onError колбэкается, если сервер в джсоне ответил ошибками валидации данных.
Потом вся эта хрень пропагируется из крестоядра через автогенерируемые интерфейсы (Errordescriptions - это typedef для автогенерируемого класса) в ui-код на Swift и Java 8, где уже и показывается пользователю. Отака хуйня.
Зачем constexpr в параметре шаблона? Что за constexpr inline? Почему касты C-style?
А теперь, друг мой дорогой, объясни нам, глупышкам, кому вообще сдалось хешировать строки на этапе компиляции, нахуя ждать по десять минут пока скомпилится твой высер и насколько это быстрее аналогичного кода на С длиннй в 20 строчек. а еще насколько читабельнее ошибки компиляции
>Зачем constexpr в параметре шаблона?
Нет такого
>Что за constexpr inline? Почему касты C-style?
Потому что constexpr прилепил к C-коду, оно конечно всегда inline, но компилится и похуй.
>>903329
>логин/пассворд поменяй на const ссылку
Оно по std::move в эту функцию приходит
>>903340
> нахуя ждать по десять минут пока скомпилится твой высер
Ох уж эти маразматичные одеревенелые борцуны с темплейтами. На Pentium 3 компилишь?
Принципиально на с++98 пишешь и всех вокруг заставляешь? А то ишь понакодили синктаксических сахаров, деды без auto писали, пусть и они страдают!
Из-за таких как ты кресты не станут great again.
Cпециально же отметил, что писал для фана. Вообще мне захотелость передавать constexpr стринги как параметр темплейта, а там и со string literal operator templates можно мутить всякое, вроде:
https://habrahabr.ru/post/243581/
Но, еще раз повторяю - оно для фана, и ,вообще, да, нахуй оно никому не сдалось, конечно.
>а еще насколько читабельнее ошибки компиляции
Статик ассерты повтыкал с нужным тебе сообщениями ошибок и теперь хоть обдрочись на читабельность ошибок
>нахуя ждать по десять минут пока скомпилится твой высер
Каково это кстати в 2017-м без STL жить из-за фобии долго компилить темплейты?
Туда ли ты вообще зашел, plain-С петушок?
>Зачем constexpr в параметре шаблона?
А все таки есть, лол. Ну компилится и похуй как я уже сказал.
Самого трупа страуса посмотри/почитай, он годно всех призывает перебороть академическую закостенелость в массовом кресто писательстве и войти в светлый мир современных крестов.
Он вообще советует начинать изучение с 11 и 14 стандартов, а прошлый забыть как страшный сон. Как бы только еще эту мысль самого создателя языка донести до лысеющих тимлидов под 40 и совсем уже лысых преподавателей в вузиках, считающих, что всякая auto и лямбда от лукавого. Вот сириусли, так же как церковь в свое время тормозила прогресс, сжигая ученых, так же и они своим превратились в неадекватных консерваторов, не принимающих новое только из-за своей закостенелости.
https://www.youtube.com/watch?v=1OEu9C51K2A
Five Popular Myths about C++
https://isocpp.org/blog/2014/12/myths-1
https://isocpp.org/blog/2014/12/myths-2
https://isocpp.org/blog/2014/12/myths-3
>>903418
Ты про что, про string literal operator?
Везде где есть с++14 компилится уже, правда у меня с определенного момента изъебства Clang начал компилится через раз, лол. Добавишь пробел - компилится, уберешь - segfault компилятора.
Я поэтому и написал свой класс constexpr стрингов с объявлением из макроса, тому шо через литеральный оператор падало.
А ну и конечно главный дар человечеству, подаренный 11-м стандартом - это модель памяти.
Читай про std::atomic и учись его применять.
Сначала прочитай главу 5 параллельного программирования на c++ в действии
https://rutracker.org/forum/viewtopic.php?t=4373610
Потом можешь читнуть цикл статей про lock-free структуры этого достойного человека
https://habrahabr.ru/post/197520/
Про передачу строк в качестве шаблонных параметров, или как оно там правильно называется (проебал номер предложения), в общем это:
>>template<typename char_t, char_t ... chars>
Кстати, про lock-free структуры. Этот тип упомнял про семантики acquire/release/consume/relaxed/seq.cst., однако нихуя не рассказал про семантики #LoadLoad, #LoadStore, #StoreLoad, #StoreStore, поэтому (во всяком случае для меня) начало статьи было нихуя не понятно. Вот тут про них подробнее:
http://preshing.com/20120913/acquire-and-release-semantics/
Пардонте, не та ссылка:
http://preshing.com/20120710/memory-barriers-are-like-source-control-operations/
Можн. Если не лезть внутрь - стоит конешно, как минимум доки научишься читать.
>>Зачем constexpr в параметре шаблона?
>А все таки есть, лол. Ну компилится
http://ideone.com/sb69ee
Ну, спасибо тогда.
Я линуксобог
Ну на первый я тоже замучился отвечать,а второй парень с потока ответил 'Ю', хотя я прям уверен, что "\022"
Ну с 'Ю' там сложный вопрос. Стандарт никак не определяет какой набор символов можно использовать. Возможно в С стандарте что-то определено, хотя бы минимум. То есть, является ли 'Ю' допустимой символьной константой будет зависеть от компилятора. Но. В задании вопрос про "недопустимую запись символьной константы". 'Ю' это допустимо записанная символьная константа, даже если она сама по себе не является допустимой для конкретного компилятора. А "\022" это именно недопустимая запись символьной константы
У меня на MVS2015u3 это какая-то вертикальная черта.
Ноя проверить не мог тк в аудитории делал и поэтому засомневался
Я точно знал что константа записывается в одинарных ковычках, но то ещё с потока парень давай писать, что не верный вариант 'Ю'
Но ответил в что строка не является константой
Бампну
Что бы такое придумать?
Монады vs что угодно.
>>903889
Дык, точки заставляют писать на 2 символа больше чем стрелочки (скобочки требуются при разыменовании), это однозначный вин стрелочек.
Ну я вот считаю что текстовые макросы лучше этого говна на тайпклассах. Давай, сучка, возрази мне. на самом деле я хочу быстрее заспамить этот тред и перекатить в новогодний но нг, лол
С мамкой своей так разговаривать будешь.
говно соси пидор
скачал себе книгу Страуструпа, установил CLion. Что я вижу? Он предлагает записывать хелловордл так:
#include "std_lib_facilities.h"
int main(){
cout<<"Hello, World!";
return 0;
}
ПОшёл на его сайт, скопировал оттуда код для этой библиотеки. В итоге ничерта не работает код, пишет ошибки в этом стд
Работает в CLion (они даже сами создают хелловорлд, когда новый проект делаешь):
#include <iostream>
int main(){
std::cout<<"Hello, World!";
return 0;
}
Стоит ли дальше по этой книге продолжать изучать? не будут ли такие расхождения нарастать в количестве? Что это вообще?
Страуструп пишет справочники, а не учебники, у него такой вот жутко нудный стиль. Найди себе в шапке что-то для нюфагов.
Так это и есть из шапки и для нюфагов
>ASLR
Не это не всё. Вот например если создать объект в одной программе. Ввести его адрес в другую и разыменовать. Естественно с самым послушным кастом превратить его в указатель нужного типа. Вторая программа не найдёт объект первой программы. Даже если адреса специально рандомизированы, то это должно было сработать. А раз не сработало, то эти адреса в виртуальной памяти. Тогда что с динамической линковкой? Там же происходит почти то же самое. Известны только относительные адреса и надо передать их другой программе.
http://eli.thegreenplace.net/2011/08/25/load-time-relocation-of-shared-libraries/
http://eli.thegreenplace.net/2011/11/03/position-independent-code-pic-in-shared-libraries
Это всё? А есть набор статей курс на эту тему где я по оглавлению буду выбирать какие темы я не знаю и что нужно прочитать?
Ну ок. Спасибо.
Вась, блядь, ну тебе же по-русски сказали сменить книжку.
И да - пока ты не вбросишь код самой ошибки никто тебе не скажет в чем дело, запомни это, так везде.
Зачем тебе std_lib_facilities.h?
Естественно, чтобы это начало собираться, тебе необходимо наличие этого файла в путях поиска или в текущей рабочей директори.
ЕМНИП, он в этот файл заносит включения необходимых заголовочных файлов из std, ничего более. Так что можешь выкидывать файл к ебени матери и заменить этот include непосредственными включениями стандартной библиотеки.
Как раз в твоем случае #include <iostream> вполне досаточно.
пиздец
>В итоге ничерта не работает код, пишет ошибки в этом стд
Которые ты, пидорас, нам не покажешь.
Тщщщ, а то еще выложит и помогать проидется же.
STL не настолько вымазана шаблонами (по крайней мере, те ее части, которые всеми используются.
вот один.
https://2ch.hk/pr/res/904165.html (М)
ПЕРЕКОТ
https://2ch.hk/pr/res/904165.html (М)
ПЕРЕКОТ
https://2ch.hk/pr/res/904165.html (М)
ПЕРЕКОТ
https://2ch.hk/pr/res/904165.html (М)
https://2ch.hk/pr/res/904165.html (М)
ПЕРЕКОТ
https://2ch.hk/pr/res/904165.html (М)
ПЕРЕКОТ
https://2ch.hk/pr/res/904165.html (М)
ПЕРЕКОТ
https://2ch.hk/pr/res/904165.html (М)
ПЕРЕКОТ
https://2ch.hk/pr/res/904165.html (М)
РАНО
https://2ch.hk/pr/res/904165.html (М)
ПЕРЕКОТ
https://2ch.hk/pr/res/904165.html (М)
ПЕРЕКОТ
https://2ch.hk/pr/res/904165.html (М)
ПЕРЕКОТ
https://2ch.hk/pr/res/904165.html (М)
ПЕРЕКОТ
https://2ch.hk/pr/res/904165.html (М)
Долбаёб
прописать пути до либ и инклудов и
#pragma comment(lib,"zalupa.lib")
с SDL в 15\17 студиях много проблем, придется гуглить про legacy_stdio_definitions
Давун
Это копия, сохраненная 1 февраля 2017 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.