Этого треда уже нет.
Это копия, сохраненная 4 августа 2015 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
776 Кб, 957x474
C++ тред #503274 В конец треда | Веб
Я увожу к ООП и исключениям,
Я увожу через шаблонов стон,
Я увожу к олдфажным наставлениям.

Был Симулой мой Зодчий вдохновлён:
Я высшей силой, полнотой всезнанья
И чистым байтоебством сотворён.

Древней меня лишь вечные созданья,
И с вечностью пребуду наравне.
Входящие, оставьте упованья.


Литература:

Для нюфань:
Три классических учебника для начинающих. Все примерно одинаковой годноты, читать имеет смысл только какой-нибудь один, который больше приглянется.
Герберт Шилдт - C++. Базовый курс - http://padabum.com/x.php?id=15127
Роберт Лафоре - Объектно-ориентированное программирование в C++ - http://padabum.net/x.php?id=16885
Стивен Прата - Язык программирования C++ - http://bukin.su/share/%D0%9A%D0%BD%D0%B8%D0%B3%D0%B8/cpp/Prata_C++.pdf

Учимся не писать говнокод:
Книги про основные подводные камни для тех, кто осилил предыдущий пункт. Следует пролистать все.
Скотт Мейерс - Эффективное использование C++ - http://www.e-reading.club/book.php?book=1002058
Скотт Мейерс - Наиболее эффективное использование C++ - http://www.proklondike.com/var/file/C/Scott_Meyers_-_More_Effective_CPP(RUS).rar
Герб Саттер и Андрей Александреску - Стандарты программирования на языке C++ - http://coollib.com/b/176648

Тонкости языка (для гурманов):
Ад и хардкор.
Бьерн Страуструп - Язык программирования C++ - http://www.proklondike.com/var/file/straustrup-yazyk-c-speciazdanie.zip
Андрей Александреску - Современное проектирование на C++ - http://www.proklondike.com/var/file/C/Andrei_Alexandrescu_-_Sovremennoe_Proectirovanier_CPP.rar
Герб Саттер - Решение сложных задач на C++ - http://www.studfiles.ru/dir/cat32/subj1104/file8061.html
Стандарт языка (на ангельском) - http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf

Отдельные аспекты:
Читать по необходимости.
Энтони Уильямс - Параллельное программирование на C++ в действии - http://www.proklondike.com/var/file/Paralelnie_programirovanie.zip
Николаи Джоссатис - C++. Стандартная библиотека - http://www.proklondike.com/var/file/C/Nicolai_Josuttis_-_STL(RUS).rar

Ссылки:

Годный блог, в котором все просто и понятно тян не нужны кококок борщ - http://alenacpp.blogspot.ru/
Краткие описания библиотечных функций и контейнеров - http://ru.cppreference.com/w/

Памятка:

Вопросу по синтаксису идут на хуй.
Лабы идут на хуй.
"Как мне сделать Х на чистых крестах без библиотек" идут на хуй.
Все идут на хуй.
Хейтер сосет члены на пару со своей мамашей.

Тег [code] работает через жабаскрипт-костыль: https://github.com/ololoepepe/MakabaCode

Предыдущий: >>489539
#2 #503279
Памятку надо было в самый верх.
#3 #503281
>>503278
Ага, особенно такие термины как добротность.
#4 #503286
>>503281
Ты программист, в тексте программерские термины, которые ты либо знаешь, либо легко вычленяешь глазами (потому что слышал) и резко гуглишь. Нет никаких проблем с терминами при чтении английского. Более того, проблема в терминах у меня исключительно и только в русскоязычных текстах. Русские тексты с переведённой терминологией меня скорее отвлекают, чем учат. Я просто не могу читать что-то по математике или программированию, если оно написано в рамках русской традиции наименования. Переведенные термины, как правило, по облику слов часто совершенно отличаются от того, что ты знаешь или хотя бы слышал. Легче, когда это простые кальки или транскрипции.
#5 #503288
>>503281
Добротность по-английски - Q. Если ты с этим ни разу не встречался, то ты в принципе не в теме этой области знаний.
#6 #503289
>>503286

> Переведенные термины, как правило, по облику слов часто совершенно отличаются от того, что ты знаешь или хотя бы слышал. Легче, когда это простые кальки или транскрипции.


Хуй знает что ты там читаешь.
Большинство современных текстов зачастую полны англицизмов, которые давно понятны.
#7 #503292
>>503289
На русском ничего не читаю практически. Ну открыл линк первый из шапки - именно то, о чем я говорил. Открыл незнакомый раздел, куча переводных терминов, которые я даже могу не узнать, когда начну читать английский референс - подумаю, что учу что-то другое. Наоборот тоже справедливо - читаешь такой, и понимаешь, что речь-то идёт о том, что ты уже знал, просто слова странные какие-то.
#8 #503314
>>503288
А ты не путаешь слово, с условным обозначением?
#9 #503319
>>503314
Нет. Это сокращение от quality, но так никто не говорит. https://en.wikipedia.org/wiki/Q_factor
#10 #503320
Programming
Principles and Practice Using C++

Бьярне написал. PDF полный есть у кого? В гуголе стастраничные обрезки.
#11 #503359
>>503320
Про рутракер не слышал?
#12 #503364
Пацаны, поясните за continue и break. Как я понял, на goto наложено табу структурным программированием. А что насчёт этих двух товарищей? Считается ли говнокодом их использование?
#13 #503370
>>503359
Почему-то не подумал о трекерах. На рутрекере второе издание только на русском, но зато с сорсами. На кикэссе же есть английская книга без сорцев. Скрафчу из этого одно целое.
#14 #503372
>>503364
У goto есть аналоги, у break/continue - нет.
#15 #503373
>>503364
Структурным программированием наложено табу и на break, и на continue, и на множественные return и на большие вложенности и на небо с Аллахом.

Но так как уже 2015 и те проблемы с которыми боролся дiйкстра более не актуальны, то можно иногда и юзать, когда действительно нельзя адекватно избежать. Но лучше конечно подумать.
#16 #503381
>>503364
Хоть твой вопрос относится к pure С, отвчеу. goto использовать можно, если понимаешь что делаешь. break\continue мощнейшие операторы, использую вобще везде. А вот for как раз считаю злом, использую только в виде for(;;) - так норм.
70 Кб, 658x836
#17 #503384
>>503381

>А вот for как раз считаю злом


>while (it != vect.end ()) {foo (*it); ++it;}

сажи Алёне sage сажи Алёне #18 #503387

>http://alenacpp.blogspot.ru/



Sooqa, я 500 сообщений ждал нового треда, посчитав зашкваром участвовать в предыдущем из-за ОП-пика. И вот опять, снова эта умелица с её void main() { exit(0); }

Убери это говно отсюда, блядь! Сейчас будешь это вылизывать, блядь!
sage #19 #503388
>>503387
%Она ОП этого треда, кто еще будет кидать ссылку на это говно%
#20 #503389
>>503387
Сегодня остаёмся без постов какого-то рандомного говнометателя?
#21 #503390
>>503381
>>503384
ЧЕМ БОЛЬШЕ Я ПРОГРАММИРУЮ ТЕМ ЧАЩЕ ИСПОЛЬЗУЮ БЕСКОНЕЧНЫЕ ЦИКЛЫ
ОСТАЛЬНЫЕ ВИДЫ ЦИКЛОВ СИТУАТИВНЫЕ И НЕ НУЖНЫ
#22 #503391
>>503384
Ты написал какой-то сокральный, код увидев который, я должен пасть ниц?
%Ну, а чем ты недоволен-то?%
#23 #503393
>>503391
Блин, проебал спойлер и запятую.
>>503390
Лол, ну вообще да, как-то так.
#24 #503395
>>503381
В PERL МОЖНО ПОМЕТИТЬ МЕТКОЙ БЛОК ИЛИ ЦИКЛ И ДЕЛАТЬ BREAK CONTINUE С ЕТОЙ МЕТКОЙ
#25 #503427
>>503395
Слушай, крупнобуквенный, а это ты программистишку форсишь, или вы на пару сычуете.
#26 #503429
>>503381
range-base for тоже нахуй?
#27 #503434
>>503429
Как хочешь. Если у тебя типовая задача - бегать по массиву, то ок. У меня обычно количество итераций в цикле предскзать нельзя, поэтому - бесконечный цикл, в нем куча логики и условий, какждое из которых может выполнить break\continue\return. Ну или ексепшн выкинуть можно. Да и вобще я к всяким нововведениям скептически отношусь. Чем меньше синтаксических нагромождений в языке, тем больше программмист уделяет внимния алгоритму, вместо поиска наиболее подходящего синтсахара.
sage #28 #503436
>>503434

>У меня обычно количество итераций в цикле предскзать нельзя


while () {} / do {} while ();

>поэтому - бесконечный цикл, в нем куча логики и условий, какждое из которых может выполнить break\continue\return


Откуда ж вы блядь такие берётесь. Цикл фор чем хорош, что у него есть явно выраженное пост-условие. Никто не обязывает тебя выражать его в виде инкремента счётчика, можешь хоть вызов функции туда повесить. Равно как и первое условие цикла for это что угодно, необязательно определение переменной.
#29 #503442
>>503434

>У меня обычно количество итераций в цикле предскзать нельзя, поэтому - бесконечный цикл, в нем куча логики и условий, какждое из которых может выполнить break\continue\return. Ну или ексепшн выкинуть можно.


У кого-то проблемы с дизайном и декомпозицией кода?
#30 #503461
>>503436
ВЫХОДНОЕ УСЛОВИЕ НЕУДОБНО РАСПОЛЖЕНА, ОБЫЧНО ТРЕБУЕТСЯ ВЫХОД ИЗ СЕРЕДИНЫ ЦИКЛА А НЕ ИЗ НАЧАЛА ИЛИ ИЗ КОНЦА
ПРИЧЕМ ПО МЕРЕ РАЗВИТЯ ПРОГРАММЫ ВСЕ МОЖЕТ ПОМЕНЯТСЯ И ПОТОМУ ЛУЧШЕ СРАЗУ НЕ ДУМАЯ НАЧАТЬ С БЕСКОНЕСНОГО ЦЫКЛА
#31 #503476
>>503436
Ты читать-то умеешь? Тебе достаточно одно условия на выход из цикла и одного постусловия? Можешь повесить целый вызов функции? Охуеть просто.

>У кого-то проблемы с дизайном и декомпозицией кода?


Пока не замечал. А что?
#32 #503496
>>503274
Анон, поясни за такой конструктор. Для чего вообще нужен.
#33 #503497
>>503274
class ClassWithConstructor {
public:
ClassWithConstructor(float parameter): object(parameter) {}
private:
AnotherClass object;
};
sage #34 #503522
>>503476
Ты рефакторить код умеешь? Очевидно, у тебя возможны две ситуации:

1) единоразово исполняемое в скоупе действие, основное условие (из многих), чётко отделяемое постусловие цикла -- цикл for () {}

2) основное условие (из многих) -- циклы while () {} / do {} while ();

Кто-то, кажется, не умеет разбивать код на функции и вообще формулировать свои мысли в коде.
#35 #503523
>>503496

> Для чего вообще нужен


Создавать/инициализировать объекты.
#36 #503537
>>503522

>основное условие


Оперируешь абстрактынми терминами, при этом не привел определнения основного условия и ряда объективных критериев его выбора. У нас за такое сразу нахуй посылают.

>чётко отделяемое постусловие цикла


Обычно это изменение счетчика\индеркса\итератора. Отлично подходит для перебора массивов и направленных структур данных. И блять, я писал об этом выше. И для этого конструкция for как раз и была введена. Также как сейчас добавляют всякие foreach-и и range-base for-ы и прочее.
2449 Кб, 257x300
#37 #503939
В тред призываются адепты ООП. Я хочу замутить такую функциональность:

class A
{
public:
A(const char& s);
A& operator+(A& b);
}

void f(A& x) { }

int main()
{
f("Hello" + "World");
}

проще говоря, как замутить автоматическое преобразование char& к A?
#38 #503942
>>503939
Причем тут ООП? Твоя крестопараша к нему никакого отношения не имеет.
мимо адепт ООП
#39 #503943
>>503939
Так как у тебя разве не работает?
#40 #503948
62 Кб, 800x600
#41 #503958
>>503942
По делу сказать видимо нечего
#42 #503973
>>503939
A() + "hello" + "world". Только так. Ну а далее или оператор приведения типа, или operator+ принимающий сишную строку. Вроде так. Но основное - это A() + "hello" + "world".
#43 #503978
>>503939
Нельзя так, если к классу А прибавлять строку то он автоматически преобразует строку в А, но сразу два слагаемых он не преjбразует. Алсо будет же память утекать.
#44 #503981
>>503978
В каком месте, там все на стеке.
sage #45 #503998
>>503939
[code lang="cpp"]A(const char* s)[/code]
#47 #504044
>>503958
Есть. Не страдай хуйней.
#48 #504045
>>503387
Лена хороша как материал для ньюфагов, потому что у нее дохуя маленьких статей, посвященных какой-то одной теме и запиленных на основе прочитанных ею же книг. Да, статьи, где она выражает свое имхо - говно. Да, не стоит воспринимать написанный ею код как что-то хорошее. Да, прочитать литературу из оппоста гораздо лучше и полезнее. Но в качестве сборника кратких выжимок по отдельным темам для чайников я ничего лучше Лены не видел. Такие дела.
слоуответ от опа
#49 #504049
>>503496
Когда ты создаешь переменную примитивного типа (например, int), ты пишешь int a = 1. Здесь никакого конструктора не нужно, просто создаешь и инициализируешь. В случае сложного класса может быть необходимо выполнить какие-то дополнительные действия (например, зарегистрировать созданный объект в списке всех объектов программы или типа того). Конструктор гарантированно вызывается при создании объекта класса и подходит для обеих целей - в его теле ты можешь проинициализировать члены-данные и выполнить вообще любой код, в частности, вызвать другие методы (например, передать в перечень всех объектов указатель на только что созданного себя) этого и других классов.
#50 #504068
>>504049

>ты можешь проинициализировать члены-данные и выполнить вообще любой код


А почему нельзя просто реализовать метод, который будет это все делать и вызвать его явным образом.
#51 #504078
>>504068
Чтобы не забыть его вызвать, например. Существует куча ситуаций, когда объект создается неявно (например, его возвращает функция), и ты легко можешь забыть, что после вызова такой функции нужно вызывать сразу и твой метод. Да и силы это экономит, вместо того, чтобы писать каждый раз, пишешь один раз. Ну а вообще твой вариант тоже используется, просто довольно редко. Например, некоторые контейнеры (типа std::future) требуют, чтобы объект, который они хранят, можно было создать без инициализации (т.е. чтобы у него был конструктор по умолчанию). И инициализируется все уже после конструирования, отдельным методом.
#52 #504079
Раньше писал на java, которая все прощала. Начал писать на крестах. И собственно вопрос: как перестать быдлокодить?
Второй вопрос: я путаюсь в большом количестве h и cpp файлов. Можно это как-то распихать по папкам? Наподобие пакетов в java. Пишу в VC
И третий вопрос: я пишу небольшую игульку всегда при обучении новому языку так делаю, и память вроде не течет... Использую Visual Leak Detector. Может ли быть так, что он мне пиздит и все на самом деле плохо?
31 Кб, 500x385
#53 #504086
>>504079

>писать на крестах


>перестать быдлокодить

#54 #504088
>>504078

>не забыть его вызвать


>силы это экономит


То есть, это не часть ООП идеологии\парадигмы, необходимая для каких-нибудь абстракций\инкапсуляций, а чтобы не забывать функцию дергать?
#55 #504089
>>504079
1. См. оппост:

>Учимся не писать говнокод


2. Разумеется. Распихиваешь файлы по папкам. Дальше в свойствах проекта: Свойства конфигурации - C/C++ - Дополнительные каталоги включаемых файлов. Добавляешь туда все папки с .h, а сами файлы включаешь в проект (слева - Заголовочные файлы - Добавить - Существующий элемент). .cpp достаточно просто добавить в проект (как заголовочные, но тыкать в фильтр "Файлы исходного кода"). Все, после этого можно твои заголовки подключать в угловых скобках, типа #include <TvoyaMamka.h>. Исходники сами скомпилируются и скомпонуются.
3. Если ты не используешь голые malloc/free, то точно нет. Если используешь, то хуй знает, но скорее всего тоже нет. Вообще, vld это классная вещь, я бы не волновался, что он может напиздеть. Если таки играет очко, используй RAII вместо прямого выделения памяти и волноваться точно будет не о чем.
#56 #504090
>>504088
Неет, это часть идеологии хотя бы потому, что у любого класса будет как минимум один конструктор если ты ничего не написал, то сгенерируется пустой конструктор по умолчанию. При создании объекта должен быть вызван какой-то конструктор, без исключений. Ты можешь написать TvoyaMamka::TvoyaMamka () = delete; и он не сгенерируется, но тогда ты не сможешь создать ни одного объекта класса. На самом деле только поехавший не стал бы использовать конструкторы, даже если бы они не были обязательными, потому что это адски удобно. Ты один раз объясняешь, что делать при создании объекта, и больше не забиваешь этим мозг, воспринимаешь его как обычный примитивный тип, если угодно. И пишешь в духе TvoyaMamka elena_mikhailovna = 90;, а что там у нее будет 90 - рост, вес или все сразу - тебя уже не должно ебать. Инкапсуляция свойств как она есть.
#57 #504092
>>504089
Спасибо, добра тебе
38 Кб, 225x225
#58 #504152
ИТТ.
#59 #504176
>>504090

>а что там у нее будет 90 - рост, вес или все сразу - тебя уже не должно ебать.


Но подожди, если я не буду знать, что означают параметры конструктора, откуда я пойму какими значениями их надо заполнять?
#60 #504194
>>504176
Из документации?
sage #61 #504228
>>503537

>Оперируешь абстрактынми терминами, при этом не привел определнения основного условия и ряда объективных критериев его выбора. У нас за такое сразу нахуй посылают.


Зависит от задачи, очевидно.

>Обычно это изменение счетчика\индеркса\итератора. Отлично подходит для перебора массивов и направленных структур данных.


Обычно да, но не только, блядь, НО НЕ ТОЛЬКО! У меня, например, постусловием идёт вывод информации в одной из задач.

И, кстати, читаемость кода только повысилась, он ужался и стал компактным.

>>504045
Да её даже в комментах собственные друзья хуесосят. На мой взгляд, стоит начинать с учебников. Не можешь осилить учебники и упражнения из них - сразу иди нахуй. А то начитаются Алёны и потом говнокод вопреки стандарту пишут.
#62 #504271
>>504194

>рост, вес или все сразу - тебя уже не должно ебать. Инкапсуляция свойств как она есть.


>>504194

>Из документации?


То есть ООП, для того, чтобы из исходников было непонятно что по чем, и поэтому надо читать документацию?
>>504228

>НО НЕ ТОЛЬКО! У меня, например, постусловием идёт вывод информации в одной из задач.


Ну вообще только. Из семантики же следует: (начальное значение;условие прерывания;изменение состояния).
sage #63 #504300
>>504271
Ты, вероятно, будешь удивлён, но даже при очень придирчивых настройках компилятора тебе даже предупреждения не выдаст. Всё компилируется и работает.
#64 #504313
>>504271

>То есть ООП, для того, чтобы из исходников было непонятно что по чем, и поэтому надо читать документацию?


Че ты все к ООП цепляешься? Ты спросил "А с какими это мне параметрами надо функцию вызвать?" я ответил.
Не нравится документация? Читай заголовок, типа
class TvoyaMamka(int SkolkoRazEeEbali) {...}
Обычно стараются сущностям давать имена, отражающие их суть.
#65 #504355
>>503387

>Местоположение\tРедмонд, Соединенные Штаты


А где ты находишься, мм?)) Может быть Silicon Valley?
#66 #504394
>>504228

>На мой взгляд, стоит начинать с учебников


Полностью согласен. Но давным давно, когда я учился на втором курсе ВМК и часто проебывал восхитительные семинары по крестам, а из книжек времени хватало только на Шилдта - вот тогда пару раз мне ее статьи сильно пригодились тому що экономили время. А потом уже я прочитал много умных книжек и ужаснулся, вновь наткнувшись на них. А ньюфагам должно быть полезно, если только они не будут как макаки все копировать.
#67 #504399
>>504355
А еще она занимается разработкой игор, имеет личинок и мужа с большим членом. Мечта местного контингента так жить просто, с учетом склонности к байтоебскому мазохизму.
#68 #504426
>>504399

>мужа с большим членом


У неё муж негр чтоли?
По блогу особо не копался.
По делу, воспитанные интеллектуало-няши уёбывают отсюда в далёкие края, и там обустраиваются. Я не верю, что на должность кококодера при зарплате 10к$ возьмут пизду ради пизды. На этом тему стоит закрыть, пока опять срачь не начался.
#69 #504467
Поясните, чем сишарп лучше крестов?
Я в замешательстве - начал читать Страуструпа про С++, а тут мне аноны подказывают что ++ говно и лучше учить шарп или яваскрипт...
#70 #504471
>>504089

>Вообще, vld это классная вещь, я бы не волновался


Ну ахуеть. Поставил я этот vld, прописал пути, заинклудил, сделал каноническую утечку

int *pointer = NULL;
for( int i = 0; i < 10; i++ ) {pointer = new int;}
delete [] pointer;

И в окне вывода нихуя. Думаю чет не работает, наверно. Прописал в конфиге у vld вывод в файл. Он мне туда вывел

>Visual Leak Detector Version 2.3 installed.


>Outputting the report to the debugger and to (путь к проекту)\memory_leak_report.txt


>No memory leaks detected.


>Visual Leak Detector is now exiting.



И где что не так?
#71 #504473
>>504467
Выбирай технологию блять исходя из того, какая тебе больше нравится, сколько вакансий в твоём городе по ней. Аноны тут тебе такого нарасказывают, окажется, что вообще нихуя учить не надо
#72 #504474
>>504473
Ну, я не совсем хотел язык для работы, сколько хотел делать игры, у меня есть куча кириллоидей.
Какой язык выбрать?
#73 #504479
>>504471
Ну хуй знает. Поставил я этот vld, прописал пути, заинклудил, сделал каноническую утечку
Visual Leak Detector detected 9 memory leaks (360 bytes).
Largest number used: 2160 bytes.
Total allocations: 2312 bytes.
Visual Leak Detector is now exiting.
#74 #504480
>>504474
Для игор? Что именно ты хочешь ПИСАТЬ? Программировать графон? Тогда кресты адназначна.
#75 #504481
>>504480
Геймплей, для начала я бы хотел написать простенькие игры.
#76 #504483
>>504480
Кресты для ГРАФОНА не нужны. То, для чего кресты применяются в игростроении, уже давно написано.
#77 #504484
>>504481
Если не собираешся делать шутаны, то бери юнити (а там шарп). С ним куча людей к успеху пришли.
#78 #504485
>>504484
Но я не хочу юзать чужие наработки, типа юнити, а хочу попробовать сам, что-нибудь типа ДФ сделать, но попроще.

>>504483
Какой язык лучше?
#79 #504489
>>504485
Ты не задумывался над тем что ЯП это тоже чужая наработка?
#80 #504492
>>504489
Ну не на ассемблере же писать...?
Да, и если углублятся, тогда уже лучше сделать мод на уже готовую игру - что меня не устраивает.
#81 #504493
>>504485

>Какой язык лучше?


Общелисп, конечно!
Не с того конца ты начинаешь, анон
#82 #504495
>>504492

>Ну не на ассемблере же писать...?


Тоже чужие наработки. Начни с проектирования собственного железа.
#83 #504496
>>504493
А с какого начать?
Да, и я читаю что в разные конторы, которые делают игры, требуются специалисты по С++.
#84 #504497
>>504496
Специалисты требуются по предметной области, а не цпп.
#85 #504498
>>504496
"Специалисты по c++" требуются только для поддержки легасиговна.
#86 #504499
>>504497
>>504498
Так с чего начать? Да, и я читаю что все дварф фортрессы написаны на С++ с использованием ОпенГЛ, даже дум.
#87 #504503
>>504492
Ну без использования сторонних библиотек/фреймворков ты нихуя не напишешь, даже для дварффортреса нужно подключать ncurses или как Тоади пердолится с опенгл. Проще всего начать с подбора фрейморка и использовать его язык. А у тебя какие-то странные предубеждения.
#88 #504504
>>504499
Что ты писать собрался-то?
#89 #504507
>>504503
Я в этом слабо разбираюсь и стою на перепутье, подскажи с чего начать?
Как я понял, OpenGL - это такая же библиотека, как и iostream, только более комплексная?

>>504504
Я думал сначала какую-нибудь змейку, тетрис, аркаду, а потом шутан уровня дума или стратегию.
#90 #504508
>>504499
Итак, ты можешь взять с++ и какую-нибудь библиотеку, например sfml, и начать велосипедить. Потому что ты не быдла, только школьники используют юнити!
А через некоторое время тебя это заебёт и ты станешь использовать юнити. сужу по своему опыту
#91 #504509
>>504508
В чем суть юнити?
Я всегда думал что это как редактор к варкрафту, только с намного большими возможностями, но всё равно недостаточными?
К тому же, я слышал что там можно писать только на С#.
#92 #504510
>>504509
Игровой движок. Что хочешь, то и сделаешь.
И на C# очень приятно и легко писать в отличие от крестов
#93 #504511
>>504499
1. Бери https://code.google.com/p/blackthorn-engine-3d/
2. разбирайся
3. допиливай
4. делай свою йобу
5. ???
6. ВЫГОДА
#94 #504512
>>504511
Как раз и проектировать научишься.
#95 #504513
>>504510
Но ведь всё пишут что игры и С++...

>>504511
Что за кошмар?
#96 #504514
>>504507
Я думаю тебе все равно что использовать. На простых вещах разницы нет. Хоть питон бери. Можешь плюсы попробывать, как анон выше писал ищи книгу "SFML Game Development.pdf" и ебашь по ней. Если обосрешся с подключением sfml ищи что-то проще. Но это уже наверное не плюсы, что-то не вспоминаю ниодной просто подключаемой библиотеки. Раньше тебе можно было бы graphics.h обойтись, но сейчас ее наверное хуй найдешь.
#97 #504516
>>504514

>sfml


Как я понял это что-то типа опенгл или директикс?
Почему сразу их не использовать, например?
#98 #504517
>>504509

>намного большими возможностями, но всё равно недостаточными


Сities: Skylines, Kerbal Space Program, Endless Legend, Infactory демиурги, лол, какой это год был-то? это недостаточные возможности?
#99 #504518
>>504513

>Но ведь всё пишут что игры и С++...


Так говорят только в /gd/. Много ты там игр змейки не в счет на крестах видел? То-то же.
>>504513

>Что за кошмар?


Оче годный, но не допиленный движок на лиспе. С нуля ты свой всё равно не напишешь, а вот допилить полуготовый может и получится.
#100 #504519
>>504516

> Почему сразу их не использовать, например?


По той же причине по которой не используют ассемблер. sfml обертка над opengl.
#101 #504520
>>504517
>>504518
Ладно, так что лучше: sfml и С++ или Unity и шарп?
Мне, просто, кажется что если я уйду в юнити, то стану анальным рабом одной программы, а если в 1 вариант, то смогу решить сам что делать. В общем, поясните, программисты!

>>504519
Т.е. изучив sfml, я смогу перейти на опенгл?
#102 #504521
>>504520

>Ладно, так что лучше


Лучше для чего, ёбанырот?
#103 #504523
>>504520
Судя по твоим вопросам, лучше тебе сначала набить программистские скилы
#104 #504524
>>504521
Чтобы сделать свой дум или chasm: rift?
#105 #504530
>>504524
Что именно ты хочешь запилить? Физику, рендерер, логику, етц?
#106 #504532
>>504520
Для шарпа есть еще monogame.
А для крестов не так уж и много игровых движков/библиотек с хорошей документацией. Так что выбор на самом деле невелик. А на OpenGL писать игры не самый лучший вариант, он тебе нужен, если только сам движкописательством хочешь заниматься или интересует программирование графики.
#107 #504534
>>504530
А самому нереально сделать такое?
Вообще, я хотел сделать игру с крутым ИИ, что-то похожее на ДФ.
#108 #504539
>>504534
И еще, я видел как-то скриншот - какие-то танки в псевдографике, там всё было выделено зелёными линиями, и полигонов было очень мало. Я думаю такую игру просто написать, вот это я бы еще хотел попробовать написать.
#109 #504543
>>504534
Понятно. Закатывай губу, бери любой язык высокоуровневый, не кресты. питон пойдет, бери любую библиотечку для работы с графикой и пили змейку, тетрис-хуетрис. Потом что-нибудь посложнее, ещё можешь поковырять готовые 2д-движки.
#110 #504544
>>504543
Почему так?
#111 #504545
>>504544
Потому, блять. Без элементарных навыков единственное, что у тебя получится, - участвовать в срачах на /gd
#112 #504547
>>504545
У меня есть навыки работы в пхп/скл (хтмл, цсс), немного яваскрипта (не особо в нём разбирался, но писал простенькие фишечки, типа открыть, закрыть комментарии етц.).
И вот уже где-то месяц я мечусь в поисках того что мне нужно - с чего начать.
Немного почитал про С++, потом мне сказали что это говно, все не любят этот язык и подвергают жесточайшей критике. Что число программистов и вакансий на этот язык сокращается.
Попробовал Питон, но пишут что он слишком простой, и сложные программы (типа игр) на нём не сделать.
В общем, сам не знаю что делать.
#113 #504555
>>504547

>В общем, сам не знаю что делать.


Что-что... вкатываться постепенно.
Питон отлично подойдет: быстрее освоишь, не будешь тратить время на малозначимые нюансы, коих в крестах слишком много, => быстрее прийдешь к результату.
#114 #504559
>>504555
Но на питоне же никто не пилит игры сложнее змейки?
У меня от твоего поста появилось чувство:

>быстрее прийдешь к результату


Будто под результатом ты имеешь ввиду что я на всё забью и дропну.
#115 #504566
Вообще, с C# и Юнити перекатиться на С++ будет легко?
#116 #504568
>>504547
Проблема не в том, что питон прост, проблема в скорости его работы, поэтому круизис на нем никто не пилит.
Ты хочешь работать в геймдеве или хочешь сделать игру?
Если первое, тогда кресты.
С++ используется в разработке "серьезных" игр из-за скорости и производительности. Но разработка на нем более медленная и сложная из-а особенностей языка. Для проекта в одиночку это весьма важный момент. Я сомневаюсь, что при разработке твоих игр ты столкнешься с проблемами, которые и вынуждают использовать с++
Майнкрафт вон на тормозной джаве написан и норм же.
Следует выбирать то, что удобно.
Можешь еще в сторону haxe поглядеть я на нем от скуки, используя движок haxeflixel платформер за два дня написал. Самое то для начинающего инди. Правда haxe малопопулярен и никому особенно-то не нужен.
#117 #504571
>>504495
Пусть начнет с создания собственной вселенной для начала.
#118 #504572
>>504559
Разберешься - сменишь инструмент на более подходящий, если в том будет необходимость.
А пока больше вероятность, что ты дропнешь где-то между хелловорлдом на плюсах и змейкой на них же.
#119 #504574
>>504568
>>504572
А что такого в плюсах, из-за чего:

>разработка на нем более медленная и сложная из-а особенностей языка


Просто, вроде ДФ написан на плюсах, а при крепости в 100+ бород тормозит на компе, который Крузис потянет.
#120 #504584
>>504568
Стоп, т.е. на питоне я смогу написать тоже самое что и на С++, только это просто будет жрать больше ресурсов?
#121 #504595
>>504584
И медленнее работать? Да. Но для простых игр это не сильно критично. Ну и сильно влияет вопрос кривости рук

>ДФ написан на плюсах, а при крепости в 100+ бород тормозит на компе, который Крузис потянет

#122 #504603
>>504595
А как же все эти библиотеки - опенглы и sfml? Они же, вроде, только для низкоуровневых языков программирования? Или как?
#123 #504606
>>504595
Ладно, тогда начну с завтра учить Питон, наверно.
Или лучше С++?
#124 #504616
>>504603
Не понял вопроса. Для питона есть свои библиотеки. Билдинги к сфмл есть к самым различным языкам, но либа эта крестовая и обычно на крестах под нее пишут.

>Или лучше С++


Не лучше и не хуже. Я как-то ради лулзов писал игру на go, хотя он нихуя для этого не предназначен.
Ты блять, какой-то неуверенный, но ладно, так и быть, я разрешаю тебе выбрать питон.
Выбери уже что-нибудь, главное не сиди и не теряй время.
#125 #504634
>>504606
Ты заебал уже, начни уже что-нибудь делать.
#126 #504635
есть кто на плюсах задачку за первый курс напишет?
#127 #504637
>>504635
ЗА ДЕНЬГИ
sage #128 #504641
>>504523
Зеленый ебальник ему набить надо, а не скиллы.
sage #129 #504682
>>504634
Да он с двача выйти не может.
#130 #504696
>>504616
Всё, тогда учу С++
#131 #504704
>>503476
пили сюда пример своего while-цикла, поржем
sage #132 #504715
>>503434
типиный байтодаун не осиливший даже СП
#133 #504722
>>504471
Значит, утечки нет. Он же диагностирует их по факту, а не гипотетически возможные по стандарту. Видимо, в твоем случае new выделит им место последовательно, а потом delete [] простит косяк и удалит все. Вот он и не кукарекает.
>>504479
Так может у тебя еще утечки есть. Сделай main с утечкой и ничего больше. Ну и энивей для меня, например, его результат бинарный - либо есть утечки, либо нет, а на количество насрать, энивей исправлять же.
#134 #504726
>>504566
Нет.
#135 #504727
>>504574
Потому что писал еблан. Дай школьнику кресты, он там тебе такого понапишет с параллельными массивами и утечками на каждом шаге. Язык это не панацея же, а необходимое условие.
#136 #504728
>>504635
Показывай давай.
#137 #504732
Посоветуйте что почитать если знаю кресты на уровне ньюфага, но устроился на работу на них быдлокодером.
#138 #504733
>>504471
У меня vld 2.4RC2, в твоем случае 9 утечек показывает, так что хуй знает.
#139 #504735
>>504732
Помимо книг из оппоста:
Р. Мартин нет, петушок, это другой Мартин - Идеальный программист.
Э. Хант, Д. Томас - Программист-прагматик.
1017 Кб, 1800x1013
#140 #504739
>>504735

>Мартин


And who are you,
The junior said,
That you call my code slow?
Only a slave
With a different pay -
That's all the truth I know.
#141 #504742
>>504739
Что за фильм? ГодныйЙ?
#142 #504750
>>504742
2ch.hk/got/
#143 #504763
Ну всё, еще почитал интернеты, и твёрдо решил учить С++.

>>504727
Так, Тоад далеко не школьник, он учёный и имеет какие-то там дипломы за знание математики.
#144 #504764
>>504750

>2ch.hk/got/


Это Игра престолов? Годный сериал?
12 Кб, 525x339
#145 #504782
>>504722
main с утечкой и был. Просто этот >>504471 что-то неправильно делает
#146 #504800
>>504763

>Так, Тоад далеко не школьник, он учёный и имеет какие-то там дипломы за знание математики.


Дык, учёный - не крестозадрот. Ему, как и любому другому нормальному человеку, ценящему своё время, легче написать простой и понятный код, чем ебаться с корявостью языка, переусложняя код на каждый чих. А то, что результат получился малоэффективный, - следствие низкоуровневости языка. На ассемблере получилось бы ещё более тормозное говно.
#147 #504804
>>504764
Ага.
#148 #504856
>>504715
Ты вообще не используешь continue/break? Почему?
#149 #504862
Аноны, есть такой пример:
[code]1. template<typename T> void ft(T);
2. template<> void ft<int>(int);
3. void ft(int);[/code]
1 — шаблон, 2 — явная специализация шаблона, 3 — просто функция.
К примеру, можно использовать 1 и 2 или 1 и 3, то есть выбор между явной специализацией шаблона и просто функцией. Какие преимущества есть у явной специализации перед простой функцией, помимо того, что шаблон создаётся только тогда, когда нужен, а функция — всегда?
#150 #504868
>>504856
В 90% случаев continue/break являются индикатором плохого дизайна. Понятное дело, что если ты там поддерживаешь легаси с функциями длинной по 500 строк, то уже похуй и можно использовать что угодно, как и в случае, если тебе надо быстро-быстро накидать чтобработало и больше никогда его не открывать. В остальных же случаях всякие goto/continue/break, множественные ретёрны, длинющие функции-листинги, глубокие уровни вложенности и т.д. - запах говнокода, который бездумно писали не проведя нормальную объектную/структурную декомпозицию. Есть конечно ебанутые алгоритмы, которые по-другому не запилишь но как правило такие места встречаются редко.

Нужно отдавать себе отчёт в том, что это грубый сontrol flow, который понижает читабельность кода и размывает его консистентность, и стараться пересмотреть написанное каждый раз когда возникает желание их использовать.
#151 #504880
>>504862
При явной специализации шаблон всегда создается.
#152 #504883
>>504868
Как тебе такой код?
http://pastebin.com/0y4x0yVA

Можно его переписать без continue?
#153 #504895
>>504880
А ты не путаешь явную специализацию с явным созданием экземпляра шаблона? Иначе я вообще не понимаю смысла в явной специализации. Или это я попутал…
>>504862

>Какие преимущества есть у явной специализации перед простой функцией, помимо того, что шаблон создаётся только тогда, когда нужен, а функция — всегда?


>шаблон создаётся


Правильнее, конечно, экземпляр шаблона.

В любом случае какие профиты-то?
#154 #504900
>>504883
На мой ньюфаньский взгляд читается очень легко. Хотя, наверно, можно вместо if (ProxyObject == null) return; и прочего писать что-то типа if (ProxyObject == null) {...}. То есть вкладывать всю остальную программу в них. Однако я не уверен, что это будет читабельнее.
25 Кб, 300x376
32 Кб, 341x500
17 Кб, 200x293
31 Кб, 341x500
#155 #504918
Прочитал первых 2 пика и начал практиковаться на кодфорсе. Теперь планирую прочитать что-то по стандартной библиотеке. Нашёл 2 последних пика. Что на эту тему лучше прочитать? Например то где пояснят отличи sort и qsort. Что посоветуете?
0 Кб, 383x167
#156 #504919
>>504900

>Однако я не уверен, что это будет читабельнее.


Их надо вынести в отдельную функцию. Появились же вложенные функции в плюсах.
#157 #504920
>>504918

>Например то где пояснят отличи sort и qsort. Что посоветуете?


"Многознанiе уму не научаетъ" (c)
Пиши код.
#158 #504921
>>504918

>2 последних пика


>по стандартной библиотеке


>Прата


Читать Прата после Страуструпа — это мощно. У него же идёт введение в язык с нуля. Загляни в оп-пост же.
#159 #504925
>>504868
Поясни тогда за случаи:
1. Метод получает параметр, который ему не нравится, и это видно сразу в начале метода например, nullptr. При этом ситуация недостаточно плоха, чтобы кинуть исключение, следует просто ничего не делать. Как по-твоему здесь сделать лучше, чем сразу return?
2.
[code = "cpp"]
Momma getYourMomma (size_t height, size_t weight)
{
\tstring request = "method=getMomma&height=" + std::to_string (height) + "&weight=" + std::to_string (weight);
\tfor (;;)
\t{
\t\tauto response = getResponse (request + "&nonce=" + std::to_string (getTime ()));
\t\tif (response.hui_sosi)
\t\t\tcontinue;
\t\treturn response;
\t}
}
[/code]

Как в этой ситуации быть с твоей точки зрения? Если невозвращение сервером корректной мамки - это обычное дело, то исключения все замедлят. Вычислить один раз строку запроса и крутить в цикле только сам запрос нельзя из-за параметра nonce. Использовать do-while плохо из-за тот, что while легко спутать с началом нового цикла. Возвращать некорректную мамку наружу и вызывать метод, пока он не отдаст нормальную - плохо, клиент метода не хочет ничего проверять, он хочет получить корректную мамашу. Делать для этого второй метод-прослойку - чрезмерное запутывание кода.
#160 #504926
>>504921

>Загляни в оп-пост же.


А что там интересного? Полторы книги и Прата неправильный наверно.
10 Кб, 184x200
#161 #504928
>>504925
Вот это обосрамс с разметкой.
#162 #504930
>>504868

>Нужно отдавать себе отчёт в том, что это грубый сontrol flow, который понижает читабельность кода и размывает его консистентность, и стараться пересмотреть написанное каждый раз когда возникает желание их использовать.


Очнитесь товарисч инженегр.
Двадцать лет мы двигаем «break» в конец цикла и «continue» в начало и у нас всё работает!
А если упоротые выскакивания из середины цикла понижают читабельность кода, то только у вас.
#163 #504931
>>504926

>Николаи Джоссатис - C++. Стандартная библиотека


Случай, братюнь, ты охуел штоле не читать оппост, блядь? Я старался, выбирал самые годные книги, собирал ссылки, чтобы анону искать не нужно было. Читай. Читай оппост до конца, блядь. Не хочу. Хочу жрать говно.
#164 #504933
>>504928
Очнитес и вы товарисч.
Зойчем ви смещиваити брейки с ретурнами? Тихийужос.
11 Кб, 251x251
#165 #504936
>>504930
[code lang="cpp"]
while (true)
{
\tcontinue;
\t//body
\tbreak;
}
[/code]

>всё работает


Я бы даже сказал всегда работает, если вы понимаете, о чем я.
#166 #504938
>>504931
Там написано для профессионалов.
#167 #504939
>>504933

>Как в этой ситуации быть с твоей точки зрения?

#168 #504941
>>504938
Я бы не назвал книгу Джоссатиса сложной. Она объемная просто, тому що STL большая. И в ней новейшие сведения вплоть до C++14, в отличие от.
#169 #504942
>>504862
Бампану вопросик.
58 Кб, 444x626
#170 #504943
>>504941

>И в ней новейшие сведения вплоть до C++14


Мы точно про одну книгу говорим? Она же 2004ого года.
#171 #504944
>>504943
Джоссатис, сука. Так и гугли. Не Джосьютис. Книга 2014 года, 40 МБ.
#172 #504945
>>504939

>Если невозвращение сервером корректной мамки - это обычное дело, то исключения все замедлят.


И всё же исключения. Но не

throw new Excpetion(ERR_OBOSRATUSHKI_OBTEKATUSHKI_SHOPESDEATH);

А вот так

throw AbstractSingletonProxyObosramsException;

Константу бросить, короче. Тогда тормозить не будет.
#173 #504946
>>504943
Потому что тебе надо второе издание.
http://rghost.ru/6LFrtnWVw
#174 #504947
>>504944
В ОП-посте эта. Может надо что-то поправить?
>>504946
Спасибо.
#175 #504950
>>504945
Будет существенно тормозить из-за невозможности объявить метод как noexcept и генерации лишнего кода обработчика.
#176 #504953
>>504947
На самом деле я хотел воткнуть новое издание в оппост, но не смог найти, где я его взял. А ргхост в шапке быстро протухнет.
#177 #504954
>>504950
Раз в полчаса будет существенно тормозить.
Байтоёб детектед.
#178 #504959
>>504953
Либо здесь либо здесь: http://progbook.ru/ http://www.proklondike.com/ больше негде.
#179 #504960
>>504954
Да ты охуел. Если у меня маленький метод, который в десять строчек скачивает мамку, я должен, блядь, генерить обработчик, который в три раза больше займет в VC, да еще и вызываться будет десять раз на один нормальный возврат мамки? Увольте-с, continue здесь меньшее зло.
15 Кб, 420x242
#180 #504973
>>504953
Вот залил. Храниться вечно. Но можно настроить и по другому если надо.
http://my-files.ru/cdm4zk
my-files.ru/Download/cdm4zk/%d0%94%d0%b6%d0%be%d1%81%d0%b0%d1%82%d1%82%d0%b8%d1%81%20%d0%9d.%d0%9c.%20-%20%d0%a1%d1%82%d0%b0%d0%bd%d0%b4%d0%b0%d1%80%d1%82%d0%bd%d0%b0%d1%8f%20%d0%b1%d0%b8%d0%b1%d0%bb%d0%b8%d0%be%d1%82%d0%b5%d0%ba%d0%b0%20C%20%20.%20%d0%a1%d0%bf%d1%80%d0%b0%d0%b2%d0%be%d1%87%d0%bd%d0%be%d0%b5%20%d1%80%d1%83%d0%ba%d0%be%d0%b2%d0%be%d0%b4%d1%81%d1%82%d0%b2%d0%be%20-%202014.djvu
http://my-files.ru/Download/cdm4zk/Джосаттис Н.М. - Стандартная библиотека C . Справочное руководство - 2014.djvu
#182 #504976
>>504925
Нечто вроде
[code = "rust"]
repeat(request).map(|req| get_responce(req + "&nonce=" + get_time().to_string())).find(|ref r| r.is_ok()).unwrap()
[/code]
у вас в плюсах не принято?

мимопроходил
#183 #504979
>>504862

>Какие преимущества есть у явной специализации перед простой функцией, помимо того, что шаблон создаётся только тогда, когда нужен, а функция — всегда?


Ещё одна попытка.
sage #184 #504984
>>504355
Какая нахуй разница, где я нахожусь, быдлан. Я void main() { exit(0); } не пишу.

>>504426

>возьмут пизду ради пизды


При чём тут её половая принадлежность?Я как-то акцентировал внимание на этом, быдло?
#185 #504990
Я новенький новичок ньюфаг, начал поглощать Лафоре, нужен компилятор С++. Пытался искать на сайте мелкомягких - у них всё через жопу. На трекерах нашел Visual Studio 2013 - это оно?
#186 #504992
>>504990
Нет. Тебе надо GCC, но лучше G++.
#187 #504994
>>504990
Гугл -> visual studio 2013 (или даже 2015) -> первая ссылка -> ??? -> profit
#188 #504995
>>504992
Спасибо.
#189 #504997
>>504995
Вот ссылка. Он тебе не будет насильно пихать гуй и виндосовскую библиотеку.
http://sourceforge.net/projects/codeblocks/files/Binaries/13.12/Windows/codeblocks-13.12mingw-setup-TDM-GCC-481.exe/download
#190 #505018
>>504976
У нас есть do {response=getResponse (request + "&nonce=" + std::to_string (getTime ()))} while (!response.hui_sosi), но это нечитаемо же. И масштабируется плохо.
#191 #505024
>>504990
Ну короче идешь в comp.lang.c++ и спрашиваешь, файлы тоже где-то там лежат. Компилятор-то Бьерн периодически выкладывает туда. В интернете я как-то видел архив с компилятором, но чего-то не могу найти.
9 Кб, 402x294
#192 #505292
>>504997
А что тут выбирать?
109 Кб, 1920x1162
#193 #505312
>>505292
Кто юзает кодблокс - поясните, как тут компилировать программы?
ВОт, копировал простейший код, а как его исполнить?
#195 #505361
>>505312

>build>build and run Или как-то так

#196 #505368
И кстати о C::B

>Code::Blocks 13.12 is here!


>Friday, 27 December 2013 20:00


Он таки умер?
sage #197 #505381
>>505353
>>505361
Хватит очевидную зелень кормить.
даже если не зелень, то пусть лучше нахуй пойдет, чем в нашу благородную профессию с такими вопросами
100 Кб, 1818x1029
97 Кб, 1805x1021
#198 #505386
>>505361
>>505353
Поясните, если нажимаю F9, то выскакивает такая табличка, при чем если я нажимаю ДА, она всё равно выскакивает, а если нажимаю НЕТ, то выскакивает окно на 2, т.е. без "Хелло Ворлд!".
#199 #505513
>>505386
даун блядь, нахуя ты лезешь в программирование?
Скачай Visual Studio
#200 #505553
Для передачи в функцию что лучше использовать - указатель или ссылку?
#201 #505558
>>505553
Значение.
#202 #505560
>>505553
Если не меняешь изнутри - константную ссылку, значение. Если меняешь - указатель. Так будет заметнее, что меняешь.
sage #203 #505578
>>505513
Да заебал, это ЗЕЛЕНЬ.
[НЕ КОРМИТЬ]
Так понятно?
#204 #505665
>>505560
Если не нужен null, то используй ссылки
#205 #505726
>>505513
VS слишком нагруженный, а кодблокс простой и есть портативная версия.

>>505578
Я не зелёный.
#206 #505746
>>505553
Если читаешь один раз -- точно константную ссылку.

Если меняешь один раз -- точно ссылку.
#207 #505762
>>505746
Мутабельная ссылка - это бомба, нужно использовать указатели, там сразу видно, что что-то не то.
#208 #506146
>>505762
Что сказать-то хотел? Вообще не использовать ссылки для изменения значений?
#209 #506161
>>506146
Он странный какой-то. Используй ссылки как можно чаще. А константные ещё чаще.
#210 #506206
>>506146
По возможности вообще не менять значения входных параметров, старайся делать функции как можно более чистыми.
#211 #506247
>>506206
- На работу! Чисти функцию, блядь! На! Чисти функцию!
- Чем, указателями, что ли, я буду?
- Чисти функцию! Да садись уже! Садись. Чисти!
- Блядь...
- Чтобы побочных эффектов не было!
- Как я буду на крестах-то чистить?
- Чисти!
- Покажи мне.
- Чисти!
<тимлид уходит>
- Епты. Блядь... Говно, блядь... Как в нем чистить, еб твою мать... Все ебанулись. Бля... Епта...
<пытается передать параметры через константные указатели, в это время тимлид возвращается>
- Чисти, чисти, сука. <достает хаскель> Вот как, блядь, нужно чистить,вот,быстро. Быстро. Раз-раз! Чисти, чисти, чисти-чис-чис-чиж-чж-чижь! Чисти! Говно! Чисти!
- Бля, у тебя получается классно, давай!
- Давай! Работай!
- Не буду я в этом писать, блядь! Не буду я!
- Пошел нахуй тогда отсюда, пошел! Блядь, ничего не можешь сделать, пошел нахуй, говно!
sage #212 #506462
Форс мондад и прочего говна уже давно протух, но всегда вылезет восторженный школоебок, только что прочитавший про хачкель на лурке, и начинает по-новой делать вбросы про чистоту, еще более жирные, чем его мать-проститутка. За это я и люблю /pr/, здесь никогда ничего не меняется.
#213 #506543
Братишки, а кто-нибудь знает, где можно спиздить относительно свежую PVS-Studio? Я нашел только оче старую версию, да и та криво крякнутая и не работает.
#214 #506546
>>506543
Тебе зачем? Пощупать хватит и триала. На постоянной основе пользуюйся clang-toolkit и cppcheck
#215 #506558
>>506546
Мне прельстива его заточенность под студию. Для cppcheck тоже вроде как есть плагин, но он, насколько я понял, нерабочий то ли он ничего не показывает, пока полностью не проверит весь проект, то ли багнутый, но когда тыкаешь запуск, то нихуя не выводится. А standalone-версия у него вроде нормальная, но ее же вечно забываешь запустить, а я хотет, чтобы сразу можно было чекать, при написании кода, а не переключаться хуй знает куда.
#216 #506575
>>506558
Добавь external tool, для папки и текущего файла. 3 минуты и у тебя рабочие тулы
#217 #506821
>>506206
А если у меня цель функции -- изменить значение по ссылке? Например, потому что я не хочу копировать параметр, чтобы потом изменить его один раз, чтобы потом вернуть его как результат функции, чтобы потом результат функции скопировался в ту переменную, которую я до этого передавал как входной параметр?

void функции -- это вообще лучшее, что придумал Иисус. Потому что они учат работать с ссылками, т.е. void функции -- это нечто, что надругается над данными извне.

А ещё функция может быть предназначена для того, чтобы изменить например два инта и один чар, и что теперь, по каждому чиху Struct лепить?
sage #218 #506822
>>506821
Блядь,отписался без сажи в Алёна-треде. Всё, я зашкварен.
#219 #506900
>>506821

>изменить например два инта и один чар, и что теперь, по каждому чиху Struct лепить?


Нет конечно, это же С++ тред. Ты должен спроектировать интерфейс, создать дочерний класс, с кучей конструкторов на все случаи жизни, перегруженными операторами, ну и конечно обернуть все в шаблоны. Только идиот будет от всего этого отказываться - упрощает кодирование, сокращает время разработки и пр. преимущества.
408 Кб, 472x630
#220 #506961
Почему в шапке нету Макконнела?
#221 #506964
>>506821
Изменяй по указателю. Тогда программист увидит foo(&x) и поймет, что x, скорее всего, меняется.

>А ещё функция может быть предназначена для того, чтобы изменить например два инта и один чар, и что теперь, по каждому чиху Struct лепить?


Для двух интов и чара ты можешь и std::tuple вернуть, тогда не придется заставлять пользователя создавать int tmp1 там, где ему не надо.
#222 #506967
>>506961
Потому что Макконнелл писал не про кресты. А книга хорошая у него.
#223 #506972
>>506821
1. Преимущественно следует делать через указатели, это верно.
2. Иногда использование ссылок предпочтительнее. В частности, когда в метод метод может не просто изменять аргумент, а портить его, перемещая. Если ты в любом случае готовишь временный prvalue-объект (напрямую или делаешь его с помощью std::move), то использование мутабельной rvalue reference в таком методе предпочтительнее использования указателя, ибо с указателями создание объекта для передачи придется отделять от взятия адреса для передачи в метод. Такой способ использования ссылок-параметров не даст выстрелить себе в ногу, потому что для вызова над ценным объектом энивей придется явно указать std::move для него.
3. Проблема преувеличена даже в случае обычной ссылки. Если метод возвращает void и имеет имя getTvoyaMamka, то вряд ли его используют в надежде, что он ничего не сделает с параметрами. Нужно думать головой, и все будет хорошо.
#224 #506977
>>504936
Рассмешил, пес.
#226 #506979
>>505386
Заебал, скачай Dev-c++ и не еби мозги. А по факту посмотри видео и с помощью блокнота и конскольки собери хоть одну программу.
#227 #507033
В массиве из 10 чисел найти минимальный элемент и поделить на него остальные элементы.
Ананасы, нид халп. Си++ или С
#228 #507065
>>507033
for (auto & current : array) current /= *std::min_element (std::begin (array), std::end (array));
#229 #507138
>>507065
Пасяб
#230 #507172
>>504782
>>504733
Ну ахуеть. Неправильно оказывается было ставить стабильную версию. Поставил RC все заработало.
#231 #507175
>>507172
Ну хуй знает. Я как раз сегодня попробовал в перенос проекта на RC, оказалось, что это предрелизное говно кишит багами, блядь. Не может распарсить инициализацию с шаблонами вне конструктора в духе члена TvoyaMamka mamka = Mamkogenerator <TvoyaMamka>::getObject ();. Какие-то охуительные утечки при создании std::thread, причем вообще на стеке. Обоих багов в 13 релизной не было, ну я и вернулся на нее, пока не поздно. Ждем RTM короче.
C++ боль. #232 #507302
cv::Mat AtWA(const cv::Mat& q, const cv::Mat& w) {
cv::Mat dst;
cv::dft(q, dst, cv::DFT_SCALE|cv::DFT_COMPLEX_OUTPUT);

Тип q - матрица (n,1) на. В dst лежат случайные цифры (23, миллион, -inf). Каждый раз разные. Явно в памяти какая-то лажа. Но как такое может быть?
#233 #507320
>>507302

>w


>cv


>AtWA


Ты символы экономишь, сука? Давай переделывай интерфейс, имей уважение к анону.
#234 #507348
>>507320
русские форумы.тхт
Это не я экономлю символы, а Chris Montgomery.
#235 #507382
>>507348
Ну, дружочек, расшифровывай тогда. Мне-то откуда знать, что там у тебя за cv::Mat.
#236 #507388
>>507382
Если ты не знаешь, что это, ты вряд ли ответишь на мой вопрос. Вообще это больше крик души.
#237 #507391
>>507388
Я с OpenCV знаком только на универском уровне, распознавание монеток и вот это все. Когда начинается байтоебство с возвратом говна через параметры и ФЛАГАМИ | НАСТРОЙКАМИ, мне сразу хочется взять и уебать.
#238 #507399
>>507388
Да тут не важно в общем-то, OpenCV это или нет. Явно у входного параметра какой-то кривой форма. Может его транспонировать, лол.
#239 #507408
>>507302
Там нет требования, чтобы q == dst?
#240 #507412
>>507408
Нету, но попробовал dst(q,q - не помогло.
#241 #507418
>>507412
Ты для начала тогда глянь, эта хуета в dst, она меняется после фурьеризации, или это просто мусор из-за того, что не инициализировано. Вообще, запусти отладку, залезь поглубже и смотри, что там происходит же.
#242 #507421
>>503274
Драсте, выучил я тут, короче, похапе и застрял на том, что для дальнейшей практики нужно покупать ебучий хост. К тому же в вакансиях на фрилансе требуется целая хуева туча каких-то фреймворков и MVC. Решил выучить язык с более доступной средой разработки - кресты. Вроде он котируется, как сложный и вакансии на нем должны быть. Поясните за фриланс на крестах желательно на елансе и прочих зарубежных фирмах. Какое должно быть портфолио и все такое?
#243 #507435
>>507421
Фриланс на крестах возможен, но порог вхождения очень высокий. Если ты не способен разобраться в проблемой бесплатного хостинга, то это явно не для тебя.
#244 #507441
>>507435
Я могу разобраться с проблемой бесплатного хостинга, но там нет табблицы ИННОБ дб, а платить штуку за три месяца на платном только чтобы ее выдрочить, я не собираюсь.
Расскажи подробнее про портфолио и хуйню, которую нужно наклепать, чтобы работать на крестах на фрилансе.
#245 #507442
>>507421
Вот тебе портфолио:
int i = 14;
i = ++i + ++i;
std::cout << i << std::endl;
Что выведется?
#246 #507444
>>507441
Ну я, например, пропатчил опенсорсный компилятор на гитхабе.
#247 #507458
>>507444
и все? и потом кинул ссылку на гитхаб и получил жаботу на фрилансе?
900 Кб, 600x251
#248 #507464
>>507442
числа от 0 до 23?
#249 #507469
Вопрос по указателям можно задать тут? Небольшая проблема с Ошибкой сегментацией.
#250 #507476
>>506967
>>506961
Что за книга?
Для нубов?
Читая Прата.
#251 #507477
>>507441
В чем проблема нахуярить на виртуалке?
#252 #507482
>>507476
Стив Макконнелл - Совершенный код. Там не про детали проектирования и тем более не про синтаксис крестов, а общие рекомендации, как улучшить качество кода, в применении к любому языку.
#253 #507484
>>507469
Используй container.at () вместо container [] жи.
#254 #507488
>>507458
Если для тебя это "и все", то да, и все. Но вообще это если у тебя вопрос стоит о "а фрилансе требуется целая хуева туча каких-то фреймворков и MVC", то это нихуя не и все. Ты документацию на llvm видел?
#255 #507489
>>507482
Для нуба сойдет или слишком непонятно?
#256 #507490
>>507489
Смысла нет. Тебе просто буду чужды те проблемы, что обсуждаются в книге.
#257 #507491
>>507490
Это тоже может быть полезно, зависит от склада мышления.
#258 #507493
можно спиздить компилятор с хабра и выдать за свой?
#259 #507495
>>507477
в том, что я настолько туп, что не могу и не хочу настраивать денвер или сам пхп.
#260 #507496
Господа, вопрос: если хочется делать именно игрушку, то что лучше выбрать -- привычный Qt или изучение sfml в процессе?
#261 #507497
>>507495
Тогда ты не сможешь в фриланс на крестах. Попробуй во фриланс на экселе/vb (я не смеюсь, за это тоже платят).
#262 #507505
invalid operands of types 'double' and 'double [(((size type)(((size type)N) + -1)) + 1)]' to binary 'operator*' может кто пояснить, в чём проблема?
#263 #507508
>>507497
Нет, я постоянно слышу про кресты или шарп. Так что я выбираю между ними.
#264 #507510
>>507508
Но как ты тогда решишь проблему того, что ты слишком тупой?
#265 #507511
>>507510
Но вижуал бейсик я себе уже установил, какие могут тут возникнуть заморочки со средой йопта?
#266 #507512
>>507511

>бейсик


студио т.е.
а вообще даже вакансий для крестовика не нашел в своем мухосранске. лел.
#267 #507513
>>507508
>>507510
Ну подскажите, в чём ошибка-то.
#268 #507514
Анон, как ты смотришь на книгу "Программирование. Принципы и практика использования C++ Бьерн Страуструп" в качестве первой книги для ньюфага^10?
#269 #507515
>>507511
Так проблемы не со средой, а с тобой будут. Видишь: ты уже этого не понял. Иди форму в экселе хуярь.
#270 #507521
>>507515
Он похож на зеленого.
#271 #507551
>>507442
Да все уже давно знают, что UB
#272 #507606
>>507505
Умножаешь дабл на массив, схуяле тут не должно быть проблемы?
#273 #507609
>>507514
Читай, если уверен, что мотивация не пропадет от изложения без щюток, примеров и упражнений.
#274 #507611
>>507551
Unspecified или undefined?
#275 #507669
>>507611
Undefined?
#276 #507696
>>507606
А у меня данные для расчёта этого числа, лежат в массиве. Что тогда делать?
#277 #507697
>>507696
http://pastebin.com/QvPxW1fm
выглядит так.
#278 #507702
Почему у меня ошибки сборки вылезают?
1>c:\users\администратор\desktop\visual studio 2013\projects\consoleapplication4\consoleapplication4\consoleapplication4.cpp(13): error C2065: cout: необъявленный идентификатор
1>c:\users\администратор\desktop\visual studio 2013\projects\consoleapplication4\consoleapplication4\consoleapplication4.cpp(14): error C2065: cout: необъявленный идентификатор
1>c:\users\администратор\desktop\visual studio 2013\projects\consoleapplication4\consoleapplication4\consoleapplication4.cpp(14): error C2065: endl: необъявленный идентификатор
========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
#279 #507713
>>507702
Идентификатор объяви
#280 #507719
>>507702
забыл или #include <iostream> или using namespace std;
#282 #507819
>>507697
Ты заебал во все треды срать своим говнокодом. Серьезно, твоя прога вызывает почти физически ощутимое отвращение.

Что значит "данные лежат в массиве"? Ты хочешь умножить вектор на константу? Тогда сделай проход по массиву и умножь на каждый элемент
#283 #507828
>>507752
https://www.reddit.com/r/programming/
Больше не приходи
#284 #507871
Анон, можно ли встроенным sort'ом отсортировать многомерный массив по одной из размерностей? (Объяснение моего реквеста уровня /b: есть int m[n][2], m[0] - порядковый номер человека, m[1] - длина его хуя, хочется чтобы после сортировки у человека номером m[n-1][0] был самый большой m[n-1][1](=пинус, кто совсем ДЦП)).
#285 #507876
>>507871

>m[0] - номер


>m[1] - палка


фикс
#286 #507877
>>507876
ДА ЕБАНЫЙ В РОТ ЭТОЙ РАЗМЕТКИ
#287 #507885
Скажи мне, двач. Есть у нас игровое поле в клеточку. Многослойное. Например, как в цивилизации: первый слой -- вода, второй -- травка и прочая территория, третий -- холмы и горы, четвертый -- дороги и реки, пятый -- леса, города и шахты. Собственно, вопрос: как лучше это все хранить в памяти?

С первым слоем все ясно: он по дефолту есть там, где нет ничего другого. Последние два тоже -- там нужно по-любому хранить все в отдельном векторе, потому что объектов относительно мало и они все сложные. А вот с промежуточными непонятка.

Самая банальная идея -- хранить просто матрицу X на Y. Но это, мягко говоря, растратно во многих случаях. Например, если у нас 70% воды, то 70% матрицы будут занимать пустые указатели. Таким образом, мы проебываемся и по скорости работы, и по памяти.

Помимо прочего, этот способ начинает косячить, когда поле условно бесконечно. Нужно либо строить более сложную систему с чанками, либо расширять и двигать матрицу, что пиздец всему.

В общем, расскажите, как это делают умные ребята?
#288 #507891
>>507885
В цивилизации разве многослойное поле? Там просто матрица с объектами.
Бесконечная карта - чанки (то есть те же матрицы), процеурная генерация и хранение диффов между сгенерированным и фактически. Майнкрафт, в общем.
#289 #507920
>>507871
Конечно. Сейчас набросаю, как примерно это выглядит.
#290 #507929
>>507885
Гугли способы представления разреженных массивов. Вкратце: при любом способе хранения, отличном от обычного, скорость доступа будет ухудшена, твоя задача - найти компромисс между скоростью и размером. Например, все ненулевые элементы хранятся в виде красно-черного дерева. Так как оно сбалансированное (оптимальное по глубине), ты будешь быстро (за O (h)) доставать и изменять элементы, удалять медленнее). С матрицей абсолютно то же самое будет, хранишь дерево для каждой строки, например.
#291 #507952
>>507302
В общем, это был баг в opencv.
sage #292 #507956
>>507514
На Страуструпа я вообще плохо смотрю.
#293 #507970
>>507920
[code lang="cpp"]
const size_t n = 100;
\tconst size_t k = 2;
\tconst size_t p = 1; //По какой размерности сортируем
\tint m [n][k];

\tint begin = reinterpret_cast <int > (m);
\tstd::stable_sort (begin, begin + n k, [begin, k, p] (const int & first, const int & second)
\t{
\t\treturn ((0 == (&second - &first) % k) && (
(&first - (&first - begin) % k + p) < *(&second - (&second - begin) % k + p)));
\t});
[/code]
#294 #507988
>>507956
Почему?
#295 #507990
В code::blocks можно поменять название переменной сразу везде, по всей программе?
#296 #507994
>>507990
Контекстное меню - code refactoring - rename symbols не работает?
#297 #508523
А можете пояснить за вектора?
Где-то видел, что у них быстрая вставка только в конец массива. Это так? Насколько будут медленнее, например, .insert(a.begin(), 1234) или .insert(a.begin() + 10, 1234) по сравнению с простым .insert(a.end(), 1234)?
#298 #508545
>>508523
От размера вектора зависит. Относительно того что всатвка вначало медленее вставки в конец это тестить надо. Вставка в середину однозначно медленее, остальное от реализации зависит. К примеру у яблочного NSArray вродебы хитрожопая реализация с быстрой вставкой и в конец и в начало. В середину естественно медленно - масив же сдвигать надо, от этого никуда не денешся. Быстрая вставка в связные списки - но у них свои недостатки.
69 Кб, 450x524
#299 #508579
Антуан, я хочу в определении класса создать указатель на функцию, который в процессе работы может указывать на разные функции из этого-же класса. Код ниже компилируется но не работает. Что я делаю не так, и реально ли это сделать?

template <typename T>
class List
{
public:
\tList()
\t{
\t\tT (List<T>::push)() = &List<T>::push_first;
\t}

\tT (push)();
\tT push_first() {}
\tT
push_other() {}
};
#300 #508580
>>508579
Прошу прощения за \t
#301 #508584
>>508579

> T (List<T>::push)() = &List<T>::push_first;


И что ты этим пытался добиться?
#302 #508586
>>508579
Патамушто методы должны быть статическими
#303 #508591
>>508586
То есть это нельзя сделать в принципе?
#304 #508592
>>508584
Ты вопрос читал?
#305 #508593
>>508591
Именно.
#306 #508601
>>508579
Если по-простому, то объявляешь указатель как T (List <T>::*ptr) () = &push_first;
Но нормальные посоны давно юзают std::function, в твоем случае это будет выглядеть как std::function <T ()> push { std::bind (&push_first, this) }; Тогда решается проблема с тем, от имени какого объекта ее вызывать.
#307 #508616
Программисты, как сделать десктопное приложение в стиле metro, например как visual studio, плеер мередиан, офис и т.д. Все что нашел в интернете это как создать metro приложения, а интересует имеено десктоп. Неужели без C# никак
#308 #508619
>>508616

> metro


> без C#


А как ты себе представляешь шарпоговно без собственно шарпа?
Можешь попробовать Qt, виджеты умеют в нативные элементы на всех 3-х основных платформах. А на Qml можешь вообще что угодно нарисовать.
#309 #508620
>>508619
Ну хуй знает как, может уже библиотеки какие-нибудь завезли. Самому winapi дрочить не хочется, похоже придется на qt все делать
#310 #508622
>>508616
В VS2015 вроде какую-то библиотеку для крестов завезли.
#311 #508624
>>508622
Узнать бы какую и доки к ней
#313 #508652
>>508634
Кажется это то что нужно, спасибо
#314 #508692
Анон, ответь на нубский вопрос, я пытаюсь разбираться с стл, но не понимаю некоторых вещей, вот к примеру начало файла list.h:

template<class _Mylist,
class _Base = _Iterator_base0>
class _List_unchecked_const_iterator
: public _Iterator012<bidirectional_iterator_tag,
typename _Mylist::value_type,
typename _Mylist::difference_type,
typename _Mylist::const_pointer,
typename _Mylist::const_reference,
_Base>

Что такое _Mylist::value_type, что передается в этот шаблон?
#315 #508749
Поясните, а Прата из шапки нормальный автор и его книга?
Я, вот, читаю, но там используется
cin.get();
cin.get();
return 0;
Заместо getch_
Это правильно или книга уже устарела?
#316 #508792
>>508749
оба два варианта устарели
#317 #508804
У меня выдает ошибку при вызове функции с двумерным массивом. Что с этим делать?
#318 #508805
>>508804
Игнорировать.
#319 #508806
>>508804
Осваивать метлу, программирование тебе не дано
#320 #508808
>>508806
Спасибо.
#321 #508809
>>508804
Какая ошибка? Как вызываешь? В общем код в студию, что ж вы такие непонятливые
#322 #508811
>>508809
К сожалению сейчас не могу доставить код. Да похуй уже. Лучше метлу буду осваивать.
3161 Кб, 3888x2592
7 Кб, 134x238
#323 #508833
То самое чувство когда ты без работы а ты крестопидор.
#324 #508837
>>508833
Ты это я, дрочил 5 лет в универе C/C++, в то время когда одногрупники занимались вебом. Теперь у меня нет постоянной работы, а не постоянная это курсачи и лабы
#325 #508862
>>508692
Имя типа же. Там в описании шаблонного класса list что-то вроде typedef T value_type. Это сделано, чтобы ты мог узнать тип значения после инстанцирования шаблона, написав list <TvoyaMamka>::value_type. Широко использовалось, когда auto не было, и по-другому тип значения, которое ты хочешь создать, часто было не узнать. Еще применяется в метапрограммировании, например, есть куча служебных структур-шаблонов, в которых ничего нет кроме такого typedef. И ты можешь писать std::is_same <MoyaMamka, TvoyaMamka>::value, и типы сравнятся еще на этапе компиляции, а не с лишними тормозами как при использовании typeid.
#326 #508865
>>508749
Поясняю. Автор нормальный, нужно читать самое последнее издание (оно емнип второй половины нулевых). Книги старые, в первых изданиях и не такое встретишь. Далее. Имена с "_" в библиотеках обычно служебные, code style предписывают обычно именовать так приватные члены (с "_" на конце). То, что они доступны - ничего не значит, часто в стандартах ничего про них нет, т.е. интерфейс не гарантируется, и в любой момент разработчик компилятора может что-то поменять внутри так, чтобы не отвалились только нормальные имена. Таким образом, getch_ использовать нежелательно, он просто не предназначен для использования тобой. istream::get () - это ОФФИЦИАЛЬНЫЙ ТМ метод, его использовать можно, но уместность его ограничена. Видишь ли, считывание по одному символу считается дурным тоном из-за того, что тогда резко усложняется возможность автоматической оптимизации ввода автором библиотеки. Ввод работает далеко не последовательно, по факту символы считываются пачками, а ты использованием get() для считывания из файла вставляешь им палки в колеса. Считывание больших кусков по cin >> TvoyaMamka поэтому гораздо предпочтительнее циклов с istream::get (). Но если ты считываешь с экрана именно по одному символу например, у тебя ебанутый текстовый интерфейс (Y/N)?, то можешь делать get (). Хотя все привыкли к ">>" и это все же считается лучшим способом даже для считывания символов по одному, ибо работа не замедляется, писать меньше, а именование универсальное для всех классов operator>> () обычно занимается вводом, а метод можно назвать get (), или getChar (), или zabirayuSimvol (), такое разнообразие отвлекает. И последнее. Использование get () для того, чтобы программа не закрывалась после завершения - это худшее, что ты только вообще мог сделать. Одновременно показывается и то, что ты запускаешь ее мышкой при запуске из консоли весь вывод сохранится и без get (), разумеется, и то, что ты необучаемый и не можешь нагуглить, как узнать о нажатии клавиши без считывания самого символа.
#326 #508865
>>508749
Поясняю. Автор нормальный, нужно читать самое последнее издание (оно емнип второй половины нулевых). Книги старые, в первых изданиях и не такое встретишь. Далее. Имена с "_" в библиотеках обычно служебные, code style предписывают обычно именовать так приватные члены (с "_" на конце). То, что они доступны - ничего не значит, часто в стандартах ничего про них нет, т.е. интерфейс не гарантируется, и в любой момент разработчик компилятора может что-то поменять внутри так, чтобы не отвалились только нормальные имена. Таким образом, getch_ использовать нежелательно, он просто не предназначен для использования тобой. istream::get () - это ОФФИЦИАЛЬНЫЙ ТМ метод, его использовать можно, но уместность его ограничена. Видишь ли, считывание по одному символу считается дурным тоном из-за того, что тогда резко усложняется возможность автоматической оптимизации ввода автором библиотеки. Ввод работает далеко не последовательно, по факту символы считываются пачками, а ты использованием get() для считывания из файла вставляешь им палки в колеса. Считывание больших кусков по cin >> TvoyaMamka поэтому гораздо предпочтительнее циклов с istream::get (). Но если ты считываешь с экрана именно по одному символу например, у тебя ебанутый текстовый интерфейс (Y/N)?, то можешь делать get (). Хотя все привыкли к ">>" и это все же считается лучшим способом даже для считывания символов по одному, ибо работа не замедляется, писать меньше, а именование универсальное для всех классов operator>> () обычно занимается вводом, а метод можно назвать get (), или getChar (), или zabirayuSimvol (), такое разнообразие отвлекает. И последнее. Использование get () для того, чтобы программа не закрывалась после завершения - это худшее, что ты только вообще мог сделать. Одновременно показывается и то, что ты запускаешь ее мышкой при запуске из консоли весь вывод сохранится и без get (), разумеется, и то, что ты необучаемый и не можешь нагуглить, как узнать о нажатии клавиши без считывания самого символа.
#327 #508877
>>508865
>>508792
Книга из шапки 2003 года, вроде.
Т.е. лучше читнуть другую книгу? Тогда какую? В шапке для нюфань все примерно такого года.
114 Кб, 688x366
#329 #508961
>>508956
В ней тоже используется эта конструкция. Но ладно, раз 2012 год, вроде еще актуально.
Спасибо.
#330 #508964
>>508961
Я в сперме system("pause") использовал, пока shift-f5 не открыл
#331 #508981
>>508961
Ну так это костыль для самых маленьких же. Тут либо ты используешь нормальную IDE Visual Studio, либо для своих программ делаешь ожидание нажатия клавиши как полагается, без костылей. Но проблема в том, что Прата пишет книгу для нубов, и оба решения неуместны - попросишь нюфага качать IDE или начнешь объяснять на две страницы, как сделать нормально, а он возьмет и ливнет. Поэтому дается быстрое решение для тех, кто не хочет ничего решать. Ты еще не видел мой учебник по ассемблеру, там вообще давалась распечатка библиотеки ввода-вывода, потому что про это объясняется только в конце книги, а работать с примерами как-то надо, лол.
63 Кб, 1914x1135
#332 #508994
>>508981

>Visual Studio


А кодблокс нормальный? Мне понравилось что он не такой громоздкий и не устанавливает гиг дополнительной хуйни.
Даже можно портативным сделать.
#333 #509003
>>508994
Нормальный. Студия для С++ имеет смысл только в связке с visual assist x.
sage #334 #509017
>>508964
ctrl+F5 , ты хотел сказать? Но это запуск без дебага.
#335 #509020
>>509017
Сажу сними, заебал.
#336 #509022
>>509003
В пятнадцатой студии уже из коробки есть все для рефакторинга.
#337 #509027
>>509022
Видишь, какой я немодный теперь. emacs+cmake+qtcreator для gui-дебага - идеальная связка для меня.
#338 #509028
>>508994
Ну он годен под стандартные задачи, но если честно, студия настолько оставляет позади по удобству все остальные среды, что я готов ей прощать косяки и посерьезнее гига дополнительной хуйни. Визуальный отладчик с деревом потоков и IntelliSense просто божественны, базарю еще захочешь.
#339 #509048
>>509027

> emacs+cmake+qtcreator


Эталонный говноед.
#340 #509051
>>509048
Что тебе не нравится?
#341 #509091
>>509051
Например, текстовый редактор для программирования и кутэ?
#342 #509094
>>509091
Я вообще кьютом не пользуюсь. QtCreator я использую только как фронтэнд к gdb - он хорошо работает с cmake-проектами, нативный, а не на java писан.
А "текстовый редактор для программирования" - а что еще можно использовать, не IDE же.
#343 #509139
>>508634
Что-то не работает, или у меня руки из жопы, или надо ждать win 10
65 Кб, 451x758
#344 #509174
Учу кресты. Не до конца понимаю что такое динамическая, стековая, и статическая память. И путаю ссылки и указатели. Что почитать? Может есть хорошие книги в которых этому глава посвящена чтобы не читать целиком? Или статьи? Гугл показал этот http://www.intuit.ru/studies/courses/2193/67/info курс. Вроде не большой, но делали его люди занимающееся рашкообразованием. Может стоит пройти? Там в литературе к курсу смотреть пик вроде ничего конкретно по этой теме нет, но может узнаете хорошие книги в которых затрагивается эта тема и что-то посоветуете.
#345 #509192
Есть ли улучшения в скорости если использовать работу с файлами в стиле С, а не С++? Можно ли это сочетать с cin и cout?
#346 #509197
>>509192
Если и есть то совсем не существенные, используй современные методы
#347 #509201
>>509197
Есть что по этому поводу почитать? Видел статью на хабре, но там только про ввод/вывод на экран. Если не средствами программ, а средствами системы перенаправить вывод в файл, то результат не измениться?
#348 #509205
>>509192
В llvm он вообще запрещен:
#include <iostream> is Forbidden

The use of #include <iostream> in library files is hereby forbidden, because many common implementations transparently inject a static constructor into every translation unit that includes it.

Note that using the other stream headers (<sstream> for example) is not problematic in this regard — just <iostream>. However, raw_ostream provides various APIs that are better performing for almost every use than std::ostream style APIs.

Note
New code should always use raw_ostream for writing, or the llvm::MemoryBuffer API for reading files.
#349 #509206
>>509201
Просто найди исходники реализации и посмотри, возможно внутри все сделано на старых сишных методах
#350 #509208
>>509201

> Видел статью на хабре


Ты про эту http://habrahabr.ru/post/246257/
#351 #509210
>>509208
Да. Только они там с файлами работают средствами системы, а нужно средствами программы.
>>509206
Не достаточно хорошо в этом разбираюсь.
>>509205
Нужен GCC без оптимизации и дополнительных библиотек, а там это можно.

Судя по советам скорее всего буду использовать стандартные потоки.
#352 #509213
>>509210
Ну смотри потоки в C++ типобезопасны, все проверяют за тебя. Быстрее конечно будут работать си методы, т.к. они всю проверку скинули на плечи разработчика. И вот если ты сам будешь делать сложные проверки, то можешь навелосипедить и будет даже хуже.
#353 #509214
>>509213

>типобезопасны


Стоп. Какой с этого профит? В задачах все входные данные корректны. Это значит что он лишний раз проверку делает? Что-то такое подозревал, но разве это единственное отличие? И что можно навелосипедить? Прочитать string как int?
#354 #509221
>>509214
Профит такой, что если ты записываешь сложные структуры, то создаются виртуальные функции, и тебе не надо самому проверять формат ввода + следит за утечкой памяти. Если у тебя все однородно используй из си
#355 #509223
>>509221
Всё понял. Спасибо.
#356 #509234
Хз где спросить, спрошу тут. Есть кто на Qt под виндой прогает? Есть ли способы автоматического обновления Qt? А то надоело все ручками делать. Только не говорите иди на линукс
#357 #509244
Привет, программач!

Скажи, как можно реализовать для QGraphicsView (или QGraphicsScene) затемнение по маске? Хочется сделать смену дня и ночи в игруле -- думаю, как бы это реализовать.

Естественно, нужно учитывать и источники освещения, поэтому нужна именно маска, общий способ менять яркость сразу у всей сцены тоже пригодится.
#358 #509259
>>509234
Qt maintaining tool?
712 Кб, 1205x1200
#359 #509310
>>503274
Как именно работает ввод с потоков? Скажем, программа получает на вход мегабайт текста. Где этот текст храниться? Могу ли я два раза прочитать одни и те же данные с какого нибудь cin?
Простите если нескладно.
#360 #509316
>>509310
Если сделать функцию int main (int argc, char * argv[]) то бегать по аргументам можно сколько угодно.
#361 #509319
>>509174
Тебе нужен какой-то курс по архитектуре ЭВМ в отрыве от крестов. Обычно же учебная программа в вузах строится так: сначала изучают алгоритмы при помощи высокоуровневого языка у нас паскаль, у них питон, в котором не обязательно вообще знать что-то про память и указатели, не говоря уже про статическую/динамическую/автоматическую память. Потом изучают голую архитектуру ЭВМ и разбирают по частям простейшие программы на ассемблере. И именно в этот момент ты узнаешь про адреса, сегменты данных/команд/кучи, как работает стек, как работает вызов функции и вот это все. Затем изучают, как работает ОС и как она взаимодействует с программами. Здесь про процессы, распределение динамической памяти, разделение процессорного времени между программами, обычно на примере чистого си, потому что он достаточно низкоуровневый, но в отличие от ассемблера можно написать большую программу, не надорвавшись. И вот после того, когда ты все это узнал, ты начинаешь учить кресты. Если приступить к крестам сразу как многие пытаются, то ты будешь все время пытаться использовать его как паскаль/питон, стремясь убежать от непонятных низкоуровневых возможностей. И тогда вся суть крестов теряется, а побочные эффекты в виде множества возможностей выстрелить себе в ногу остаются. Так что либо хотя бы пробегись по всему четырехсеместровому курсу, либо учи питон и не дури. Книги: архитектура и ассемблер Пильщикова (короче) или Юрова (длиннее), операционные системы Таненбаума.
#362 #509324
>>509192
Наоборот, библиотека ввода-вывода си это говняное медленное легаси. Поэтому при работе с большими данными рекомендуется опускать флаг совместимости iostream с ней, ускорение до 10000 раз. Такие дела.
#363 #509325
>>509316
А если ввод уже в программе?
#364 #509328
>>509325
Поток это с точки зрения программы просто файл, который открыт на чтение без произвольного доступа. Соответственно, система имеет право удалить прочитанные символы. Но может и не удалить. Энивей попытки их прочитать второй раз, сдвинув каретку назад это UB.

Твой второй вопрос: ну, например, ты считал их в переменную-строку, теперь символы скопировались в нее и лежат в оперативной памяти. Старые символы в потоке, возможно, удалились. Если ты считал и не схоронил в переменную, то они потеряны.
#365 #509358
>>509328
То есть ничего определенного сказать нельзя?
Если на входе я получу X байт, и сохраню их в какой нибудь переменной, то нельзя точно сказать, сколько памяти будет есть программа, X или 2X байт, так?
#366 #509359
>>509358
Та память, которая, возможно, освободится, не принадлежит программе. Ты не можешь ей управлять, ОС сама очистит ее, если ей понадобится больше места. Так что считай только свои переменные.
#367 #509371
>>509359
Спасибо, это и хотел узнать.
#368 #509374
У меня есть очень классная идея, которую, возможно, придумали до меня, но она мне кажется мегаклассной. Хочу поделиться.
Элегантное решение для синхронизации критическими секциями.

Есть класс КритикалСекшн. У него есть коллекция туплов примерно таких<std::string, size_t count, HANDLE>. Конструктор класса принимает строку. Если нет в коллекции записи с такой строкой, создаёт критическую секцию соответсвтующую, добавляет в коллекцию, на сайз_т делает 1, входит в секцию. Если есть элемент уже, то просто входит в секцию, инкрементируя счётчик. На деструкторе выходит из секции, декрементирует счётчик. Если счётчик == 0, удаляет секцию.
Как это охуенно используется? А вот так:

[code]
void WINAPI yobaWriter(PVOID args) {
//...
{
auto s = Section("VAJNYY_FAYL");
//...
}
//...
}

void WINAPI yobaReader(PVOID args) {
//...
{
auto s = Section("VAJNII_FAIL");
//...
}
//...
}
[/code]

Можно ещё сделать какой-нибудь макрос
#define CrSection(x) auto _currentCriticalSection = Section(x);
Тогда можно использовать как

{
CrSection("VAJNII_FAYL");
}
#368 #509374
У меня есть очень классная идея, которую, возможно, придумали до меня, но она мне кажется мегаклассной. Хочу поделиться.
Элегантное решение для синхронизации критическими секциями.

Есть класс КритикалСекшн. У него есть коллекция туплов примерно таких<std::string, size_t count, HANDLE>. Конструктор класса принимает строку. Если нет в коллекции записи с такой строкой, создаёт критическую секцию соответсвтующую, добавляет в коллекцию, на сайз_т делает 1, входит в секцию. Если есть элемент уже, то просто входит в секцию, инкрементируя счётчик. На деструкторе выходит из секции, декрементирует счётчик. Если счётчик == 0, удаляет секцию.
Как это охуенно используется? А вот так:

[code]
void WINAPI yobaWriter(PVOID args) {
//...
{
auto s = Section("VAJNYY_FAYL");
//...
}
//...
}

void WINAPI yobaReader(PVOID args) {
//...
{
auto s = Section("VAJNII_FAIL");
//...
}
//...
}
[/code]

Можно ещё сделать какой-нибудь макрос
#define CrSection(x) auto _currentCriticalSection = Section(x);
Тогда можно использовать как

{
CrSection("VAJNII_FAYL");
}
#369 #509377
>>509374
Можно вместо строк использовать какие-нибудь указатели, и будет аналог синхронайзд блоков в Джаве.
#370 #509387
>>509374
1. Работа с туплами медленная.
2. Сравнение строк очень медленное.
3. Кому принадлежит коллекция? Классу как статическая? А как же расширяемость? Если понадобится две коллекции для разных задач, придется все перепиливать. очень. очень плохая идея.
4. Доступ к чему ты синхронизируешь? У тебя я вижу только регистрацию количества обработчиков файла, никакой синхронизации нет. Ни обработчик, ни код снаружи твоего класса вообще не узнают, был увеличен счетчик, или создана новая секция. Так что либо я тебя неправильно понял, либо ты сделал какой-то ебаный регистратор, который непонятно зачем считает обработчики и больше ничего не делает.
5. В любом случае синхронизация не обеспечивается. Без атомарных операций, очевидно, методы могут вызваться одновременно, увеличить счетчик один раз вместо двух и вообще хуй знает что натворить.
6. Раз уж ты вынужден использовать примитивы синхронизации, вместо вновь придуманного странного медленного велосипеда не лучше ли использовать возможности языка? Критические секции легко моделируются мьютексами, более того, в большинстве случаев они не нужны, потому что можно разбить задачу на независимые и использовать async/future.
7. Макросы.
8. WinAPI.
???????
FAIL
#371 #509397
>>509319
Спрашивал же нужно ли перед изучением крестов асм подучить. http://arhivach.org/thread/78455/#465309 И что делать? Таненбаума читать долго, а те 2 точно помогут? Они вроде больше по асм чем архитектуре ЭВМ. Но освоив одну из них смогу дальше учить С++? Это же они? http://arch.cs.msu.su/semestr2/%CF%E8%EB%FC%F9%E8%EA%EE%E2%20%C2.%CD.%20%CF%F0%EE%E3%F0%E0%EC%EC%E8%F0%EE%E2%E0%ED%E8%E5%20%ED%E0%20%FF%E7%FB%EA%E5%20%E0%F1%F1%E5%EC%E1%EB%E5%F0%E0%20IBM%20PC,%C4%E8%E0%EB%EE%E3-%CC%C8%D4%C8,1999.pdf ftp://92.200-224-87.telenet.ru/%D3%F7%E8%EC%F1%FF/Assembler/%DE%F0%EE%E2.%20%C0%F1%F1%E5%EC%E1%EB%E5%F0.pdf
#372 #509400
>>509387

> 1. Работа с туплами медленная.


Вместо него можно класс с тремя полями, всё равно.

> 2. Сравнение строк очень медленное.


Я об этом писал. Можно как-нибудь хешировать, а можно вместо строк делать с указателями, чтобы как в джавке синхронайзд(и тут объект синхронизации).

> 3. Кому принадлежит коллекция? Классу как статическая? А как же расширяемость? Если понадобится две коллекции для разных задач, придется все перепиливать. очень. очень плохая идея.


Зачем разные? Все секции в одной коллекции.

> 4. Доступ к чему ты синхронизируешь? У тебя я вижу только регистрацию количества обработчиков файла, никакой синхронизации нет. Ни обработчик, ни код снаружи твоего класса вообще не узнают, был увеличен счетчик, или создана новая секция. Так что либо я тебя неправильно понял, либо ты сделал какой-то ебаный регистратор, который непонятно зачем считает обработчики и больше ничего не делает.


На конструкторе есть же EnterCriticalSection(), на деструкторе - LeaveCriticalSection()

> 5. В любом случае синхронизация не обеспечивается. Без атомарных операций, очевидно, методы могут вызваться одновременно, увеличить счетчик один раз вместо двух и вообще хуй знает что натворить.


Перед увеличением будет EnterCriticalSection(), а LeaveCriticalSection() после декремента. Таким образом, нельзя будет Поменять значение, не находясь в критической секции, а в ней только 1 поток. Всё норм обеспечивается.

> Критические секции легко моделируются мьютексами,


Ну да, в POSIXе как раз мутексы вместо секций. Но выразительнее намного будет
[code]
{
Section("COM1");
//....
}
[/code]

[code]
EnterCriticalSection(p);
//...
LeaveCriticalSection(p);
[/code]
С виду разница не большая. Однако будет очень неприятно передавать указатель на секцию в поток через void* и всё такое. А потом ещё как-то отслеживать неиспользуемые секции и удалять их. То же самое с pthread_mutex_lock/unlock, а ведь для них реализация такая же.

> 8. WinAPI.


И в том и суть, что решение оборачивает WinAPI.
#372 #509400
>>509387

> 1. Работа с туплами медленная.


Вместо него можно класс с тремя полями, всё равно.

> 2. Сравнение строк очень медленное.


Я об этом писал. Можно как-нибудь хешировать, а можно вместо строк делать с указателями, чтобы как в джавке синхронайзд(и тут объект синхронизации).

> 3. Кому принадлежит коллекция? Классу как статическая? А как же расширяемость? Если понадобится две коллекции для разных задач, придется все перепиливать. очень. очень плохая идея.


Зачем разные? Все секции в одной коллекции.

> 4. Доступ к чему ты синхронизируешь? У тебя я вижу только регистрацию количества обработчиков файла, никакой синхронизации нет. Ни обработчик, ни код снаружи твоего класса вообще не узнают, был увеличен счетчик, или создана новая секция. Так что либо я тебя неправильно понял, либо ты сделал какой-то ебаный регистратор, который непонятно зачем считает обработчики и больше ничего не делает.


На конструкторе есть же EnterCriticalSection(), на деструкторе - LeaveCriticalSection()

> 5. В любом случае синхронизация не обеспечивается. Без атомарных операций, очевидно, методы могут вызваться одновременно, увеличить счетчик один раз вместо двух и вообще хуй знает что натворить.


Перед увеличением будет EnterCriticalSection(), а LeaveCriticalSection() после декремента. Таким образом, нельзя будет Поменять значение, не находясь в критической секции, а в ней только 1 поток. Всё норм обеспечивается.

> Критические секции легко моделируются мьютексами,


Ну да, в POSIXе как раз мутексы вместо секций. Но выразительнее намного будет
[code]
{
Section("COM1");
//....
}
[/code]

[code]
EnterCriticalSection(p);
//...
LeaveCriticalSection(p);
[/code]
С виду разница не большая. Однако будет очень неприятно передавать указатель на секцию в поток через void* и всё такое. А потом ещё как-то отслеживать неиспользуемые секции и удалять их. То же самое с pthread_mutex_lock/unlock, а ведь для них реализация такая же.

> 8. WinAPI.


И в том и суть, что решение оборачивает WinAPI.
#373 #509402
>>509397
Если тебе не нужен асм, то читай Пильщикова да, это та книга, пропуская моменты, где рассказывается про команды и само программирование. Юрова в таком случае не надо в основном асм и многабукаф. Еще наверни вот http://arch.cs.msu.su/ это, там курс лекций уже чисто по архитектуре, который читают у нас параллельно с практикумом по Пильщикову во втором семестре. Вместо Таненбаума можешь взять http://ftp.vtyulb.ru/%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5%20%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B%20%28%D0%BC%D0%B0%D1%88%D0%B1%D1%83%D0%BA%29.pdf это, там курс по операционным системам, который читают в третьем семестре. По сути тот же Таненбаум, но гораздо более сжатый многие фишки не рассказаны, но для ознакомления самое то. Главы 4 и 6 можешь пропустить, остальное читай.
#374 #509404
>>509374
Про lock(obj) {} ты не слышал?
#375 #509406
>>509404
У него ещё путаница с терминологией.

Критическая секция — это режим выполнения, когда программа становится однопоточной и её приоритет повышают на то время, пока она находится в критической секции (гуглить VxWorks и другие ОСРВ).

lock (obj) {} и «новейшая очень классная идея» — это не критическая секция, а семафоры, причём со способностью впадать во взаимную блокировку, догадайтесь как.
#376 #509410
>>509400
А, ну тогда за работоспособность этого я не могу сказать тебе, но энивей, на мой взгляд, прикручивать какие-то платформозависимые методы это не особо хорошо. Тем более, что POSIX мьютексы сам не перевариваю это говно с одним методом и кучей флагов на все действия - это уровень 80-х, а у нас тут новый стандарт, знаешь ли. Получается очень выразительно, наподобие std::lock_guard <mutex> guard (lock_) пишешь в конструкторе/начале блока, и пока guard в видимости, ты владеешь секцией. Алсо, такой подход с RAII будет exception-safe из коробки, в отличие от. Не получится забыть выйти из секции в деструкторе и вот это все.

По поводу неиспользуемых секций - ну так это опять велосипед жи. Допустим, ты, возможно, будешь использовать функтор-секцию. Тогда ты делаешь фабрику, когда кто-то дергает получение еще не существующей секции, она генерит функтор, отдает std::shared_ptr на него, а себе схороняет std::weak_ptr. Если у нее дергают получение уже существующей, она пытается отдать shared, сконструированный из weak. Когда пользователи сделают свои дела и счетчик shared станет 0, он удалит секцию автоматически. И все это реализовано наиболее быстрыми путями и thread-safe. Попробуй пересесть со своего велосипеда на мотоцикл короче, лол.
41 Кб, 1048x600
#377 #509411
>>509406

> У него ещё путаница с терминологией.


Это у тебя путаница.
#378 #509412
>>509410
Спасибо. Я зря полез в эту тему не изучая новый стандарт по этому поводу. Почитаю сегодня.
#379 #509413
>>509402
Спасибо. Так и сделаю. От сюда http://arch.cs.msu.su/ можно всё одним пдэфом скачать?
#380 #509415
>>509406
Ну не, критические секции тоже являются одним из примитивов синхронизации, наряду с семафорами. В некоторых языках это базовая вещь вместо мьютекса, ты как-то описываешь, что в участок кода может войти только один поток одновременно. Но, понятное дело, критические секции и мьютексы реализуются элементарно друг через друга, поэтому по факту это одни и те же способы что-либо сделать, и проблемы у них одинаковые.
#381 #509418
>>509413
Хуй знает. Посмотрел у себя, вот то, что схоронено http://rghost.ru/6mynBL4hQ.
#382 #509423
>>509418
Спасибо. Оно.
1045 Кб, 703x648
60 Кб, 585x370
#383 #509435
>>503274
Как перейти с знания языка уровня laba7 на уровень нормального разработчика?
#384 #509437
>>509435
Придумай задачу достаточно сложную для тебя и реши ее
#385 #509460
>>509435
Читай книжки.
#386 #509465
>>509437
Я не хочу писать очередной блокнот или клиент-сервер ибо это тупо, я хочу что-нибудь пооригинальнее (но не знаю что, и даже не могу придумать). Поэтому нихуя не пишу, кроме простеньких, нужных по учебе, программок. Как быть, что написать?
#387 #509470
>>509465
http://www.ideamachine.io/
http://theinternetwishlist.com/
закрепите это уже где-нибудь в шапке
#388 #509474
>>509465
Бот для шахмат. Начал учить программирование чтобы его сделать.
#389 #509500
>>509470
Тоже хуйня по большей части.
#390 #509502
>>509500
Тогда ждем от тебя идею на миллион
#391 #509505
>>509502
Написать генератор идей на миллион.
sage #392 #509509
>>509505
Вот его и пиши. /discussion
sage #393 #509555
>>509244
добавляешь кастомный QGraphicsItem, в котором рисуешь прозрачный прямоугольник.
#394 #509794
Господа, начал учить C++, никак не пойму, зачем объявлять метод класса вне класса? Проебывается читаемость же, не?
sage #395 #509798
>>509020
В Алёна-треде ни за что.
#396 #509806
>>509794
Ты сейчас про дружественные методы? Так что бы они были видны всем твоим друзьям
#397 #509808
>>509794
Методы снаружи - читаемый интерфейс. Методы внутри - читаемей реализация (что спорно). Интерфейс класса читают намного чаще чем релизацию.
#398 #509812
>>509806
Не, не френдли в привате, я пока до них не дошел. Просто объявляем прототип в в классе потом в ебенях Класс::имяФункции () {описываем}.

>>509808
Кроме читаемости никаких преимуществ не дает?
#399 #509814
>>509794
Если ты про друзей, то такое часто бывает при определении операторов над классами. Например, ты хочешь сделать TvoyaMamka & opearator+ (const TvoyaMamka &), где первое слагаемое передается неявно как this. Если у тебя определен еще implicit конструктор, например, из int, то будут проблемы, когда ты пытаешься складывать мамок с числами, потому что неявно передаваемый параметр никогда не приводится автоматически. И тогда ты выносишь operator+ за пределы класса, он теперь принимает параметрами обеих мамок и все работает.

Еще часто обработку объектов выносят за пределы самих классов, потому что метод-член видит приватную реализацию, а внешняя функция видит только интерфейс, и инкапсуляция повышается. Другое дело, что обычно для таких целей можно создать класс-обработчик, в котором будут эти методы.
#400 #509820
>>509812
Ну так ты определяешь класс в заголовочном файле обычно. Если у него большие методы, то это неудобно читать становится, а так можно вынести каждый метод хоть в отдельный .cpp и все будет заебись. Но главное даже не в этом, а в том, что если ты меняешь реализацию метода без изменения интерфейса (те же параметры, то же возвращаемое значение), то тебе придется перекомпилировать только один файл. А если реализация в заголовочном файле, то перекомпилируются все .cpp, которые его используют. В больших проектах это настолько существенно, что делают дополнительные сущности, чтобы клиент как можно меньше знал о реализации, в.т.ч. и данных, называется pimpl. Делают маленький хедер, в котором объявлен прокси-класс. В нем указатель на настоящий объект и больше нихуя. Пока ты не используешь объект, тебе не нужно ничего знать о реализации, размере и всем таком, если ты хранишь в другом объекте не его самого, а указатель. Это позволяет избежать порчи половины проекты, когда ты добавляешь член в один хедер, который оказывается подключен к куче других.
#401 #509828
>>509820
Спасибо, ты крутой.
23 Кб, 500x307
#402 #509972
Товарищи, подскажите, пожалуйста. Что происходит при открытии файла (fstream, например)? Весь объем файла пихается в оперативную память или нет?

Собственно, почему спрашиваю. Поставлена задача: есть N файлов, общим размером ~100мб. В файлах отсортированные номера. Нужно создать один файл со всеми номерами. Разумеется, тоже отсортированный. При этом, нужно уложиться в 50мб оперативки.
Я планировал решить это следующим образом: так как номера в файлах отсортированы, просто выдергивать из каждого файла по одному номеру и образовавшуюся коллекцию сравнивать между собой. Ну и выдернутые номера удалять, например. Это хороший подход или я не прав?
#403 #509975
>>509972
Файлы не пихаются целиком в память. Читай по одному, сравнивай, записывай. Удалять их из файлов не обязательно, файл будет читаться дальше сам по себе.
#404 #509979
>>509975

>Читай по одному


Держать открытыми сразу все файлы - не очень?
Каждый раз открывать/закрывать?
#405 #509983
>>509972

Тут несколько вариантов:

1) Допустим, у тебя оперативной памяти было бы не 50мб, а 1 мб. Тогда можно было бы, например, считывать из одного файла порцию данных в буфер и из другого файла порцию данных (в жизни из файла не читаются побитово, а читаются целыми блоками по X килобайт). Далее сливать эти два буфера и записывать их в третий новый файл (данные идут на диск). В итоге у тебя получится отсортированный файл, содержащий данные двух исходных файлов. Повторять так N - 1 раз, в конце получишь один отсортированный файл.

2) Т.к. у тебя 50 метров, а все файлы - 100 метров, то выгоднее сразу все считать 50 метров из файлов в память, отсортировать любым нормальным алгоритмом сортировки, записать в файл и не париться (т.к. работа с диском очень-очень медленная, а работа с памятью невероятно быстрая). Потом повторить тоже самое для оставшейся части файлов (остальные 50 метров). А потом два файла слить через алгоритм из первого пункта.
#406 #509989
>>509983
А вот в первом случае на N-(N / 2) итерациях разве не будет такого, что в буфер придется записать данных большем, чем на 50мб?

Черт. Уже час не могу написать - двачестан возвращает Gateway timeout
#407 #509992
>>509972

>Весь объем файла пихается в оперативную память или нет?


Пихается буфер, зависящий от libc и системы. По-моему в районе 64 кб. Поэтому даже побайтовое чтение не вызывает проблем с производительностью, но и файлы, конечно, целиком не грузятся.

>При этом, нужно уложиться в 50мб оперативки.


Домашка? Вообще так делается merge sort, именно как ты описал.
#408 #509993
>>509989
В первом случае ты считываешь в память, считай, 1 число из одного файла и 1 число из другого файла. Выбираешь наименьшее из чисел, записываешь в выходной файл. Считываешь из соответствующего файла еще одно число. В итоге в памяти у тебя всегда не больше 2х чисел. А файл целиком в память можно не считывать. Вроде так.
#409 #509994
>>509992
Если честно, тестовое задание на стажировку. Про файлы рассказывали на первом курсе и я что-то позабыл, как это дело происходит. Да и не требовалось что-то.

>>509993
Да, ты прав, торможу. Почему-то подумал, что буду весь файл совать в буфер. Бывает.

Спасибо, товарищи!
#410 #510002
>>509994
Обращайся. Второй предложенный способ, имхо, круче - память нужно использовать по полной, т.к. это очень быстро.
#411 #510006
>>509993
В памяти будет размер соответствующих буферов чтения. Поэтому лучше не выебываться и доверить буферизацию ("использование памяти по полной") системе.
#412 #510012
>>510002
Амм. Сколько занимает символ конца строки в юникоде? Два байта?
sage #413 #510031
>>509979
Лол. Что-то от тебя зеленью запахло, но отвечу. Читать числа по одному, файлы закрывать не нужно.
#414 #510033
>>510031
Пардон. Я на полном серьезе задаю эти глупые вопросы. Конечно стараюсь читать самостоятельно, но иногда проще спросить.
#415 #510034
>>510012
Каком юникоде? Если ты про UTF-8, то как в ASCII — один байт.
#416 #510040
>>510034
Хмм. А почему, если сделать вот так:

\tint k = 12345678;
\tofstream out ("out.txt", ios::out);
\tout << k << endl;
\tout.close();

то размер файла будет 10 байт?
#417 #510041
>>510040
Черт. Табы вылезли.
#418 #510043
>>510040

> endl


Конец строки в Шиндоусе -- два байта: \r\n, они же <CR><LF>.
#419 #510045
>>510043
То есть, в винде всегда железно два байта? Вне зависимости от компилятора, библиотек и так далее?
#420 #510052
>>510045
Нет.
#421 #510054
>>510052
Хорошо. Остановимся на этом. Не буду злоупотреблять твоей помощью. Просто почитаю об этом где-нибудь на досуге.
Большое спасибо.
#422 #510067
>>509972
Это не регламентировано стандартом жи. Библиотека предоставляет тебе некоторую абстракцию файла, который может находиться где угодно. Например, ты открываешь последовательный порт как файл, или удаленный файл на чужой пекарне. В *nix вообще все считается файлами даже небо, даже Аллах. Понятно, что последовательный порт или поток ввода который ВНЕЗАПНО тоже файл нельзя схоронить в оперативную память, потому что неизвестно, что в них будет потом. Но даже если ты оперируешь с "хорошим" файлом с диска, он банально не может влезть в память. Пораскинь мозгами, анон, когда ты открываешь йоба-фильм в .mkv на 30 гигабайт, он целиком не влезает в твою память, но видеоплеер, несомненно, открывает его как файл. А разгадка одна - интерфейс fstream ничего не говорит о том, где находится файл. Он передает строку с именем операционной системе, та достает нечто, что в ее понимании отвечает твоему запросу, и тебе предоставляется к этой сущности доступ. Она физически может быть где угодно, и ты не можешь "заметить" этого, потому что время доступа к файлу тоже не регламентировано. Более того, получится ли открыть файл - тоже не регламентировано, эта ответственность возлагается на ОС, как и способ хранения кусков открытого файла. Скорее всего, нормальная ОС будет загружать файл по кускам и кэшировать. Но теоретически она может попытаться загрузить весь файл в память, памяти не хватит, и конструктор fstream кинет исключение емнип. И такое поведение абсолютно нормально и не выходит за рамки стандарта. такие дела.
#423 #510076
>>510067
Логично. Спасибо.
32 Кб, 320x435
#424 #510103
Анон, подскажи мне, где можно красиво использовать variadic templates, кроме функций с переменным числом параметров? Я посмотрел примеры, но все остальное или непонятно зачем нужно, или представляет из себя какую-то вырвиглазную хуету.
#425 #510143
>>510103
emplace-методы в контейнерах, каррирование
#426 #510210
>>510103
Метапрограммирование жи.
Поиск максимума из n чисел во время компиляции:
[code lang="cpp"]
template <int head, int ... tail>
struct Max
{
\tconst static int value = (head > Max <tail ...>::value) ? head : Max <tail ...>::value;
};

template <int ... tail>
struct Max
{
\tconst static int value = std::INT_MIN;
};
[/code]
68 Кб, 602x377
#427 #510271
>>510143
emplace-методы, это и есть функции с переменным числом параметров, а каррирование проще делать лямбда-функциями, разве нет?

>>510210
и нахуя это нужно?
#428 #510305
>>510210

>Поиск максимума из n чисел во время компиляции:


поясни что тут происходит. И как делать что-то похожее.
мимо
#429 #510306
>>510271

>emplace-методы, это и есть функции с переменным числом параметров


Не путай, тебе же станет известно количество параметров еще при компиляции, поэтому переменное количество параметров, значит, делать variadic function не требуется. Например, у тебя есть класс ChlenSemyi, в котором unique_ptr <T> chlen_, где T может быть TvoyaMamka, у которой конструктор принимает 10 параметров-кусков мяса, либо TvoyBatya, который дохуя спортсмен и принимает только один параметр-салат. Тебе нужно инициализировать этот указатель в конструкторе класса ChlenSemyi. И ты можешь создать один variadic template конструктор, который принимает любое количество любых параметров и пытается пихнуть их в конструктор T. Без них тебе бы пришлось описывать для каждого набора параметров отдельный конструктор.

>каррирование проще делать лямбда-функциями


Не всегда. До C++14 нельзя было переименовывать параметры и захватывать члены класса как переменные из зоны видимости, например, а вариадики подбавляют гибкости.

>и нахуя это нужно?


Потому что это позволяет перенести часть вычислений на этап компиляции, потом тормозить будет меньше я могу, иди на хуй.
#430 #510308
>>510305
Хвостовая рекурсия же. Он на каждом этапе сравнивает первый параметр и уже вычисленное value в структуре, где параметров на один меньше. Когда остается ноль параметров, он вернет наименьший возможный int. Да, я знаю, что это немного костыльно, просто первое, что пришло в голову. Вообще, гугли метапрограммирование или Александреску из шапки читай.
#431 #510509
>>510306

>значит, делать variadic function не требуется


При чем тут вообще variadic function, если изначально речь идет о шаблонах?

>До C++14 нельзя было переименовывать параметры и захватывать члены класса как переменные из зоны видимости


если речь идет о [&,=], то это прекрасно работало и в 11.
Скинь какой-нибудь пример каррирования шаблонами
#432 #510550
>>510509

>При чем тут вообще variadic function


>emplace-методы, это и есть функции с переменным числом параметров


Ты походу не отличаешь template <typename ... Args> func () от func (TvoyaMamka arg1, ...).

>если речь идет о [&,=], то это прекрасно работало и в 11


Нет, речь о [var = expression] {}.

>Скинь какой-нибудь пример каррирования шаблонами


[code lang="cpp"]
template <typename Function, typename ... OldArgs>
class Bind
{
\tconst Function function_;
\tconst std::tuple <OldArgs ...> old_args_;
\t
public:

\tBind (Function input_function, std::tuple <OldArgs ...> args) :
\t\tfunction_ {input_function},
\t\told_args_ {args}
\t{}
\t
\ttemplate <typename NewArg>
\tauto operator() (NewArg arg)
\t{
\t\treturn curryItMotherfucker (arg, 0);
\t}
\t
\ttemplate <typename Arg>
\tstd::result_of_t <Function (OldArgs ..., Arg)> curryItMotherfucker (const Arg & arg, int) const
\t{
\t\treturn function_ (args ..., arg);
\t}
\t
\ttemplate <typename Arg>
\tauto curryItMotherfucker (const Arg & arg, ...) const
\t{
\t\treturn Bind <Function, Args ..., Arg> { function_, std::tuple_cat (args, std::tuple <Arg> (arg))};
\t}
};
[/code]
#432 #510550
>>510509

>При чем тут вообще variadic function


>emplace-методы, это и есть функции с переменным числом параметров


Ты походу не отличаешь template <typename ... Args> func () от func (TvoyaMamka arg1, ...).

>если речь идет о [&,=], то это прекрасно работало и в 11


Нет, речь о [var = expression] {}.

>Скинь какой-нибудь пример каррирования шаблонами


[code lang="cpp"]
template <typename Function, typename ... OldArgs>
class Bind
{
\tconst Function function_;
\tconst std::tuple <OldArgs ...> old_args_;
\t
public:

\tBind (Function input_function, std::tuple <OldArgs ...> args) :
\t\tfunction_ {input_function},
\t\told_args_ {args}
\t{}
\t
\ttemplate <typename NewArg>
\tauto operator() (NewArg arg)
\t{
\t\treturn curryItMotherfucker (arg, 0);
\t}
\t
\ttemplate <typename Arg>
\tstd::result_of_t <Function (OldArgs ..., Arg)> curryItMotherfucker (const Arg & arg, int) const
\t{
\t\treturn function_ (args ..., arg);
\t}
\t
\ttemplate <typename Arg>
\tauto curryItMotherfucker (const Arg & arg, ...) const
\t{
\t\treturn Bind <Function, Args ..., Arg> { function_, std::tuple_cat (args, std::tuple <Arg> (arg))};
\t}
};
[/code]
9 Кб, 184x174
#434 #510635
>>510631
Друг
#435 #510638
>>510631
Недавно дочитал эту книгу. Твоя первая? До неё что читал?
#436 #510642
>>510638
Первая, только начинаю осваивать.
До неё чуть Прата чинул с вашей шапки, но он, вроде, хуже.
#437 #510647
>>510642
Осваивать С++ или программирование?
#438 #510648
>>510647
С++, программирование я знаю на уровне пхп-макаки.
#439 #510651
>>510648
Сам учил или в шараге поясняли?
#440 #510653
>>510651
Сам учил. В пхп треде.
#441 #510658
>>510653
Долго учил? Работал? Фрилансом занимался?
#442 #510667
>>510658
Учил месяца 3, потом поработал 2 месяца, не фрилансил.
#443 #510699
>>510550

>Ты походу не отличаешь



я писал

>где можно красиво использовать variadic templates, кроме функций с переменным числом параметров?



Если ты знаешь еще какой-то способ, использования variadic templates для реализации переменного кол-ва пераметров кроме emplace-методов, то напиши.
366 Кб, 1920x1161
322 Кб, 1920x1161
#445 #510705
Поясните, почему тут возникает ошибка?
Даже если код напрямую копирую с книги - такая же ошибка.
Как я понял что-то с std_lib_facilities.h не так?

Пока двач висел попробовал ручной метод на 2 скрине, опять странные ошибки.
#446 #510709
>>510705
Чтобы запускать примеры эта библиотека не обязательны. Всё как написано в приложении Г делал?
#447 #510711
>>510705
Может после имени библиотеки на втором скрине .h написать?
#448 #510715
>>510702
В оперативной памяти есть специальный стек, когда ты вызываешь функцию, в него помещаются передаваемые ей параметры, а функция при обращении к параметрам считывает их из этого стека. Речь идет о том, кто должен удалять эти данные из стека при выходе из функции: сама функция или вызывающая программа.
3 Кб, 733x320
#449 #510716
>>510702
Нечто ассемблерное. Выбрось из головы.
#450 #510719
>>510715
Пока писал второй вопрос понял ответ. Спасибо. %%На всяки случай уточню. В ассемблере это делается вручную с помощью push и pop?%
#451 #510723
>>510715
Это называется "соглашение о вызове" и в разных языках и системах оно разное. https://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D0%B3%D0%BB%D0%B0%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BE_%D0%B2%D1%8B%D0%B7%D0%BE%D0%B2%D0%B5
Делается это не с помощью push/pop, а спомощью манипуляций с ebp и esp. См. http://stackoverflow.com/questions/15020621/what-is-between-esp-and-ebp
#452 #510725
>>510715
А, это был ответ на вопрос, а не вопрос, лол.
#453 #510740
>>510723
Прости, но я не могу в английский. Можешь пояснить что он тут имел ввиду?

>all local variables and function parameters are a known constant offset from this register for the duration of the function call.


>At the start of the function, ESP is decremented by the appropriate value.



SP указывает на вершину стека и с помощью его можно ложить/брать верхний элимент, а для чего BP?

И в википедии писалось что когда Си ложит переменную меньше 4 байт в стек, то она расширяться до 4 байт. Имеется виде переменная из объявления функции, а не локальная? А если я буду передавать как параметр массив char, то его размер в 4 раза увеличивается? В С++ так же?
#454 #510746
>>510699
Ты заебал, я тебе аж джва примера привел. Максимум чисел на этапе компиляции для адептов метапрограммирования, каррирование без костылей с обертками вокруг лямбды как более практическая вещь.
#455 #510747
>>510740

>all local variables and function parameters are a known constant offset from this register for the duration of the function call.


Когда ты пишешь внутри функции int i; int j; int k компилятор превращает это в [ebp - 4], [ebp - 8], [ebp - 12]. То есть переменные превращаются в смещение относительно регистра ebp.

>At the start of the function, ESP is decremented by the appropriate value.


В начале функции на стеке выделяется память путем вычитания из ESP. Тогда в промеждутке между EBP-ESP находятся твои локальные переменные. Далее push/pop модифицируют ESP, а вот EBP используется для адресации локальных переменных.

>А если я буду передавать как параметр массив char, то его размер в 4 раза увеличивается?


Нет. Массивы обычно передаются по ссылке, но если даже передашь по значению, то размер округлится до кратного 4-х.
#456 #510749
Посоветуйте что почитать если уже знаю с++ на уровне ньюфага и хочу разобраться в них побольше
#457 #510750
>>510719
Да. Если посмотришь книжку Пильщикова, которая была выше в треде, там наглядно это показано. Идиома такая, что один из регистров (BP для 8086 архитектуры, EBP для 32bit, RBP для 64bit) схороняется в стек, дальше в него записывается вместо старого значения адрес текущей верхушки стека, и все локальные переменные отсчитываются как BP - смещение, а все параметры (и адрес возврата) как BP + смещение.
#458 #510751
>>510747
Всё. Спасибо. Теперь точно понял.
На всякий случай уточню. Если в функцию передавать 100 параметров типа char, а не 1 массив из 100 элементов, то тогда каждая переменная будет занимать 4 байта?
#459 #510752
>>510751
Это емнип зависит от архитектуры. Грубо говоря, ты не должен делать предположений об этом, стандарт не регламентирует. На некоторых архитектурах выравнивание строго обязательно, на других его можно вырубить, но тогда увеличивается время доступа. Изнутри крестов ты это не сможешь контролировать, по крайней мере платформонезависимо.
#460 #510753
>>510751
Не забивай себе голову этим. Байты считать - себя не уважать.
#461 #510754
>>510751
Массивы вообще передаются по ссылке, а сколько будет занимать переменная типа char зависит от архитектуры и компилятора и в с++ тебя это волновать не должно.
#462 #510755
>>510750

>книжку Пильщикова


Она слишком сложная. Не осилил и 10 страниц. Если осилю лекции что выше в треде рядом с этой книгой, то пойму что в ней написано? Если нет, то реквестирую что попроще Пильщикова.
#463 #510757
>>510749
Для начала почитай шапку.
#464 #510758
>>510755

>Пильщикова


>сложная


Эээ, шта? Она же очень поверхностная, я помню, как мне на первом курсе вечно не хватало детализации из нее и приходилось гуглить, лол. Попробуй тогда навернуть лекций по архитектуре для начала, там выше я кидал ссылку на ргхост.
#465 #510761
Наткнуля на такой readme

1. BACKGROUND
http://en.wikipedia.org/wiki/Adobe_Flash_Player

Congrats! You are reading about the most beautiful Flash bug for the last four
years since CVE-2010-2161.

2. DESCRIPTION

The use-after-free vulnerability exists inside the built-in ByteArray class
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/utils/ByteArray.html

Let's create a simple ByteArray object:

var ba:ByteArray = new ByteArray();
ba.length = 8;
ba[1] = 1;

Now we can access ba[] items and write numeric byte values into ba[].
Also we are allowed to write objects into ByteArray. For example:

var obj = new MyClass();
ba[0] = obj;

AS3 will try to implicitly convert the MyClass object into numeric value by
calling the MyClass.valueOf() method. This method can be easily redefined
within the user's code:

class MyClass
{
prototype.valueOf = function()
{
ba.length = 88; // reallocate ba[] storage
return 0; // return byte for ba[offset]
}
}

Let's see how that implicit conversion occurs inside the native code:

push esi
mov eax, [esp+8] // the offset value from "ba[offset] = obj"
push eax
add ecx, 0x18 // ecx = this = "ba" object pointer
call ByteArray.getStorage() // gets ba[offset] storage pointer and
mov esi, eax // saves it in esi

mov ecx, [esp+0xC] // "obj" pointer
push ecx
call AvmCore.toInteger() // call MyClass.valueOf()
add esp,4
mov [esi], al // writes returned byte into array

pop esi
ret 8

On high-level language this will look like:

void ByteArray.setObjInternal(int offset, obj)
{
byte dest = this.getStorage(offset);
dest
= toInteger(obj);
}

So the array storage pointer is saved in local variable, then AS3 valueOf() is
invoked from the native code and returned byte is written into destination
pointer at the end. If valueOf() changes the length of byte array (see above)
and reallocates its internal storage, then local destination pointer becomes
obsolete and further usage of that pointer can lead to UaF memory corruption.

Using this vulnerability, it's very easy to control what byte will be written
and at which offset this corruption will occur.

3. AFFECTED SOFTWARE
Adobe Flash Player 9 and higher

...

Стало интересно пусть они могут записать в освобожденную область памяти, но откуда они знают что эта память уже снова выделена (причем это должно произойти после освобождения но до записи значения) и как она используется?
#465 #510761
Наткнуля на такой readme

1. BACKGROUND
http://en.wikipedia.org/wiki/Adobe_Flash_Player

Congrats! You are reading about the most beautiful Flash bug for the last four
years since CVE-2010-2161.

2. DESCRIPTION

The use-after-free vulnerability exists inside the built-in ByteArray class
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/utils/ByteArray.html

Let's create a simple ByteArray object:

var ba:ByteArray = new ByteArray();
ba.length = 8;
ba[1] = 1;

Now we can access ba[] items and write numeric byte values into ba[].
Also we are allowed to write objects into ByteArray. For example:

var obj = new MyClass();
ba[0] = obj;

AS3 will try to implicitly convert the MyClass object into numeric value by
calling the MyClass.valueOf() method. This method can be easily redefined
within the user's code:

class MyClass
{
prototype.valueOf = function()
{
ba.length = 88; // reallocate ba[] storage
return 0; // return byte for ba[offset]
}
}

Let's see how that implicit conversion occurs inside the native code:

push esi
mov eax, [esp+8] // the offset value from "ba[offset] = obj"
push eax
add ecx, 0x18 // ecx = this = "ba" object pointer
call ByteArray.getStorage() // gets ba[offset] storage pointer and
mov esi, eax // saves it in esi

mov ecx, [esp+0xC] // "obj" pointer
push ecx
call AvmCore.toInteger() // call MyClass.valueOf()
add esp,4
mov [esi], al // writes returned byte into array

pop esi
ret 8

On high-level language this will look like:

void ByteArray.setObjInternal(int offset, obj)
{
byte dest = this.getStorage(offset);
dest
= toInteger(obj);
}

So the array storage pointer is saved in local variable, then AS3 valueOf() is
invoked from the native code and returned byte is written into destination
pointer at the end. If valueOf() changes the length of byte array (see above)
and reallocates its internal storage, then local destination pointer becomes
obsolete and further usage of that pointer can lead to UaF memory corruption.

Using this vulnerability, it's very easy to control what byte will be written
and at which offset this corruption will occur.

3. AFFECTED SOFTWARE
Adobe Flash Player 9 and higher

...

Стало интересно пусть они могут записать в освобожденную область памяти, но откуда они знают что эта память уже снова выделена (причем это должно произойти после освобождения но до записи значения) и как она используется?
#466 #510763
>>510761
Ну это классическое переполнение жи. Обычно тактика такая - засрать всю доступную тебе для записи память пустыми командами, а в конце цепочки поставить RET туда, куда тебе надо. После этого с нехилой вероятностью управление попадет на одну из этих команд и уплывает по ним до твоего RETа.
#467 #510765
>>510763
Но для этого надо, чтобы
А) эту память не перезаписали перед использованием
Б) чтобы она была в исполняемом сегменте.
Не?
не очень понимаю в байтоебстве и асме, не ругайся
#468 #510766
>>510765
Ну вообще да, и энивей сейчас делают всякие защиты запрет исполнения из сегмента данных, автоматическую проверку границ массива с генерацией исключения при выходе, или вообще запускают все недоверенное в песочницах. Переполнение это классика взлома как бы. Но по факту иногда пусть и с изъебствами это работает. Там дохуя разновидностей каждый день придумывают, их быстро патчат, но потом придумывают снова, ну ты понел. Например, лет десять назад нашли фишку с переполнением кучи куча и стек обычно в одном сегменте делались и росли навстречу друг другу, было довольно популярно ее юзать. Но вообще, если тебе это интересно, то ты должен серьезно обмазаться байтоебством. Уровень семестрового асма точно будет необходим. Если хочешь, могу кинуть видео с лекций, которые нам в лабе читали, там одна или две как раз про это, довольно популярно разжевывалось вроде.
#469 #510768
>>510766
Та не, я другой анон вообще. Асм очень поверхностно понимаю и мне норм.
#470 #510769
>>510766
А я бы посмотрел.
#471 #510770
>>510766
Это из архива hacking team readme, у них сэмплы есть которые хорошо работают (под винду и макось). Можешь их исходники посмотреть если разбираешься
http://t.co/nfqck54YhT

Не забудь тут рассказать :3
#472 #510771
>>510769
https://www.youtube.com/playlist?list=PL2AE27C02108EDDF4
Вот тут с 7 по 10 про программные уязвимости и вот это все.
#473 #510772
>>510770
Спасибо. Завтра гляну и отпишусь.
#474 #510776
Хм? В С++ треде последнее время ассемблера больше чем С++. Может кто-то осмелиться создать ассемблер тред и возьмёт на себя не лёгкую задачу по составлению шапки?
#475 #510787
>>510758

> Подробно работа отладчика студенты факультета вычислительной математики и кибернетики МГУ изу-


чают в курсе третьего семестра "Системное программное обеспечение".
Что это за курс? Он у тебя есть? Можешь показать?
46 Кб, 1102x187
#476 #510799
>>510787
>>510758
Ну вот. Снова на самом интересном месте. Чем ты в этом МГУ занимаешься? Аспирант? Где эти курсы искать? В гугле только краткое описание на 2 страницы.
#477 #510802
>>510776
а нахуй он нужен?
#478 #510804
>>510802
И так много тредов уже. Ещё 1 не навредит.
14 Кб, 1105x62
#479 #510805
>>510799
Срочно реквестирую этот курс.
10 Кб, 484x368
#480 #510825
Ньюважескмй вопрос.
Почему тяфкает на последнюю фигурную скобку?
#481 #510827
>>510825
Потому_что_блока_do{}_не_бывает
#482 #510828
>>510825
Спасибо тебе.
#483 #510843
>>510709
Да, делал как в приложении, только у меня это приложение В.

>>510711
На 2 скрине я, вроде, не использую библиотеки, в которые нужно добавлять .h?
Там же рядом учебник написан, вроде оттуда всё скатал, а не работает...
#484 #510853
>>510825
Поле if тоже нужны скобки, кстати.
#485 #510861
>>510843

>Там же рядом учебник написан, вроде оттуда всё скатал, а не работает...


Другой компилятор или другая версия. В MS не работал, но возможно там надо .h и для стандартных библиотек. Ещё попробуй на первом скрине удалить из скаченого файла #include <hash_map>
#486 #510909
>>510776
Няш, ну я бы мог, конечно, но с асмом не такая движуха, как с крестами же. Вангую, что тред будет мертворожденным просто, иногда кто-то будет заходить из-за шапки и все. Да и я, если честно, в асме шарю только на уровне, чтобы понимать, что вообще происходит, и иногда ломать что-то. Асм-погроммистом меня никак нельзя назвать.
>>510787 >>510805
У нас изменилась программа, учебник же старый. Сейчас в третьем семестре вместо этого операционные системы , а СПО читают только на кафедре СП емнип. Про отладчик было примерно поллекции, я выше давал ссылку на книжку Машечкина по операционным системам, она в точности по лекциям, так что можешь обмазаться. Там про трассировку, точки останова и вот это все.
>>510799
Не, пока еще студент. Ну, во-первых, пошарь по сайтам погроммистских кафедр, это cs.msu.su с префиксами al. , sp. , asvk. Еще есть http://esyr.nizm.ru/ и http://tka4.org/materials/, там много материалов.
мимооп
#487 #510913
>>510705
замени hash_map на unordered_map, заинклудь <unordered_map>, измени подсистему в настройках проекта на /SUBSYSTEM:CONSOLE (Project->Properties->Linker->System->SubSystem)
#488 #510915
>>510805
По поводу обработчиков сигналов - это довольно просто, лол. В nix процессы могут посылать друг другу сигналы это просто числа, которые обозначаются как константы через #define, например, SIGKILL, эти сигналы передаются и обрабатываются отдельно от потоков ввода-вывода, файлов и других инструментов взаимодействия. Когда процесс получает сигнал например, нажатие Ctrl+C в консоли посылает SIGINT работающей программе, ищется обработчик сигнала с таким номером и вызывается. Обработчик это просто функция вида void func (int), в параметр ей суется номер сигнала. Процесс имеет изначально обработчики по умолчанию которые при получении сигнала вырубают процесс нахуй, но если тебе не нравится, то ты можешь переопределить обработчик на кастомный. Для этого есть функция signal, она выглядит как void (signal(int sig, void (*func)(int)))(int), то бишь принимает номер сигнала и указатель на новый обработчик, заменяет его, и возвращает указатель на старый обработчик. Вот и все. Но это такие дебри Pure C, лол, в крестах обходятся без такой хуйни обычно.
#489 #510920
>>510915
Еще один долбоеб со спойлерами вместо скобок.
#490 #511015
Ну посоветуйте что-нибудь по алгоритмам. А то вот все пиздят, мол главное чтоб знал АЛГОРИТМЫ. А я вообще не знаю, что это значит. Я что, должен запомнить какие-то алгоритмы как паттерны и уметь ебашить их по памяти? Например на листочке написать кучу разных методов сортировке? Выглядит это все так, как будто нахуй не нужно. Что почитать вообщем, чтоб на работе сказали маладца, как устраиваться буду.
#491 #511027
>>511015
Кормен, Лейзерсон - Алгоритмы: Построение и анализ.
Бентли - Жемчужины программирования.
Уоррен мл. - Алгоритмические трюки для программистов.
#492 #511028
>>511015

>А то вот все пиздят, мол главное чтоб знал АЛГОРИТМЫ.


Вообщем-то правильно пиздят, но не совсем. АЛГОРИТМЫ - это не знание, это навык\способность\умение - приходит с опытом. Чем больше ты реализуешь алгоритмов, тем больше опыта ты набираешься. Так что гоу в сортировку. Научисть в блок-схему алгоритма. Пойми рекурсию. Потом всякие стеки очереди реализуй. Потом деревья, кольцевые буферы и всякие там скип-листы. Потом разберись с потокбезопасностью - критические секции, мутексы, семафоры, спин-локи и пр. Потом всякие потокобезопасные lock-free, wait-free алгоритмы на interlocked-операциях ебашь, узнай что-такое ordering, cache-line и false sharing. Как-то так.

>Выглядит это все так, как будто нахуй не нужно.


Только это и нужно. ЯП - это вторичное, тебе к тому времени уже должно быть похуй на каком языке\парадигме и под какую ОС что писать.
QT QML #493 #511032
Может тут есть знатоки QT QML и при этом еще и альтруисты. Очень нужно проконсультироваться по некоторым нубским вопросам. Много времени не отниму. Если кто готов помочь - добавляйтесь в скайп icy_ua. Спасибо.
#494 #511038
>>511028

>приходит с опытом


Ну ко мне то что нужно пришло, так как программирую для себя уже хуй знает сколько лет. Просто хочу надрочиться в этом, чтоб сказать: "Да, алгоритмы знаю". Советы схоронил, книжки >>511027 тоже. Спасибо.
31 Кб, 600x500
#495 #511097
Сап, программач. Подкиньте пожалуйста годных статей и мануалов по работе с .xlsx файлами (чтение из, запись в), молю!
#497 #511109
Анон, я в замешательстве. Есть след. программа (заметь, функция hello_anon не шаблонная):

void hello_anon(int&& i)
{
cout<<"i = "<<i<<endl;
i=100500;
}

int main()
{
hello_anon(10); //ok
int tmp=20;
//hello_anon(tmp); //error lvalue to rvalue
hello_anon((int&&)(tmp)); //ok
cout<<"tmp = "<<tmp<<endl; //tmp=100500

int tmp2=30;
hello_anon((int)(tmp2)); //ok
cout<<"tmp2 = "<<tmp2<<endl; //tmp2=30
return 0;
}

Так вот, в чем вопрос: мне всегда казалось, что приведение типов никак не влияет на передаваемые данные, это просто способ обойти ограничения компилятора, однако tmp и tmp2 ведут себя по разному, получается приведение типов генерит какой-то код?
#498 #511112
>>511109
Передаешь 10 - rvalue передается, печатается, устанавливается в 100500 и исчезает.
Передаешь tmp - компилятор не дает передать и испортить lvalue.
Передаешь (int &&) (tmp) - аналогично std::move ты показываешь, что tmp можно портить как rvalue. Сгенерится ссылка и передастся в функцию, как и в случае 10. Код будет такой же как для 10, ибо приведение указателей не генерит нового кода если нет приведения между наследующими классами, у которых смещения разные.
Передаешь (int)(tmp2) - здесь ты приводишь не указатели, а значения. Поэтому вызовется "конструктор" int на самом деле у int нет конструктора, но упрощенно можно считать, что произойдет то же, что при конструировании нового объекта класса, ведь даже синтаксис тут фактически соответствует: ты пишешь int (tmp2), вот тебе и конструктор. В итоге tmp2 скопируется во временный rvalue int, и уже ссылка на него будет передана в функцию. Этот временный int изменится на 100500, а старый, разумеется, нет. А разгадка одна - приведение не для указателей, а для самих объектов очень даже может генерировать код и не только явное, например, int в double приводится не бесплатно, хранятся они совершенно по-разному.
#499 #511120
что лучше начинать читать? советуют прата и страуструпа, не знаю что выбрать
#501 #518870
>>511122
Бамп.
Тред утонул или удален.
Это копия, сохраненная 4 августа 2015 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски