М.Двач / Программирование

Двач.hk не отвечает.
Вы видите копию треда, сохраненную 15 октября 2015 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.

103 Кб, 543x640

Оффициальный™ традиционный® C++ тред #6 31 Авг, 01:29 #537129 В конец треда | Веб

Узрев Их треда мрачную громаду,
Я хоронился за Вождем, как мог,
Чтобы от Них мне обрести пощаду.

Мы были там, - мне страшно этих строк, -
Где крестобляди в недрах говнокода
Сквозят глубоко, как в стекле сучок.

Кто - сгинул в функторах, монад не зная брода,
Кто - отстрелил ступню, забыв про lock (),
А кто - решив, что goto даст свободу.

Литература:

Для нюфань:
Три классических учебника для начинающих. Все примерно одинаковой годноты, читать имеет смысл только какой-нибудь один, который больше приглянется.
Герберт Шилдт - C++. Базовый курс (2010) - https://goo.gl/qMLAFl
Роберт Лафоре - Объектно-ориентированное программирование в C++ (2004) - https://goo.gl/QvjR6x
Стивен Прата - Язык программирования C++ (2012) - https://goo.gl/z7kA8u
Для желающих сразу начинать с Откровений Создателя - классика (может показаться суховатым):
Бьерн Страуструп - Программирование. Принципы и практика использования C++ (2009) - https://goo.gl/87qXtW

Учимся не писать говнокод:
Книги про основные подводные камни для тех, кто осилил предыдущий пункт. Следует пролистать все.
Скотт Мейерс - Эффективное использование C++ (2005) - https://goo.gl/wsDXGz
Скотт Мейерс - Наиболее эффективное использование C++ (1996) - https://goo.gl/tHa0tO
Скотт Мейерс - Effective Modern C++ (на ангельском) (2015) - https://goo.gl/uImH0J
Скотт Мейерс - Эффективное использование STL (2002) - https://goo.gl/QtS8Dc
Герб Саттер и Андрей Александреску - Стандарты программирования на языке C++ (2005) - https://goo.gl/Cpk4YR

Наиболее детальные описания языка:
Бьерн Страуструп - Язык программирования C++ (2010) - https://goo.gl/iZBDiV
Стандарт C++14 (на ангельском) - https://github.com/cplusplus/draft/raw/master/papers/n4140.pdf
Последняя на данный момент версия черновика стандарта C++17 (на ангельском) - http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4527.pdf

Тонкости языка (для гурманов):
Андрей Александреску - Современное проектирование на C++ (2002) - https://goo.gl/e1V5BC
Герб Саттер - Решение сложных задач на C++ (2002) - https://goo.gl/iWaa6S
Герб Саттер - Новые сложные задачи на C++ (2004) - https://goo.gl/4nn512
Также для легкого чтения подойдет книжка c историей создания C++:
Бьерн Страуструп - Дизайн и эволюция C++ (1994) - https://goo.gl/FqbPwo

Отдельные аспекты:
Читать по необходимости.
Энтони Уильямс - Параллельное программирование на C++ в действии (2012) - https://goo.gl/qJfBkD
Николаи Джоссатис - C++. Стандартная библиотека (2012) - https://goo.gl/PEyiMH
Дэвид Вандевурд, Николаи Джоссатис - Шаблоны C++. Справочник разработчика (2003) - https://goo.gl/0M4NpG
Роберт Седжвик - Фундаментальные алгоритмы на C++ (2001) - https://goo.gl/4jwxSl (части 1-4), https://goo.gl/yDuQgG (часть 5)

Ссылки:

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

Куда писать код:

Под шиндошс удобно использовать IDE Microsoft™ Visual Studio®. Базовую версию (2015 Community) можно бесплатно скачать, следуя инструкциям с этой страницы: https://www.visualstudio.com/ru-ru/products/free-developer-offers-vs.aspx. Чтобы начать писать код, нужно запустить Visual Studio, кликнуть "Файл - Создать - Проект - Пустой проект", после создания кликнуть слева правой кнопкой мыши по пункту "Файлы исходного кода", выбрать "Добавить - Создать элемент - Файл C++". Свои хэллоуворлды писать в этот файл, в дальнейшем можно добавить другие файлы и хедеры. Чтобы скомпилировать и запустить проект, нужно нажать "Сборка - Собрать решение", а затем "Отладка - Запуск без отладки".

Под *nix, как правило, уже предустановлен компилятор gcc (если нет, используй sudo aptitude install gcc), так что достаточно сохранить хэллоуворлд, набранный в текстовом редакторе, и выполнить g++ helloworld.cpp и ./a.out. Но удобнее установить какую-нибудь IDE, например, Code::Blocks (sudo aptitude install codeblocks) и работать в ней.

Можно также не устанавливать ничего, а запускать свои хэллоуворлды на http://ideone.com, выбрав в левом нижнем углу язык C++14.

Памятка:

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

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

Предыдущий: >>531254 (OP)

31 Авг, 01:32 #2 #537132

Предыдущие треды на архиваче:
https://arhivach.org/thread/94971/
https://arhivach.org/thread/94972/
https://arhivach.org/thread/99414/
https://arhivach.org/thread/100995/
http://arhivach.org/thread/105148/

Обновления шапки:
Добавлена книга Седжвика по алгоритмам.

31 Авг, 10:47 #3 #537250

>>537129 (OP)
> Оффициальный
Ну предупреждал же на ф.

Ответы: >>537251

31 Авг, 10:49 #4 #537251

>>537250
> на
одна*

И оп пик твой говно. Где связь с С++? Не мог с форчана/редита/другой хуйни спиздить нормальный пик?

Ответы: >>537257, >>537261

31 Авг, 11:02 #5 #537257

>>537251
>Куча
>Где связь с С++ ?
Совсем ньюфаг?

Ответы: >>537263

31 Авг, 11:13 #6 #537261

>>537251
Няш, у нас тут своя атмосфера. Ты бы сперва посидел, посмотрел, как тут все заведено, ну серьезно.

Ответы: >>537263

31 Авг, 11:18 #7 #537263

>>537261
Ну откуда тогда две буквы ф? Прошлый тред как тред. Только ОП-хуй. А стишок в начале шапки зачем? Пусть бы лучше описание книг сделали чтобы не спрашивать у вас совета, а сразу читать шапку и выбрать что читать.
>>537257
Совсем не понятно пока не пояснить.

Ответы: >>537266, >>537267

31 Авг, 11:19 #8 #537264

И жабаскрипт зачем? В ньюфаг треде есть. Тут его копипастить зачем?

Ответы: >>537267

31 Авг, 11:27 #9 #537266

>>537263
Это про heap corruption, видимо. Довольно прикольный эффект, когда изначально смешная картинка для двощеров получает двойное дно, будучи запосщенной в С++-треде. Она это охуенно.

31 Авг, 11:29 #10 #537267

>>537263
"Оффициальный™" это традиционное для борд написание которое происходит из ошибки опа куклоебских тредов, смекаешь, мой маленький ньюфажный друг? Иди и почитай лурку, или что там у вас сейчас модное про мемесы. Прошлый тред, как и позапрошлый, были с таким же написанием. Стихи в начале шапки потому что это красиво и привлекает внимание. Краткое описание книг там есть, если сделать больше, то шапка раздуется и ее не будут читать. Гораздо проще просто открыть заинтересовавшую книгу и посмотреть, что в ней.
>>537264
Жабаскрипт чтобы было удобно поставить его без перехода в ньюфаг-тред. И еще для долбящихся в глаза.

Ответы: >>537268

31 Авг, 11:35 #11 #537268

>>537267
Ладно. Страдайте тем чем страдаете дальше. Своя атмосфера у них. Может вы ещё все друг друга знаете? Только поясните за длл библиотеки и виртуальные функции. Между ними есть связь? Какая?

Ответы: >>537272, >>537296

31 Авг, 11:38 #12 #537272

>>537268
Ты можешь импортировать и экспортировать в дллки виртуальные функции так же, как и обычные.

Ответы: >>537275

31 Авг, 11:42 #13 #537275

>>537272
В длл хранится определение функции? Любой? Реквестирую чего нибудь про длл почитать. Можно в длл базовый класс положить и разные программы для разных целей его потом использовать будут? Можно екзшеник и длл на разных языках писать?

Ответы: >>537283

31 Авг, 11:58 #14 #537283

>>537275
Да, определение. Не любой, там есть исключения, но я не распишу тебе за них, потому что сам почти не сталкивался. Почитать вот здесь: http://rsdn.ru/article/baseserv/dlluse.xml Базовый класс положить нельзя, потому что dll предоставляет механизм импорта только функций. Тебе придется все равно явно подключать общий для однотипных дллок хэдер, в котором будет определение класса, но вот потом разные дллки могут по-разному реализовывать его методы. Подводных камней много, поэтому лучше и безопаснее выделить в дллки только глобальные функции. Писать на разных языках можно, можно на одном языке, но компилировать разными компиляторами. Но в обоих этих случаях надо следить, чтобы соглашения о вызовах соответствовали.

Ответы: >>537284

31 Авг, 12:03 #15 #537284

>>537283
Спасибо. Почитаю.

31 Авг, 12:24 #16 #537296

>>537268
c++ abi нет и не будет
просто если пишешь modern c++ приложение, делаешь его одним екзешником, используя static linking

01 Сен, 07:20 #17 #537750

Ананасы, необходимо написать виртуальный драйвер HID-устройства с поддержкой XInput, но нихуя не понятно. Смотрел примеры драйверов с MSDN, но там на HID 4 примера и все совсем не о том, на самом MSDN вообще каша какая-то о драйверах вообще. Накидайте ссылок, куда копать? Я понимаю, что уйдет прилично времени на вникание в это говно, но надо хоть что-то почитать.

Ответы: >>537751, >>537785

01 Сен, 07:23 #18 #537751

>>537750
https://code.google.com/p/ds4-tool/ ?

Ответы: >>537766

01 Сен, 08:27 #19 #537766

>>537751
> Wrapper
> .cs
Смешно. Давай по новой.

01 Сен, 09:48 #20 #537785

>>537750
Wasm

Ответы: >>537786

01 Сен, 09:54 #21 #537786

>>537785
Годно, но не протухло ли уже? Не обосрусь ли с WDK 10?

01 Сен, 20:41 #22 #538045

В чём ошибка? Запускается, а ОК не выводит.
https://ideone.com/GZICB0

Ответы: >>538050, >>538152

01 Сен, 20:54 #23 #538050

>>538045
Запусти оффлайн в режиме отладки и посмотрю, что там происходит, и где вылетает.

Ответы: >>538054

01 Сен, 20:58 #24 #538054

>>538050
>оффлайн в режиме отладки
Я не умею.

Ответы: >>538070

01 Сен, 21:16 #25 #538066

Аноны, что почитать по поводу работы с железом (а именно с usb устройствами)? Интересует всё по данной тематике: написание драйверов, разработка программ для обработки/отправки/получения информации с устройства и т.п.

01 Сен, 21:24 #26 #538070

>>538054
Научись. На ideone нихуя не удобно будет.

Ответы: >>538078

40 Кб, 323x553

01 Сен, 21:41 #27 #538078

>>538070
Я и на ideone не умею. Пользуюсь кодблоксом и gcc из коробки. Вроде дебагер какой-то установлен. Есть ещё такая менюшка.Что делать чтобы он по шагам нормально разбирал?

Ответы: >>538131

01 Сен, 22:59 #28 #538131

>>538078
Просто жмешь Shift-F7 для шага с заходом в функции, Ctrl-F7 для шага с обходом функций, там же написано. Или ставишь брейкпоинты в нужных местах и жмешь F8, он каждый раз будет останавливаться на ближайшем.

Ответы: >>538134

01 Сен, 23:05 #29 #538134

>>538131
Брэкпоинт это он дайдёт до нужно точки а потом на ф7 идти самому?

Ответы: >>538143

25 Кб, 416x287

01 Сен, 23:27 #30 #538143

>>538134
Ага. Ты, блядь, на крестах тоже с орфографическими ошибками пишешь? Тогда понятно, чому твой хэллоуворлд не работает.

01 Сен, 23:51 #31 #538152

>>538045
Начнём с того, что ты вообще не понимаешь что написал.

1. Алгоритм Евклида - открываешь в википедии и читаешь условия остановки цикла.

2. Нахуй тебе if в коде и переменная c одновременно? Тут либо сверяй в каждой итерации, либо меняй местами в каждой итерации, так чтобы в b всегда хранилось меньшее число.

3. Посмотри на условие в while и посмотри на return, теперь усиленно думай, что тебе вернёт функция. Учитывая, что деление целочисленных на ноль - undefined behaviour, компилятор с включённой оптимизацией может просто нахуй удалить весь цикл и вообще всё тело функции, соптимизировав до return 0; Теперь снова читай первый пункт этого поста.

А теперь об ошибке. На какой-то итерации, у тебя либо a, либо b становится равным нулю, из-за чего на следующей итерации ты делишь на ноль, что скорее всего и становится причиной ошибки.

Ответы: >>538157, >>538168

02 Сен, 00:03 #32 #538157

>>538152
> открываешь в википедии и читаешь условия остановки цикла.
Спасибо. Помогло.

Ответы: >>538160

02 Сен, 00:08 #33 #538160

>>538157
Ага, держи https://ideone.com/7nXGq5

02 Сен, 00:18 #34 #538168

>>538152
>На какой-то итерации
На первой прям.

02 Сен, 00:23 #35 #538175

>>537125
Какое ядро языка, к херам.
Попробуй отключить стандартные либы и вызови new.
Ни язык, ни компилятор нихера не знают о памяти, сколько её, где она, можно ли брать.

new в любом случае реализован в libstdc++. Да, он может использовать хитрые стратегии выделения памяти, но это нихера не часть компилятора. И нет никакого деления на "оператор new и функцию operator new".
Хочешь поспорить - давай пруфы. Например, для C++11 можешь покурить п. 5.3.4.

Ответы: >>538513

02 Сен, 01:16 #36 #538196

Кто-нибудь знает утилитку, которая умеет работать с комментариями в исходниках С++?
Чтобы выводила список всех комментов с возможностю их редактирования, автозамены, удаления и прочего.

Ответы: >>538253

02 Сен, 01:43 #37 #538209

Кто-нибудь ставил уже 2015 студию, как там с констэкспр массивами? Например, я хочу создать constexpr unsigned int[4] sizes, который заполняется constexpr функцией. Потом создать 4 массива: char[sizes[0]] first, char[sizes[1]] second, char[sizes[2]] third, char[sizes[3]] fourth.

Получится ли, или опять new delete вилкой чистить? И если получится, можно код в студию и скриншот, что 2015 студия это может? А то зазря 2013 сносить не хотелось бы.

Ответы: >>538515

02 Сен, 06:24 #38 #538253

>>538196
http://clang.llvm.org/docs/LibTooling.html

02 Сен, 18:15 #39 #538513

>>538175
Пруфы - любой учебник по крестам, в стандарте даже искать лень. Когда ты пишешь где-то в программе new, вызывается встроенный оператор new, который без участия стандартной библиотеки сделает три вещи: осуществит ADL-поиск функции с именем operator new (среди пользовательских, а затем уже, если не нашел, возьмет библиотечную, стандартный алгоритм поиска, короче), ее вызовом получит указатель на неинициализированную область памяти размером с твой объект, вызовет для нее конструктор объекта. Эту последовательность никак нельзя изменить, скажем, нельзя поменять код библиотеки, чтобы по new происходило что-то другое, потому что оператор new встроенный, а не библиотечный.

Соответственно, без проблем можно отключить стандартные либы и вызывать new, если ты даешь свою operator new вместо библиотечной, потому что в этом случае ADL-поиск остановится на твоей функции, и библиотечная не понадобится. Но оператор new останется ровно тем же, встроенным, и последовательность его действий никак не изменится.

Хитрые стратегии и все тому подобное реализуются уже внутри именно функции operator new, а не оператора new, что библиотечные, что пользовательские. Я не утверждал, что вся эта хитрая функциональность является встроенной в компилятор, а поправил твою терминологию тем постом. Оператор new != функция operator new.

Ответы: >>538675

14 Кб, 664x244

02 Сен, 18:21 #40 #538515

>>538209

Ответы: >>538811

02 Сен, 18:51 #41 #538528

Байтоебы а вам аналог джавадок завезли?

Ответы: >>538539

02 Сен, 19:19 #42 #538539

>>538528
Не нужно
Doxygen, qdoc

Ответы: >>539015

03 Сен, 00:08 #43 #538675

>>538513
Тем своим постом ты сморозил хрень, а не поправил. Можешь теперь даже и не выкручиваться. Учебники идут в жопу - стандарт первичен и смотреть нужно в нём, а в учебнике можно любую хрень написать - истиной она не станет.
Я говорил что единственная "непользовательская" реализация new находится в стандартной библиотеке. Другой нет. И вызывать компилятор будет её. А ты предложил "не путать её с несуществующим встроенным оператором new". Куда, блядь, встроенным?

Ответы: >>538731, >>538784

03 Сен, 02:25 #44 #538731

>>538675
Тебе написали - не путай оператор new и функцию operator new. Когда компилятор видит оператор new, он по умолчанию вызывает функцию operator new.

03 Сен, 07:30 #45 #538784

>>538675
Перечитай мой пост еще раз. Ты путаешь операторы и операции, блядь. int * tvoya_mamka = new int (1) - здесь встроенный оператор new сделает жестко зашитую последовательность действий, в.т.ч. вызовет видимую операцию operator new. Так работают все операторы - вызывают соответствующую операцию и, возможно, делают что-то еще.

03 Сен, 09:34 #46 #538811

>>538515
Хорошо. Усложним вопрос: если мне нужен констэкспр массив, который получается в результате констэкспр функции?

Т.е. например у меня есть констрэкспрмассив из 6 значений 1, 3, 4, 7, 8, 9 например, и из него нужно констрэкспрмассив:

1
1x3
1x3x4
1x3x4x7
1x3x4x7x8
1x3x4x7x8x9

И уже эти значения размеры массивов чар.

Как это сделать? Будет ли работать в 2015 студии?

Ответы: >>538857

03 Сен, 09:45 #47 #538814

Как узнать задать порядок байтов для uint16_t ? Т.е. условно говоря, я хочу реинтерпретировать uint16_t как два подряд значения uint8_t:

uint16_t = 1 << 2; //byte order is unknown: 00000000 00000100 or 00000100 00000000

А я хочу в первый байт записать 00000000, а во второй 00000100. С реинтерпрет_кастом как это сделать? Скорость не критична, мне это всего для одного значения сделать надо, сишные библиотеки не нужны.

Ответы: >>538818, >>538845, >>538848, >>538859

03 Сен, 10:01 #48 #538818

>>538814
Не нужен тут каст, union'а достаточно. Вот тебе из интернета:
typedef union { unsigned int value; unsigned char lo, hi; } _intchars;
_intchars data;
unsigned int value;
unsigned char lo, hi;
data.value = value;
lo = data.lo;
hi = data.hi;

Ответы: >>538833

03 Сен, 10:49 #49 #538833

>>538818
Почитал на en.cppreference.com про union, интересно. Но что-то больно часто в тексте статьи undefined behaviour встречается. Да и ради одного значения какую-то сложную структуру городить не хотелось бы. Можно всё-таки через присваивание, например, uint8_t[2] значению uint16_t с помощью reinterpret_cast ?

03 Сен, 11:23 #50 #538845

>>538814
Ну так и запиши, лол. Байтоёб ты или нет?
https://ideone.com/vwR7NF

Ответы: >>539316

03 Сен, 11:34 #51 #538848

>>538814
Зачем тебе реинтерпрет каст? Нужен обычный каст перед сдвигом старшего байта влево.
https://ideone.com/OKZAY7
Если сделать в две строчки (сначала первый байт присвоить data а потом сдвигать уже data) то можно и без явного каста обойтись (будет неявное приведение при присваивании) но смысла нет лишний код писать. Если не использовать reinterpret_cast то порядок битов в числе не важен. Он может быть важен если ты свои байты передаешь через что-то. А если упаковываешь/распаковываешь в пределах одной исстемы то похуй какой он там. И использовать reinterpret_cast, если ты конечно не хочешь отстрелить себе ногу по самое ебало, не нужно. Только в специфических случаях когда без него не обойтись.

Ответы: >>539316

03 Сен, 11:49 #52 #538857

>>538811
х это умножение или размерность новых массивов? Не совсем понял тебя.

Ответы: >>539139

03 Сен, 11:54 #53 #538859

>>538814
Младший байт : num & 255.
Старший байт: (num >> 8) & 255.
И дальше static_cast в однобайтовое, reinterpret не нужен здесь.

Ответы: >>539316

03 Сен, 16:48 #54 #538995

Товарищи байтоебы, т.к. писать тырпрайз пять дней в неделю меня заебало, я решил подрочить на указатели в свободное время. Какие книги в шапке ориентированы на современные стандарты крестов? Прата мне подойдет?
На цпп последний раз писал в универе, когда еще никакого c++11 не было даже и помню только базовые вещи, вроде чем указатель от ссылки отличается и что нельзя забывать про очистку памяти. ООП уже по дотнету изучал.

Ответы: >>538998

03 Сен, 16:50 #55 #538997

>>537129 (OP)
>Тег [code] работает через жабаскрипт-костыль: https://github.com/ololoepepe/MakabaCode
Хм, накатил, а ничего не поменялось, где были теги [CODE][code][/CODE] там и остались.

Ответы: >>539523

03 Сен, 16:52 #56 #538998

>>538995
Страуструпа читай. Либо если знаешь более менее старый C++, почитай Мейерса про C++11, C++14

03 Сен, 17:11 #57 #539015

>>538539
ну как не нужно
если пишешь либу, но для интерфейсных функций оформляешь доку в doxygen
удобно же - потом эту доку можно в два клика выплевывать хоть в html, размещая на сайте, хоть в pdf
при этом и собственно код, и разясняющая документация к нему будет в одном месте, под одной системой контроля версий

03 Сен, 17:29 #58 #539024

Анон, а поясни за future continuations. Когда вообще завезут их в бусте-то уже давно есть, блядь? Герб вроде пилил, что в VS2015 ввели resumable functions и async/await синтаксис, а в концепте семнадцатого стандарта они идут вместе. Но студия нихуя не переваривает future::then (), да и вообще нигде нет про это инфы, кроме видео с конфы.

03 Сен, 20:56 #59 #539139

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

Ответы: >>539153, >>539158

03 Сен, 21:29 #60 #539153

>>539139
Используюй •, отец.

25 Кб, 832x448

03 Сен, 21:37 #61 #539158

>>539139
Массив это не первоклассный объект, поэтому функция не может возвращать его, в.т.ч. и constexpr. Обычно возврат массива эмулируется указателем, но тогда, понятное дело, constexpr вставить не получится, ибо указатели во время компиляции это хуйня какая-то. Для решения твоей задачи легче всего юзать метапрограммирование. Пикрелейтед.

Ответы: >>539187, >>539319

03 Сен, 22:16 #62 #539187

>>539158
Прочитал 2 учебника страуструпа и половину лафоре, а про constexpr нигде не поминается. Наверняка я много чего ещё не знаю что в новых стандартах ввели. Где почитать?

Ответы: >>539211

03 Сен, 23:13 #63 #539211

>>539187
Прата в оппосте уже с фичами из C++11. И в Скотт Мейерс - Effective Modern C++ про нововведения.

04 Сен, 00:29 #64 #539288

В книжках для нубов разжевывается синтаксис и ему подобное, но нигде ни слова как толком кодить под винду. Есть годны мануалы для тех, кто хочет написать свой первый калькулятор с гуем?

Ответы: >>539299

04 Сен, 00:39 #65 #539299

>>539288
Ivan Horton's Beginning visual c++

Ответы: >>539325

04 Сен, 01:07 #66 #539316

>>538845
Спасибо огромное, ты единственный, видимо, кто понял, что именно мне нужно — безо всяких union'ов, подключений дополнительных библиотек (например #include <bitset> это вообще конечно из гаубицы по воробьям), а другие >>538848 >>538859 , по ходу, вообще не поняли, что мне нужно. Переписал твой код через reinterpret_cast<uint8_t*>(&a) — чтобы явно обозначить тип приведения в стиле C++

>uint16_t a;
>reinterpret_cast<uint8_t@>(&a)[0] = 0;
>reinterpret_cast<uint8_t@>(&a)[1] = 1U << 2; //00000000 00000100
>std::cout << a << '\n'; //depends on CPU/OS/protocol: with the least first byte a == 1024

Кстати, я правильно понимаю, что reinterpret_cast должен быть "бесплатным", т.е. самым быстрым среди всех возможных кастов?

Ответы: >>540050, >>540089

04 Сен, 01:11 #67 #539319

>>539158
Спасибо, но оно того не стоит. Но всё равно спасибо, что объяснил, а то бы терзался, считая что это студия мне мешает, а не "не так всё просто".

04 Сен, 01:30 #68 #539325

>>539299
Она ж 98 года? Мне тут вообще говорят что нынче проще нахуярить винформ на C#, а внутри логику если уж так надо на C++. Неужто все настолько плохо?

Ответы: >>539330

04 Сен, 01:40 #69 #539330

>>539325
Есть 2013 года.

04 Сен, 01:46 #70 #539333

std::ofstream ofs;
ofs.open(filename, std::ios::binary);

У меня есть цикл записи
for (int i = 0; i < n; ++i) ofs.write(reinterpret_cast<const char*>(some_array), some_array_i_size);

some_array_i_size один и тот же для любого i

А теперь я хочу необычного. Я хочу, чтобы каждый проход цикла файл писал some_array не только подряд, но и отшагивал вперёд на n X some_array_i_size байт, писал туда тоже some_array, и затем отшагивал назад на n X some_array_i_size байт. Т.е. на последнюю итерацию файл "сошьётся" последней итерацией его первой половины с первой итерацией второй половины.

Такое вообще возможно сделать, и если да, то как?

Ответы: >>539344

sage 04 Сен, 02:45 #71 #539344

>>539333
http://www.cplusplus.com/reference/ostream/ostream/tellp/
http://www.cplusplus.com/reference/ostream/ostream/seekp/

Ответы: >>539345, >>539655

04 Сен, 02:46 #72 #539345

>>539344
.

04 Сен, 14:24 #73 #539523

>>538997
Бамп, почему не работает?

Ответы: >>539584

Andre 04 Сен, 14:59 #74 #539555

Есть ли смысл учить кресты сейчас? Вкатится в геймдев или просто в программироаание планирую года через 2-3

Ответы: >>539712

04 Сен, 15:53 #75 #539584

>>539523
У меня все работает. Надо писать в квадратных скобках code lang="cpp" и /code.

04 Сен, 18:08 #76 #539655

>>539344
Т.е. можно тупо прыгать вперёд, записывать, прыгать назад и т.д.? Очень хорошо, я не думал, что всё так просто. Очевидно, прыгать назад всегда можно, но вот насчёт вперёд я просто предположить не мог. Тогда предполагаемый костяк решения выглядит как-то так:

http://ideone.com/GbatXp

Онлайн-компиляторы не позволяют писать файлы, сейчас я не дома а работы у меня нет, можешь глянуть, так ли работает? Содержимое файла file.txt должно выглядеть следующим образом:

abcXYZabcXYZABCxyzABCxyz

Если нет, то где я ошибся.

Ответы: >>539716

04 Сен, 19:08 #77 #539712

>>539555
нет, конечно
выучишь за пару недель

Ответы: >>539803

04 Сен, 19:14 #78 #539716

>>539655
abcabcabcabcABCABCABCABC в файле после выполнения. И еще предупреждения при компиляции, что возможны потери при касте в int в 14 строке, надо size_t юзать.

Ответы: >>539859

04 Сен, 20:50 #79 #539803

>>539712
А нормальные ответы будут ?

Я планирую потратить на изучение языка минимум 2 года усердно, а то и 3 и только потом пробовать идти джуниором. Просто думаю что учить кресты или С#

Ответы: >>539874, >>539966, >>540051

04 Сен, 21:34 #80 #539859

>>539716
Ой, ну там остаток от деления i на 2, а не n, ну вы же догадались. Предупреждение херня, какое переполнение для десятка чаров.

04 Сен, 21:44 #81 #539874

>>539803
>Я планирую потратить на изучение языка минимум 2 года усердно, а то и 3 и только потом пробовать идти джуниором. Просто думаю что учить кресты или С#

А я через 3 месяца пошел на стажировку, потом ещё через 5 месяцев был уже джуном. А через два года - миддлом.
Назревает закономерный вопрос - зачем тебе въебывать 3 года на говно и мочу, если ты можешь быстро выучить основы и пойти работать в компанию, где тебя будут пинать опытные коллеги и делиться мудрыми советами %%соснуть хуйцеов и сделать бочку?

Ответы: >>541087

04 Сен, 23:25 #82 #539966

>>539803
Учить нужно на практике же, а не по примерам из книжек. Если есть идеи для пробных проектов, и можешь себе позволить тратить на них каждый день сравнимое с фуллтайм-работой время, то вперед. Пилишь проекты, учишь на деле язык, IDE, VCS и вот это все. Потом будешь сразу с годным портфолио на гитхабе устраиваться. Если на такое нет времени/сил/желания, то лучше даже не рыпайся. Выучишь через два года самые основы по книжке для ньюфагов и устроишься макакой, будешь работать и учиться в процессе.

Ответы: >>540229

05 Сен, 03:44 #83 #540044

Мамкин шизик, отучившийся на погроммиста(причем усвоивший что-то) спрашивает:
Где плюсы сейчас реально нужны кроме геймдева и отсталых контор, платящих копейки?
Интересно, потому что хочу кодить именно на плюсах, с C# и java знаком.
Есть ли спрос на написание многопоточного кода на плюсах(OpenMP, MPI, OpenCL)? Есть шансы на фрилансе чё-нить годного словить по плюсам?
Что там насчёт высокоматематичных отраслей вроде Digital signal processing, Image Processing, High perfomance computing, machine learning - есть спрос и можно ли устроиться туда после самостоятельного освоения мат. части по ним?

Ответы: >>540060

05 Сен, 04:25 #84 #540050

>>539316
Поясните чем С++ касты отличаются от сишного?
Можно написать:
uint16_t a = 0;
(uint8_t)(&a)[1] = 1 << 2;

Ответы: >>540052

05 Сен, 04:26 #85 #540051

>>539803
>Я планирую потратить на изучение языка минимум 2 года усердно
> Цепепе
> учить 2 года

Цепепе это такая параша для управления тем, куда какой байт послать. Она не может быть сложной по определению.

05 Сен, 04:28 #86 #540052

>>540050
На SO это уже over 5 раз перетёрто.

http://stackoverflow.com/a/332086

Ответы: >>540054, >>540774

05 Сен, 04:35 #87 #540054

>>540052
Нихуя не понимаю. Пока что мой английский позволяет мне читать только детские книжки. А гугл переводчик вообще ебанулся.
>например, Int плавать, или указатель к мочеиспусканию

Ответы: >>540055

05 Сен, 04:36 #88 #540055

>>540054
> не знает английского
> лезет в программирование
/зк/ во всей красе

Ответы: >>540056

05 Сен, 04:40 #89 #540056

>>540055
Я учу английский. Обычно могу понять что пишут на SO. Но тут видимо какая то заумная хуета написана, как и на русскоязычных сайтах про эти касты. Объясните как для даунов. В чем преимущество перед сишным кастом?

Ответы: >>540058

05 Сен, 05:15 #90 #540058

>>540056
Прежде всего в том, что можно сделать grep (find in files) и найти все места, где оно используется. Особенно дурно пахнущий reinterpret_cast.
Плюс, ты четко указываешь, что конкретно тебе нужно - просто убрать const у типа, изменить предка на потомка (static_cast - без проверки во время выполнения, dynamic_cast - с проверкой) или же тупо переопределить область памяти.

Ответы: >>540059

05 Сен, 05:17 #91 #540059

>>540058
>Прежде всего в том, что можно сделать grep (find in files) и найти все места, где оно используется.
Комитет по стандартизации C++ именно этим "прежде всего" руководствовался.

Ответы: >>540060

05 Сен, 05:19 #92 #540060

>>540059
По-моему это инициатива лично Страуструпа, которая описана в Дизайне и эволюции.
>>540044
Там же где и 10 лет назад - когда нужна бескомпромиссная производительность. Просто постепенно какие-то задачи (типа текстовых редакторов) уходят из ниши, а другие - приходят.
> Есть шансы на фрилансе чё-нить годного словить по плюсам?
Есть. Смотри в сторону CUDA, OpenCL, OpenCV.

05 Сен, 08:08 #93 #540074

Спорю, что /зк/ не сможет рассказать разницу между возвращаемым типом auto и decltype(auto) по памяти, не лазая в стандарты или ещё куда.

Ответы: >>540197

05 Сен, 09:05 #94 #540089

Знатоки кастов, ответьте на вопрос в конце этого >>539316 сообщения. Я правильно понимаю, что по скорости выполнения от самого быстрого (первый сверху) до самого медленного:

const_cast
reinterpret_cast
static_cast
dynamic_cast

Ответы: >>540094

05 Сен, 09:17 #95 #540094

>>540089
Нет. В рантайме работает только dynamic_cast, он "медленный". Остальные просто отключают разные проверки типов у компилятора.

Ответы: >>540096, >>540104

05 Сен, 09:27 #96 #540096

>>540094
В основном так но static_cast может добавлять инструкции которые будут выполнятся в рантайме и необходимы для конвертации, например переменную типа int нельзя превратить в double с помощью reinterpret_cast, а с помощью статик каста можно и это будет сделано с помощью дополнительных иструкций. Но в случаях когда reinterpret_cast применим, использование статик каста тоже не добавит инструкций, хотя тут я не уверен конечно.

Ответы: >>540117

05 Сен, 10:05 #97 #540104

>>540094
Ну и как у тебя знаковый тип одной разрядности конвертнётся в знаковый тип другой разрядности в статик касте? С беззнаковыми типами всё просто, дописать или отбросить нужное количество нулевых старших байтов можно ещё на этапе компиляции.

Ответы: >>540117

05 Сен, 10:46 #98 #540117

>>540096>>540104
Сорян, пацаны. Так-то есть еще операторы приведения типа, которые могут и жесткий диск форматнуть. Но в целом обычно static_cast быстр.

05 Сен, 11:52 #99 #540148

Сап, плюсаны. Есть два класса, Foo и Bar, внутри Foo есть мембер Bar bar;. Как мне из Bar узнать адрес инстанса Foo, которому он принадлежит, не передавая его явно из конструктора Foo?

Ответы: >>540149

05 Сен, 11:55 #100 #540149

>>540148
Навскидку: взять адрес this в мембере bar и вычесть из него смещение мембера bar в Foo

Это навскидку. ХЗ, есть ли подводные камни, связанные с POD/не-POD и проч.

Ответы: >>540152

05 Сен, 12:02 #101 #540152

>>540149
> смещение мембера bar в Foo
Но я не могу его достать из самого Bar, только передать из конструктора Foo при создании и хранить внутри инстанса Bar, а этого я бы хотел избежать.

Хочется что-то вроде offsetof(Foo, this) внутри Bar, с шаблонным Bar<Foo>, но оно так не работает, потому что offsetof - это ебаный макрос, туда this не засунешь.

Ответы: >>540154

05 Сен, 12:05 #102 #540154

>>540152
> offsetof(Foo, this)
offsetof(Foo, bar) не пойдёт?

Ответы: >>540158

05 Сен, 12:09 #103 #540158

>>540154
А если есть несколько классов, в которых есть мемберы типа Bar и называются они по-разному?

Нашел вот такую пиздюлинку http://stackoverflow.com/a/709996, если я понял правильно - все оче плохо.

Ответы: >>540160, >>540161

05 Сен, 12:10 #104 #540160

>>540158
Запятая прилипла.

Ответы: >>540161

05 Сен, 12:20 #105 #540161

>>540158
>>540160
http://stackoverflow.com/a/709971
ну а это то, что предлагал я.

Ответы: >>540172

05 Сен, 12:35 #106 #540172

>>540161
Вот смотри: http://ideone.com/hQtsEN

Что дописать в offset(), чтобы и для bar, и для baz вывелись корректные смещения? То решение соснет, потому что предполагается, что в классе может быть только один Notifier.

Ответы: >>540176

05 Сен, 12:39 #107 #540176

>>540172
А, стоп, тупанул. Вот эта вот хуйня
>Notifier(Owner* owner);
портит всю малину, я именно этого и пытаюсь избежать. Я бы мог просто сделать

Foo(): bar(this, offsetof(Foo, bar)) {...}

и хранить смещение внутри Bar, но их блять охуиллиард и я не хочу тратить место.

05 Сен, 13:07 #108 #540197

>>540074
Я нихуя не понял, что такое decltype(auto)? Что тут такое auto?

05 Сен, 13:11 #109 #540200

Погодите ка, так с помощью static_cast можно вызвать конструктор или даже explicit конструктор конвертирования?

Ответы: >>540774

05 Сен, 16:53 #110 #540229

>>539966
>Если есть идеи для пробных проектов
А если идей нет, где спиздить чужие?

Ответы: >>540763

932 Кб, 1261x1000

09 Сен, 16:07 #111 #540763

>>540229
интернет + мозг. Полно FAQов с нубопроектами на любой вкус. Лови пример, на пике - рулетка тем.

Ответы: >>541039, >>541194, >>545211

09 Сен, 16:22 #112 #540774

>>540200
когда кастуешь сами типы, а не указатели на них - то да. А то как же ты новый инстанс без копирования создашь? Это как присвоить одному экземпляру другой - вызывается конструктор копирования(если есть). С указателями такой поеботы не надо как правило, но в случае кастов по иерархии наследования и множественном наследовании может понадобиться сдвинуть указатель(как я понимаю).
>>540052 кидал же толковую ссылку http://stackoverflow.com/a/332086 читайте.

92 Кб, 590x390

09 Сен, 17:59 #113 #540839

Есть "типа" распараллельный квиксорт http://pastebin.com/NxPW6F0D , который все равно выполняется в один поток, да еще и медленнее последовательного.

Не могу понять, почему std::async не создает новые треды. Правильно ли я понимаю, что с дефолтными флагами он должен обеспечить оптимальное количество тредов?

Или лучше такую задачу решать с пулом тредов?

Ответы: >>540873

09 Сен, 18:53 #114 #540873

>>540839
> std::async
Почитай документацию, там нужно флаг выставлять, он может как создавать новый поток, так и откладывать выполнение пока результат не потребуется (ленивость). Пул тредов тебе мало чем поможет. Оптимальное количество тредов тебе никто не обеспечит, это нужно самому думать. Конкретно в твоем случае на определенном размере списка его лучше отсортировать в одном потоке, а не разбивать на несколько. Твоя реализация будет скорее всего медленнее в любом случае кроме случаев типа сортировки 500 элементов на процессоре с тысячью ядер, из-за того что ты для сортировки двух элементов требуешь два потока. Вообще маленькие списки (3-5 элементов) лучше даже не квиксортом сортировать а пузырком каким-то, или дерево ифов ебнуть. Квиксорт много на рекурсивных вызовах (которые нихуя не бесплатные) производителности теряет. А если ты будешь списки из двух элементов сортировать простым ифом (а не еще одним вызовом квиксорта) - общее количество рекурсивных вызовов сократится вдвое, но алгоритм естественно не такой красивый будет.

Ответы: >>540906, >>540945

09 Сен, 19:52 #115 #540906

>>540873
>он может как создавать новый поток, так и откладывать выполнение пока результат не потребуется (ленивость)
Вот в том то и дело, что я не понимаю как он рабоает при обоих std::launch::async | std::launch::deferred, но если подать ему только std::launch::async он будет создавать треды безконтрольно. Т.е. в рекурсивной он непригоден, в отличие от cilk_spawn, но cilk я юзать не могу.

Сама сортировка меня не интересует. Я пытался разобраться в поведении std::async, думал оно похоже на cilk_spawn.

Ну и том спасибо.

Ответы: >>540946

09 Сен, 21:14 #116 #540945

>>540873
Так стандартный sort жи небось оптимизирует свои приватные методы с частичными сортировками для малых размеров. Лучше сделать, как Уильямс расписал в книжке. Запросить число ядер во внешнем вызове, разбить коллекцию на столько частей, для каждой сделать async с std::sort, а потом смерджить.

09 Сен, 21:16 #117 #540946

>>540906
Он тогда сам выбирает, исходя из внутренних соображений. Может, у тебя уже дохуя задач в системе висит, и она считает, что создание новых тредов только уменьшит скорость.

09 Сен, 23:33 #118 #541039

>>540763
ролл

10 Сен, 01:47 #119 #541087

>>539874
Можешь поподробнее рассказать что ты уже знал когда устраивался джуном? Я вот совсем скоро лафоре из оп-поста дочитаю и вообще не понимаю когда моих знаний будет достаточно что бы бегать по собеседованиям.

Ответы: >>542093

10 Сен, 13:47 #120 #541194

>>540763
Какой-то неровный список. Строку перевернуть - две строчки, хотя рядом вон например тетрис.

Ответы: >>541251

10 Сен, 14:53 #121 #541251

>>541194
Не две, а одна.
[code lang="cpp"]
std::reverse (std::begin (str), std::end (str));
[/cpp]

11 Сен, 11:25 #122 #541597

Задам вопрос, над которым давно уже думал. Почему что в чистом языке C, что в STL в C++ базовым типом является char, а не unsigned char? Для ввода/вывода и не только. Битовые сдвиги, вот это всё, ведь по стандарту однозначно определено для беззнаковых типов.

Ответы: >>541662

72 Кб, 200x283

11 Сен, 11:34 #123 #541601

Добавьте в шапку.

Ответы: >>541669, >>541705

11 Сен, 15:09 #124 #541662

>>541597
https://stackoverflow.com/questions/277655/why-do-c-streams-use-char-instead-of-unsigned-char

44 Кб, 350x442

11 Сен, 15:47 #125 #541669

>>541601
Лучше Эккеля добавить, годнота же.

Ответы: >>541671, >>541705

11 Сен, 15:56 #126 #541671

>>541669
на русском

Ответы: >>541672

305 Кб, 400x396

11 Сен, 16:08 #127 #541672

>>541671

Ответы: >>541674

11 Сен, 16:16 #128 #541674

>>541672
Теперь давай прямую ссылку на файл с книгой.

Ответы: >>541689

11 Сен, 16:59 #129 #541689

>>541674
ну я вот тебе нашел
держи

https://yadi.sk/d/ZXs4wYUSMdWVD

https://yadi.sk/d/w9VVj8wKMdXim

11 Сен, 17:40 #130 #541705

>>541601
Окай.
>>541669
Эккель зашкварен книгой про жабу же только на старый стандарт есть, не?

Ответы: >>541905

11 Сен, 20:42 #131 #541816

Сап, плюсач! Каким способом сгенерировать огромный массив рандомных целых чисел с огромным же диапазоном разброса? Ну допустим, стотыщмильенов чисел в интервале [1; стотыщмильенов]

Ответы: >>541820

11 Сен, 20:46 #132 #541820

>>541816
В чем проблема то? Числа слишком большие для примитивных типов? Или стандартный псевдорандом не устраивает?

Ответы: >>541823

11 Сен, 20:52 #133 #541823

>>541820
И то и другое

Ответы: >>541849, >>541858

11 Сен, 21:18 #134 #541849

>>541823
Огромность массива (если не лезет в память) побеждается подключением STXXL. Огромность чисел - подключением bigint. Генератор в std::generate можно использовать свой. Можешь, заюзав стандартный равномерный генератор интов (он хороший), по схеме Горнера построить число любого размера и пихнуть его в bigint. Такие числа, очевидно, тоже будут равномерно распределены.

11 Сен, 21:32 #135 #541858

>>541823
Еще байтоебский способ есть. Генерируешь обычным способом uint'ы, но большее количество, чем тебе надо чисел. Например, одно твое большое число можно составить из 20 uint'ов, тогда генеришь их в 20 раза больше. И сразу пишешь в файл в двоичном режиме. Теперь следи за руками. Генерированные числа равномерно распределены, значит их биты тоже (очевидно из формулы для маргинальных распределений), а тогда числа любого размера из этих же битов тоже будут равномерно распределены - биты-то независимы. Поэтому когда ты этот же файл интерпретируешь как последовательно записанные большие числа, сразу получишь нужный массив.

11 Сен, 21:52 #136 #541877

какая же неприятная штука этот microsoft visual. Всякие финтифлюшечки, ужас.

Ответы: >>541891

11 Сен, 22:16 #137 #541888

Воо мы выделили в плюсах под интовый массив на 20 мест память, явно указывая размер, но при удалени размер не указываем. Откуда берется размер при удалении?

Ответы: >>542004

11 Сен, 22:26 #138 #541891

>>541877
VS лучшее что случалось в мире разработки ПО

Ответы: >>541895

15 Кб, 489x130

11 Сен, 22:29 #139 #541893

>>537129 (OP)
>sudo aptitude
Ну ёбана, не пиши же ты прямо так команды для сосноли. Просто скажи, какой пакет накатить, там дальше сами разберутся в wiki дистра. Пакеты практически везде одинаково называются.

>Code::Blocks
Нахуй. Дропнутое девелом говно. Лучше уж CodeLite. Есть и под шиндовс 32/64. В сочетании с TDN-MinGW работает просто волшебно даже на десятке. Конечно, до VS не дотягивает по свистелкам-перделкам. Но самое нужное, вроде авто-завершения кода и риал-тайм подсветки ошибок, есть. А больше нахуй и не нужно на самом деле.

Алсо проиграл от треда - такой-то референс на нуль, при том что все треды на нулевой нормальные. Карма, хуле.

Ответы: >>542002, >>542003

11 Сен, 22:30 #140 #541895

>>541891

есть же dev c++

Ответы: >>541906, >>542006

11 Сен, 22:54 #141 #541905

>>541705
Второе издание 2003 год. Не самое новое, но вроде поновее того же Лафоре.

Ответы: >>542007

11 Сен, 22:55 #142 #541906

>>541895
>dev c++
Да понос это всё, рили.
После VS (а особенно начиная с 2015 Community) любая, любая, блядь, IDE покажется просто куском говна, которая только и умеет пердолиться в консоль и переменные среды. А также выдавать пачку ошибок в которых хуй чё поймёшь (дебилы даже не удосуживаются сохранить инфо об истории вызовов).
мимо-компайлю-дохуя-чего-под-моно

Ответы: >>541908

11 Сен, 23:01 #143 #541908

>>541906
Пожалуй соглашусь, хотя мне еще невероятно CodeLite доставляет в контексте си и плюсовой разработки. Нетбинсы и экслипсы по сравнению с ним то еще тормозное говно, причем с самыми неожиданными багами.

Ответы: >>541911

11 Сен, 23:06 #144 #541911

>>541908
Я сам на крестах в основном на CodeLite пишу (тащемта выше его и советовал). За clang code completion я их готов просто на руках носить. Эклипс вообще говно. Да пошли они нахуй JRE ставить ради редактора кода.

23 Кб, 402x536

12 Сен, 03:09 #145 #542002

>>541893
Попизди мне тут. Поломались треды, которые во время котосибирского шатания были на нулевой.

12 Сен, 03:13 #146 #542003

>>541893
Так раздел про куда кодить для совсем ньюфагов. Если ты можешь в менеджмент пакетов, то с хэллоуворлдом разберешься наверняка. Тем более, что под никсы много IDE и все говно, так что я указал самую известную и переносимую, которая, к тому же, есть в большинстве дистрибутивов, даже самых дремучих.

12 Сен, 03:14 #147 #542004

>>541888
[]-версия new схороняет размеры всего выделенного у себя.

12 Сен, 03:16 #148 #542006

>>541895
Оно хорошо и удобно, когда ты пишешь что-то уровня laba5.cpp. Тогда да, все просто и понятно, разбираться не нужно. Когда у тебя тысяча строк кода средней сложности, работа без удобств начинает напрягать, и ты уже готов изучить "эти финтифлюшечки". Когда у тебя больше 10к строк, да с многопоточностью, ты взвоешь после первой попытки дебаггинга без них.

12 Сен, 03:19 #149 #542007

>>541905
Я просто к тому, что добавить новинки которых мало с описанием нового стандарта это милое дело, а старой литературы по крестам просто дохуя, даже если считать только хорошую, и если добавить в шапку ее всю, то это ничего не даст, кроме того, что ньюфаги с большей вероятностью получат устаревшие знания.

12 Сен, 14:52 #150 #542093

>>541087
бамп вопросу. Аноны, поясните когда можно начинать искать работу джуном?

Ответы: >>542143

12 Сен, 18:09 #151 #542143

>>542093
Как изучишь синтаксис. На собеседованиях узнаешь, чего ты не знаешь. Тем более у многих кд для собеседований кандидата 2-3 месяца

6 Кб, 423x264

12 Сен, 19:19 #152 #542182

Эт самое, ньюфаг ворвался. Поясните за эту прогу. По идее же переменная c должна хранить только 1 символ. И потом с помощью putchar(c) этот символ печатается. А у меня так, сначала я ввожу текст, потом жму enter и только потом этот текст выводится. Не понял в общем.

Ответы: >>542205

12 Сен, 20:12 #153 #542199

Проиграл с собственного говнокода годовой давности. То ли ещё будет.

12 Сен, 20:25 #154 #542205

>>542182
http://stackoverflow.com/questions/7519039/real-time-keyboard-input-to-console-in-windows
Начиная со второго ответа читай.

12 Сен, 20:40 #155 #542218

Хелп, анон. Вот сегодня дочитал главу указатели у лафоре и приступил к вопросам, там в парочке вопросов нужно написать простенькую программу, например для того что бы переместисть строку1 в строку2. Я сначала все сделал сам, но у меня вылазили странные ошибки, списал из ответов - те же ошибки, ну я подумал типо учебник старый, наверно синтаксис чутка поменялся и принялся за следуещее задание и там те же ошибки, что за херня с этими указателями?
Вот пример ошибки:
>Unhandled exception at 0x0F4635BA (msvcp120d.dll) in TESt.exe: 0xC0000005: Access violation writing location 0xCCCCCCD0.

Ответы: >>542226, >>542231

12 Сен, 20:51 #156 #542226

>>542218
update
написал тот же код в dev c++ и все сработало.
Что за фигня у меня со студией?

12 Сен, 20:55 #157 #542231

>>542218
где-то наебался твой Лафоре, залез за границы разметки памяти, а студия молодец, фигня твой dev C++

Ответы: >>542241

12 Сен, 21:09 #158 #542241

>>542231
походу это я даун, переписал с нуля оба кода в студию и все работает. А как я мог залезть за границы разметки памяти? Я вообще не понимаю почему сейчас все работает, а тогда не работало ведь вроде тоже самое написал.

Ответы: >>542268, >>542271, >>542409

12 Сен, 21:52 #159 #542268

>>542241
Блядь, ну сравни их через diff посимвольно, хуле ты?

12 Сен, 21:53 #160 #542271

>>542241
Код показывай

13 Сен, 10:46 #161 #542409

>>542241
Если копипастнул с пдфки, то (МОЖЕТ БЫТЬ?) цифры могли копипастнутся как чары. Ровно вчера поздно вечером на эти грабли наступил и сильно охуел, это как вообще возможно. MS Visual Studio 2013 Express, перепечатал ручками, заработало.

Т.е. не Лафоре наебался (как я говорил прежде), а лучше ручками перепечатывать. Вот Страуструп для ньюфагов на своём сайте весь код из книги даёт на скачивание + решения наиболее сложных упражнений.

Ответы: >>542426, >>542439, >>542487

13 Сен, 11:36 #162 #542426

>>542409
fix: копипастнуться

Да простит меня Розенталь.

31 Кб, 446x600

13 Сен, 12:35 #163 #542439

>>542409
ВНЕЗАПНО в текстовой строке которой является исходник цифры и есть чары.

13 Сен, 14:51 #164 #542487

>>542409
там цифр вообще не было. И я от руки печатал, я ж говорю - это я где-то наебался но не понял где. Сонный был немного.

13 Сен, 15:49 #165 #542511

Анон, прошу помощи
Допустим, есть код:
#define A 5
#define B A3
Все вхождения B будут заменены на A3
Вопрос: есть ли возможность, чтобы вхождения B заменялись сразу на 15?

Ответы: >>542514, >>542527, >>542530

13 Сен, 15:52 #166 #542514

>>542511
Блять, там где A3 имелось ввиду AЗВЕЗДОЧКА3

13 Сен, 16:03 #167 #542527

>>542511
B будет заменено на 5*3. Компилятор это превратит в 15

Ответы: >>542543

13 Сен, 16:07 #168 #542530

>>542511
компайлер сначала заменит твой A на 5 и B на 53, насчет того, что он заменит 53 на 15 я не уверен.

>есть ли возможность, чтобы вхождения B заменялись сразу на 15?
#define B 15

Ответы: >>542534, >>542543

13 Сен, 16:13 #169 #542534

>>542530
>компайлер сначала заменит твой A на 5 и B на 53
Это делает препроцессор cpp, идиот.

Ответы: >>542539, >>542543

13 Сен, 16:20 #170 #542539

>>542534
>препроцессор
лол

Ответы: >>542544

13 Сен, 16:24 #171 #542543

>>542527
>>542530
>>542534
Все не так, мне нужно, чтобы препроцессор вычислил значение выражения и записал в define результат
Но, боюсь, что единственный вариант:
#if A==1
#define B 3
#elif A==2
#define B 6
Итд.

Ответы: >>542552

13 Сен, 16:25 #172 #542544

>>542539
Что он не так сказал?
Да, это делает препроцессор

13 Сен, 16:47 #173 #542552

>>542543
Возьми другой препроцессор, типа https://www.slac.stanford.edu/comp/unix/gnu-info/m4_11.html

Ответы: >>542562

13 Сен, 16:53 #174 #542556

http://stackoverflow.com/questions/3539549/can-i-add-numbers-with-the-c-c-preprocessor lel

Ответы: >>542562

13 Сен, 17:05 #175 #542562

>>542552
Проблема в том, что у меня нет возможности выбирать препроцессор
>>542556
Но в предложенном решении, числа задаются в бинарном виде, а у меня обычные десятичные -___-

Я думал это будет довольно тривиальная задача лол

13 Сен, 17:37 #176 #542569

Все тот же даун не могущий в указатели репортинг ин.
Не могу сделать задание
\t>Предположим, что в функции main() определены три локальных массива одинакового размера и типа(скажем, float).Первые два уже инициализи - рованы значениями.Напишите функцию addarrays(), которая принимает в качестве аргументов адреса грех массивов, складывает соответствующие элементы двух массивов и помещает результат в третий массив.Четвертым аргументом этой функции может быть размерность массивов.На всем протяжении программы используйте указатели.
код:
[code lang="cpp"]
#include<iostream>
using namespace std;
const int n = 5;
int main(){
\tvoid sum(int, int,int, const int );
\tint ar1[n] = { 0, 1, 1, 1, 1 };
\tint ar2[n] = { 1, 1, 1, 1, 1 };
\tint ar3[n];
\tsum(ar1, ar2, ar3, n);
\tfor (int k = 0; k < n; k++){
\t\tcout << (ar3 + k);
\t}
\tchar ak;
\tcin >> ak;
\treturn 0;
}
void sum(int s1, int s2, int* dest,const int n){
\tfor (int j = 0; j < n; j++){
\t\tdest[j] = s1[j] + s2[j];
\t}
}
[/code]
\tРезультат работы программы такой : 23456

Ответы: >>542570, >>542579

13 Сен, 17:39 #177 #542570

>>542569
бля, схавало некоторые звездочки

Ответы: >>542573

13 Сен, 17:40 #178 #542573

>>542570
а, и результат не 23456, а 12345

13 Сен, 17:58 #179 #542579

>>542569
pastebin, сука

Ответы: >>542585

13 Сен, 18:09 #180 #542585

>>542579
Попозже вкину
мне кажется я безнадежен, а ты, анон быстро въехал в указатели?

Ответы: >>542589, >>542590

13 Сен, 18:16 #181 #542589

>>542585
Лет в 14 писал игру и в ней все объекты хранились в массивах. Типа players, items и т. п. В итоге обращение к пятому item'у в инветаре выглядело как items[players[current_player].inventory[5]], где invetory[5] - индекс этого массива. В итоге при использовании таких индексов появлялись трех-четырех вложенные записи, и я подумал, что так быть не должно. В итоге понял, что указатели (которые представляют всю память как один большой массив) мне помогут.

Ответы: >>542592

13 Сен, 18:17 #182 #542590

>>542585
"Указатели, без сомнения, - один из самых важных и сложных аспектов C++" (c) Шилдт.
А ты, кусок мудака, даже скопипастить код в ideone или pastebin, а потом скопипастить ссылку на своё дерьмо не можешь. Так что вали с крестов, ибо чем нас меньше, тем больше нам платят.

Ответы: >>542598, >>542610

13 Сен, 18:22 #183 #542592

>>542589
А совсем все расставила по местам книга assembler для windows 2000 что ли, в которой были объяснены защищенный режим, плоская модель памяти, MMU и прочие штуки.

13 Сен, 18:29 #184 #542598

>>542590
Да я-то могу, но чет думал этот [соде] поможет, а сейчас не дома, так что вечерком скину код.не ругайся

13 Сен, 19:03 #185 #542610

>>542590

http://pastebin.com/G4qywV9P
вот.

Ответы: >>542615

13 Сен, 19:18 #186 #542615

>>542610
В 11 строке проебался со скобочками.

Ответы: >>542619

13 Сен, 19:26 #187 #542619

>>542615
Спасибо большое, решил проблему.

13 Сен, 23:06 #188 #542719

Вкатился в новую компанию крестовым разрабом и что бы вы думали? Все используют vim и emacs. Я охуел. Проект собирается через cmake, попробовал открыть его через православный qtcreator - тот падает с сегфолтом, проект огромный.
Есть тут кто-нибудь, кто пишет в виме - его я хоть чуть-чуть знаю? Как отлаживать код? Хочу как в криэйторе по коду бегать с f5, тут у меня нихуя настроить не получилось. youcompleteme не работает, я хз.

Ответы: >>542722, >>542745

13 Сен, 23:08 #189 #542722

>>542719
Я пишу в emacs, однако отладку делаю в qtcreator. Никогда с сегфолтами не имел проблем. Попробуй обновиться.

Ответы: >>542726, >>542731

13 Сен, 23:16 #190 #542726

>>542722
Круто, а это решение, сейчас попробовал на тестовом примере. Только не знаешь, можно ли указать несколько working directory? а то у меня их несколько.

Ответы: >>542727

13 Сен, 23:21 #191 #542727

>>542726
working directory - это то, что меняет команда cd. Она вроде бы у процесса может быть только одна. Если тебе нужно их несколько, то тебе нужно прописать остальные в PATH?

Ответы: >>542730

13 Сен, 23:28 #192 #542730

>>542727
А это не то, где должен находиться сам бинарник? У меня исходники лежат в разных каталогах, часть из них в каталоге build, который out-of-source. Или это совсем не то и уже все есть в отладочных символах? Я хочу навигацию по коду во время отладки.
Нашел http://tuhdo.github.io/c-ide.html - на первый взгляд вроде годно, что скажешь?

Ответы: >>542732, >>542735

67 Кб, 856x856

13 Сен, 23:31 #193 #542731

>>542722
>пишу в emacs, однако отладку делаю в qtcreator
Alt+Tab
Alt+Tab
Alt+Tab

Ответы: >>542739

13 Сен, 23:32 #194 #542732

>>542730
Она наследуется между процессами. Если ты запускаешь отладку из IDE, то будет не путь к бинарнику, а путь к проекту там.

13 Сен, 23:39 #195 #542735

>>542730
Нет, это то, откуда твой бинарник будет думать, что он запущен. Т.е. если ты наберешь fopen("bla.txt") то это на самом деле будет fopen("/...working_directory/bla.txt").
>Нашел http://tuhdo.github.io/c-ide.html - на первый взгляд вроде годно, что скажешь?
Я пользуюсь редактором как редактором. Терпеть не могу все эти тормозящие фишки (когда появится многопоточность у elisp может и будет терпимо, а ща - нет).

13 Сен, 23:48 #196 #542739

>>542731
Когда я отлаживал опенсорсный компилятор, а там много рекурсивных функций многократно вызывающих сами себя, и сложно ставить брейкпоинты, а также сложные структуры данных, которые трудно понять без pretty print, я полюбил отладочную печать и с тех пор особо часто отладчиком не пользуюсь.

Ответы: >>542741

14 Сен, 00:02 #197 #542741

>>542739
Как го-питушки дебажишь через принт-эфы?

Ответы: >>542743

14 Сен, 00:12 #198 #542743

>>542741
Есть набор макросов типа #define L cout << __LINE <<, которые быстро пишутся после ; и так же быстро стираются через поиск с заменой. Для сложных проектов обязательно есть prettyprint.cpp, хотя сейчас у меня в основном библиотеки, которые это уже умеют. Забыл уже, зачем нужен отладчик. Зачем он нужен?

Ответы: >>542748, >>542756

14 Сен, 00:16 #199 #542745

>>542719
>vim
у нас какой-то из первых коммитов был с сообщением
:!q:!qw:!ww:q

14 Сен, 00:19 #200 #542746

Ну т.е. отладчик (без плагинов, которые никто не пишет) вместо pretty print может дать поковыряться в gui в лучшем случае с std::vector, график тоже не нарисуешь (repl у C++ в отладчике отсутствует как класс), значение переменной сразу в нескольких точках не посмотришь... Чисто хуйня для Laba3.cpp ваш отладчик, но такие вещи я не буду писать на крестах.

14 Сен, 00:39 #201 #542748

>>542743
Какой пиздец. Ты ведь понимаешь, что ты будешь за это гореть в аду? В 2015 году, когда отладчик умеет выполнять скрипты, когда в нем видны стеки всех потоков и визуализируется состояние памяти, ты как ебаный неандерталец хуяришь отладочные печати, да еще и на макросах вместо виртуальных методов сериализации объектов.

Ответы: >>542749

14 Сен, 00:45 #202 #542749

>>542748
Сколько тебе лет?

Ответы: >>542753

14 Сен, 00:53 #203 #542753

>>542749
Даже я в свои 15 имею некоторое представление о том, как делать не надо.

Ответы: >>542755, >>542757

14 Сен, 01:02 #204 #542755

>>542753
Ок. Программа падает в каком-то месте. Отладчик показывает, где. Ты понимаешь, что в этом месте все ок, просто когда-то что-то где-то повредило память. Твои действия?

Ответы: >>542760

14 Сен, 01:04 #205 #542756

>>542743
>и так же быстро стираются через поиск с заменой
[code lang="cpp"]
class Lass
{
public:
\tstatic void getOut ()
\t{
\t\twalkInPark ();
\t\teatInCafe ();
\t\ttakeHerHome ();
\t\tstayTheNight ();
\t}
};

//...

struct ass
{
\tstatic void getOut ()
\t{
\t\toutput << makeShit ();
\t}
};

//...

//Делаем поиск с заменой " L" на " "
//Легким движением руки...

Lass::getOut ();

//превращается в...

ass::getOut ();

//Вы восхитительны, сегодня вместо секса с тян вы хорошенько просретесь
[/code]

Ответы: >>542759

14 Сен, 01:04 #206 #542757

>>542753
В 14-19 обычно примерно так и рассуждают. Потому что мозгов мало, а гормонов много.

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

"да еще и на макросах вместо виртуальных методов сериализации объектов." - ты идиот? prettyprint.cpp мной упомянутое это что по-твоему? Макросы нужны, чтобы быстро печать набивать и так же быстро стирать перед коммитом. Потому что это отладка, а не печать логов.

Ответы: >>542765

14 Сен, 01:06 #207 #542759

>>542756
Дядя не в курсе про регэкспы в своем редакторе. А еще дядя пользуется табами для индентации.

Ответы: >>542762, >>542770

14 Сен, 01:06 #208 #542760

>>542755
Про IntelliTrace не слыхал?

14 Сен, 01:11 #209 #542762

>>542759
Дядя в курсе про регэкспы. Еще дядя в курсе, что любые текстовые замены без учета контекста опасны, и используют их обычно до первой многочасовой ебли с кодом из-за неправильно замененного символа по дефектному регэкспу где-то в глубинах кода. Что я слышу? Ах да, ты же всегда пишешь регэкспы без ошибок, мой маленький друг! Тогда смею заметить, что тебе не нужны отладочные печати и отладчик, можно сразу хуярить совершенный код и в продакшон.

Ответы: >>542766

14 Сен, 01:19 #210 #542765

>>542757
>2015
>брейкпоинты
Мань, твои знания об отладчиках явно ограничиваются каким-нибудь махровым встроенным в C++ Builder. Сейчас в них просто нет смысла. Если упало, ты просто двумя кликами отматываешь состояние программы назад до ближайшей точки, в которой изменялись проблемные данные. Еще одним кликом запускаешь скрипт, который выведет нужные данные в удобочитаемом виде. Заметь, нужные данные, а не стотысячмильенов экземпляров того же класса, для которых тоже выполнится отладочная печать. При этом ты не срешь в репозиторий отладочным кодом, не тратишь время на чтение ненужной информации, не ебешься с поиском по тексту. Серьезно, тебе определенно стоит попробовать современные отладчики, а то ты говоришь как человек из 80-х.

Ответы: >>542773

14 Сен, 01:21 #211 #542766

>>542762
>многочасовой ебли с кодом из-за неправильно замененного символа
Дядя не в курсе о git diff.
>Ах да, ты же всегда пишешь регэкспы без ошибок, мой маленький друг!
Дядя не в курсе о скриптах в его редакторе.

Ответы: >>542768

14 Сен, 01:23 #212 #542768

>>542766
У тебя заменилось 1000 вхождений макроса L и одно вхождение Lass. Ты запускаешь diff, он показывает 1001 расхождение. Твои действия?

Ответы: >>542773

14 Сен, 01:28 #213 #542770

>>542759
Двачую. А когда понадобится изменить визуальную ширину отступа, не придется копаться в настройках отображения табов целых десять секунд! Мы можем воспользоваться уже проверенным с отладочными печатями методом - заменить восемь пробелов на четыре по регэкспу.

14 Сен, 01:33 #214 #542773

>>542765
Бля, чувак, я не хочу кликать и ХОДИТЬ ПО КОДУ. Мне проще кинуть взгляд на текст и увидеть, в каком месте данные начали расходиться с тем, что я ожидал увидеть. Причем я могу сделать это в коде, который редактируется через sshfs и запускается там же, через ssh, а сам при этом сидеть под пальмой с ноутом и дряннейшим gprs, попивая смузи. Ща ты мне будешь парить про УДАЛЕННУЮ ОТЛАДКУ и прочие охуенные радости IDE-бляди, ведь, йоба, 2015 год, в сперме столько веселых кнопочек напридумали.
>>542768
В репозитории отладочная печать вообще отсутствует (иначе это логгирование, которое делается по другим правилам). Поэтому diff мне даст только новый код. При удалении отладочной печати все будет видно. Это, в общем-то, универсальное правило - проверять каждую добавленную строчку перед коммитом.
Что касается поиска/замены, я тоже проверяю каждую строчку через y/n. Не беда вообще.

Ответы: >>542774, >>542778

14 Сен, 01:40 #215 #542774

>>542773
>в каком месте
У тебя есть 50 потоков, в каждом потоке обрабатывается кусок коллекции из миллиона объектов, для каждого объекта выводится отладочная печать. Ты видишь, что проблемные данные изменялись несколько раз, разными потоками, непонятно в каком порядке. Что дальше?

Алсо, удаленная отладка не оче удобна, но точно лучше, чем ЭТО.

Ответы: >>542776

14 Сен, 01:43 #216 #542776

>>542774
Ну окей, и что ты будешь делать с отладчиком в коде с такой волшебной архитектурой?

Ответы: >>542779

14 Сен, 01:44 #217 #542778

>>542773
>я тоже проверяю каждую строчку через y/n
Это охуенно на самом деле. Если у тебя почасовая оплата. Сидишь, попиваешь кофий, проверяешь тысячи однообразных строк. Сбиваешься ближе к концу. Откатываешься и начинаешь заново. О, а вот и рабочий день кончился.

Ответы: >>542780

14 Сен, 01:47 #218 #542779

>>542776
Отладчик для каждого потока независимо и для всех вместе позволяет мотать состояние вперед и назад. По сути, отладка ничем не будет отличаться от однопоточной, потому что ты действительно рулишь самим состоянием, а не его маняпроекцией на текущий поток и текущие данные.

Ответы: >>542783

14 Сен, 01:47 #219 #542780

>>542778
Ты бредишь. Строк вида "L <<" не может быть тысячи. Если их тысячи, значит я за этот день добавил тысячу мест, печатающую информацию, что есть тоже бред.

Ответы: >>542784

14 Сен, 01:50 #220 #542783

>>542779
И что мне с этим состоянием делать? Подрочить?

Ответы: >>542785

14 Сен, 01:51 #221 #542784

>>542780
>писать меньше тысячи строк в день
>с учетом однообразных копипастов
Ох лол, ну ты продуктивный вообще.
Не, на самом деле не спорю, что так делать вполне реально. Но зачем есть капусту, когда есть картошка? Зачем накладывать ограничения на собственную производительность ритуалами копипаста и поиска с проверкой?

Ответы: >>542829

14 Сен, 01:52 #222 #542785

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

Ответы: >>542789

14 Сен, 02:05 #223 #542789

>>542785
Я смотрю ПРОЦЕСС не полагаясь на собственную кратковременную память или что бы то ни было еще. Мне машина печатает фильтрованное состояние в нужных мне местах.
Далее - зависит от, например, в проблемном месте ставится нужный там assert.

А ты смотришь ТОЧКУ и дрючишься с ней, ходя туда-сюда (STEP OVER STEP INTO STEP INTO STEP OUT), найдя, наконец, где ты забыл написать -1. Вот и разница. Причем ничего действительно сложного (типа компилятора) ты никогда не отлаживал, просто пишешь кривые мутабельные многопоточные программы.

И не прикидывайся, блин, "писать меньше тысячи строк в день" - если у тебя коммиты по тысяче строк, ты уже скорее всего делаешь что-то не так. Типичный багфикс обычно занимает пару строк, ты не в курсе об этом? Вместо реального программирования какие-то фантазии выдаешь.

Ответы: >>542836, >>542837

14 Сен, 08:40 #224 #542829

>>542784
Какие к чёртовой матери тысяча строк в день? Я пишу несколько строчек в день, а иногда я пишу отрицательное количество строчек в день, это по моим субъективным критериям показатель качества. Вот так вот сократишь дублирующийся код, или перепишешь кусок кода более кратко, и моча по штанине потекла.

мимо диванный погромист

14 Сен, 09:08 #225 #542836

>>542789
Ну, ну, попизди мне тут. Компиляторы я у него не писал, лол свой говноязык не считается кококкокок. Вообще, хуле я тут тебя пытаюсь заставить в good practices? Не хочешь познать удобный инструмент и упростить/ускорить разработку при необходимости возвращаясь к отладочным печатям, которые никуда не денутся - и не надо, ешь говно дальше пожалуйста. За державу обидно только.

Алсо, тысяча строк это вполне такой средний десятичасовой рабочий день из 15-20 коммитов.

Ответы: >>542844

14 Сен, 09:10 #226 #542837

>>542789
Так тикеты с багами без добавления функциональности разгребать обычно джунам поручают и всякому скаму.

Ответы: >>542845

14 Сен, 09:48 #227 #542844

>>542836
Ты читать не умеешь. Важно не что ты писал, а что ты отлаживал. Отладчики очень плохо дружат с обработчиками разных деревьев, включая компиляторы и интерпретаторы. Настоящие компиляторы, а не твой курсач. А хорошо они дружат с линейной тривиальщиной. Которая и без них элементарно отлаживается бгг. Или AI к примеру. Без графика во времени отлаживать нечего.
Твои good practices для меня давно пройденный этап. Поэтому я и спрашивал сколько тебе лет. Это у тебя начало бомбить, мне-то похуй, хоть дрочи у баллмера во время отладки.

Ответы: >>542847, >>542874

14 Сен, 09:54 #228 #542845

>>542837
То есть или ты сеньер и никогда не отлаживаешь свой код, или мешаешь коммиты с отладкой и фичами. Если второе, открой для себя rebase и squash в нем, если первое - слезь с дивана.

Ответы: >>542852

14 Сен, 10:20 #229 #542847

>>542844
>плохо дружат
Если тебе не сложно, приведи конкретный пример, когда отладка AST отладчиком чем-то отличается от общего случая. Только, пожалуйста, без отсылок к говну мамонта, а для современного отладчика.
>бомбить
Да б-же упаси. Я хочу разобраться, потому что ты прячешься за туманными фразами.

Ответы: >>542859

14 Сен, 10:29 #230 #542852

>>542845
Кагбэ это стандартная организация рабочего процесса по крайней мере, везде, где я видел. Есть трекер задач, по тикетам из него коммитят только добавление функциональности и срочные критичные баги. По умолчанию подразумевается, что все идущее в коммит уже проходит тесты. Если ты написал функциональность, а потом оказывается, что таки проебался - ты разруливаешь это в своей ветке, других не ебет вообще, сеньор ты или говна кусок - без разницы. Обычно коммитов с собственными багфиксами небольшое число по сравнению с коммитами по существу, если только ты не совсем криворукое хуйло, или тесты ленишься писать. Для некритичных багов, которые нашли тестировщики, существует отдельный трекер, на который сажают джунов и провинившихся.

Ответы: >>542864

14 Сен, 10:50 #231 #542859

>>542847
При обходе дерева портятся данные и где-то в другом месте программа (тест) вылетает. причем пусть это не куча портится, а что-то менее тривиальное. В линейном коде ты можешь поставить бряк повыше и посмотреть там данные. Уже это гемор, но хуй с ним. Но при обработке дерева у тебя нет "повыше". Одна и та же функция может вызываться много раз. Придется ебаться с условными брейкпоинтами, ставить их на адреса и т. д. Вот прикинь баг у тебя в функции на 30 уровне вложенности причем там 5 функций и все друг друга вызывают, и проявляется он только так.

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

Ответы: >>542866

14 Сен, 11:04 #232 #542864

>>542852
Пишешь фичу. Написал - коммит. Запустил тесты. Пофиксил. Коммит. Еще раз запустил. Пофиксил. Коммит. Далее в конце дня клонируешь ветку, делаешь squash всех коммитов в один и push, чтобы коллеги не наблюдали твои мучения.

Ты предлагаешь так: написал фичу. Прогнал тесты. Половина проходит. Дописал патчи (без коммита). Еще половина проходит, зато первая половина отвалилась. Тут бы хорошо сделать diff но откатиться ты можешь только к состоянию без фичи... Привет, начинаешь вспоминать, а что ты вообще делал. Ты ж не джун, лол.

Поэтому я могу засрать отладочной печатью хоть все исходники и, найдя проблему, сделать stash. Ведь чистый код зафиксирован. А ты, ты не джун, кек.

Ответы: >>542868

14 Сен, 11:13 #233 #542866

>>542859
Так не, ты опять мыслишь категориями брейкпоинтов, с которыми идет работа только с кодом без учета состояния. Я тебе уже десять сообщений подряд талдычу, что это прошлый век, и сейчас отладчики могут работать по данным, с учетом состояния. В твоем случае отладка выглядит тривиально:
1. Падение. Отображается нераскрученный стек.
2. Ты смотришь его вершину и видишь конкретный объект, в котором порченные данные. Надо узнать, кто это сделал.
3. Ты выбираешь этот объект и "отматываешь время" назад до момента, когда он в последний раз кем-то менялся.
4. Если изменение было легальное, отматываешь еще.
5. Находишь нелегальное изменение, причем у тебя есть не только проекция состояния в этот момент на отладочные печати, но и полное состояние программы. Как будто данные испортились вот прямо только что, а до падения еще далеко. Это позволяет делать интересные вещи, например, поправить данные не полностью, или как минимум исправить их на корректные вручную, чтобы без ебли с кодом быстро проверить, действительно ли баг только в этом месте.

Для аналогичного с отладочными печатями тебе придется, во-первых, отлаживать многократными запусками, потому что в пределах одного запуска ты ничего не можешь поменять, а только читать вывод. Это неудобно, когда у тебя специфические или долго генерируемые входные данные, если еще и баг плавающий, то вообще пиздец. Во-вторых, когда тебе кажется, что ты нашел баг, у тебя нет быстрого способа проверить, только ли в этом куске кода дело. Нужно править код, перекомпилировать а это иногда довольно долго, потом может оказаться, что рядом был еще один баг, ну ты понел. В третьих, отладочные печати по количеству ложных срабатываний примерно как брейкпоинты. Либо они печатают каждый раз при передаче управления и точно так же как брейкпоинты не зависят от состояния, либо тебе придется добавлять условия на рантайм в них, и ты уйдешь от лаконичных макросов из одной строчки.

Ответы: >>542889

14 Сен, 11:25 #234 #542868

>>542864
Так то локальные коммиты, там можно содомию устраивать, понятное дело. Проблема в том, что если делать push вечером, то придется больше мерджить, поэтому приходится соблюдать баланс.

14 Сен, 11:31 #235 #542874

>>542844
ты часом с ая вмк не связан с такими-то задачами?

Ответы: >>542889

14 Сен, 12:25 #236 #542889

>>542866
У тебя гемор лежит между п. 4 и 5. Потому что нелетальное изменение может быть и за 1000 таких итераций. И ты рассматриваешь простую ситуацию, при которой объект тебе известен (и это не object.vector[5].maly_yoba.x). Но в таком случае и отладочная печать тривиальна. Ты просто печатаешь многокилобайтный лог, дальше - бинарный поиск глазами.
Самое больше преимущество тут в том, что глаза видят больше, чем помещается в кратковременную память. Можно хоть мегабайты просматривать в поисках аномалий. И ты при этом расслаблен, потому что память свободна. Ты думаешь в рамках процесса, а не точки на нем.
>Для аналогичного с отладочными печатями тебе придется, во-первых, отлаживать многократными запусками, потому что в пределах одного запуска ты ничего не можешь поменять, а только читать вывод.
Это удобно, потому что тебе не нужно помнить о том, что ты делал, что менял, что смотрел (такс, тут ошибка, делаем 5 ходов сюда, 5 ходов сюда, меняем 1 на 2 - пофиксили).
>Это неудобно, когда у тебя специфические или долго генерируемые входные данные, если еще и баг плавающий, то вообще пиздец.
А это второй момент. Отладчик развращает и заставляет писать хуево поддерживаемый код. В том плане, что в твоем коде должны быть отделены "долго генерируемые входные данные", например, они должны уметь дампиться и читаться из дампа. С отладчиком ты можешь на это долгое время плевать, пока это кровь из носа не понадобится, а без отладчика ты будешь заранее думать, как добиться такой модульности. Почему в никсовом мире так любят писать скриптовые обертки вообще ко всему? А вот поэтому. Нахуя мне отладчик, если у меня есть питоний repl, а крестовые функции довольно изолированы среди питоньего клея? Еще момент в том, что отвязываешься от IDE и начинаешь проще относиться к смеси языков, кодогенерации и прочему.

В любом случае это холивар. Я допускаю, что человеку, отлаживающему гуй, например, отладчик удобнее. Но какого хуя меня муками ада пугать? Я пуганый, у меня были моменты, когда заказчику нужен был MSVS и я сидел в винде в этой IDE. Но удовольствия от клац-клац никакого нету.
>>542874
На ВМК были нужны математики с диофантовыми уравнениями, умеющие списывать сочинения, или олимпиадники. Тупой я для ВМК, сдал только физику на Ломоносове, нарисовав принцип Гюйгенса, а к летним экзаменам меня от тамошних абитуриентов с нулевым знанием программирования, "шуриков" и прочего говна меня уже тошнило.

Ответы: >>543312

14 Сен, 19:50 #237 #543059

Можно ли внутри шаблонной функции определить шаблонный класс? Как правильно это сделать?

Ответы: >>543061, >>543064, >>543091, >>543095

14 Сен, 19:53 #238 #543061

>>543059
Думаю, нет. Либо не понимаю, что это значит, и в каком случае это может быть использовано.

Ответы: >>543063

14 Сен, 19:54 #239 #543063

>>543061
Мне нужен небольшой класс, который используется только в данной функции.

14 Сен, 19:54 #240 #543064

>>543059
Уточни что ты имеешь ввиду под "определить шаблонный класс".

14 Сен, 20:12 #241 #543069

http://ideone.com/7yOImd

14 Сен, 20:29 #242 #543076

#include <iostream>
#include <sstream>

int main()
{
double d;
std::string s("0.735");
std::istringstream is(s);
std::cout << d << '\n' << is.str() << '\n' << is.str().empty() << '\n' << is.eof() << '\n';
is >> d;
return 0;
}

Почему is.str().empty() == false когда мы считали (i)stringstream в double? При этом ведь is.eof() == true

P.S. Быстро скомпилировать можно здесь:
http://www.tutorialspoint.com/compile_cpp11_online.php

Ответы: >>543094

87 Кб, 1680x1018

14 Сен, 20:47 #243 #543091

>>543059
>template declarations are only permitted at global, namespace or class scope

Видимо нельзя>

14 Сен, 20:49 #244 #543094

>>543076
Oops, накололся. Держите исправленную версию:

https://ideone.com/guzhGP

А вопрос всё тот же. Почему is.str().empty() == false после считывания (i)stringstream в double? При этом ведь is.eof() == true

14 Сен, 20:49 #245 #543095

>>543059
Преврати функцию в struct с перегруженным operator() и вкладывай что хочешь.

9 Кб, 796x285

15 Сен, 09:26 #246 #543270

В универе изучаем OpenMP. Где можно найти годные уроки?
И хотелось бы услышать ваше мнение об этой библиотеке или стандарте, я в душе не ебу что это

Ответы: >>543301

sage 15 Сен, 10:33 #247 #543301

>>543270
уроки чего? берешь документацию и ебашишь что просят

15 Сен, 10:48 #248 #543307

Граждане, почему игнорируем вопрос? Хочу понять логику дизайна строковых потоков в C++

https://ideone.com/guzhGP

std::stringstream в своём конструкторе имеет копию строки, именно копию аргумента, а не указатель на нулевой элемент аргумента. Стало быть, раз уж мы успешно опустошаем строковый поток, надо бы и его строку подопрокинуть? Из каких соображений этого не происходит?

1) недостаток дизайна языка (не продумали, забыли, забили);
2) в целях скорости (вручную сотрёшь, если надо);
3) чтобы можно как-то повторно использовать .str() (ЗАЧЕМ???)

Ответы: >>543310, >>543314, >>543316

15 Сен, 10:55 #249 #543310

>>543307
В чем вопрос? Что значить подопрокинуть строку?

15 Сен, 11:02 #250 #543312

>>542889
>гемор лежит
Ну вообще, это вопрос удобства, конечно. Если тебе настолько удобнее парсить глазами вывод консольки, то почему бы и нет? Правда мне кажется, что нелюбовь к отладчикам у тебя таки от неосиляторства, у меня у самого так было, лол.
>x развращает
Это можно высечь в граните и поставить под любой мало мальски удобной фичей.
>отделены "долго генерируемые входные данные"
Разумеется. Но вот бывают ситуации, когда это проблематично. Например, юнит-тесты проходят, а при обращении к реальной БД падает один раз из тысячи. Если у тебя там не исключение бросается, а access violation, например кококок делай проверки скорость не важна, то ты заебешься прикручивать обработчик, который будет делать дамп. А когда прикрутишь, это не будет "хорошо поддерживаемым кодом". А будет платформозависимым говном.

Ответы: >>544388

15 Сен, 11:08 #251 #543314

>>543307
Потому что итерация по один раз загруженной в поток строке дешевле, чем pop_back. Логика здесь как и везде в крестах простая - тебе предоставлен наиболее общий случай из наиболее быстрых. Вдруг ты захочешь сделать сброс и вернуться в начало строки? А может, захочешь ее таки стереть? При такой реализации и то и другое делается быстро, а в твоем варианте за тебя решают, что строка больше не нужна.

Ответы: >>543348

15 Сен, 11:13 #252 #543316

>>543307
>копию
Неправда. Там два перегруженных конструктора - с const & и с && и еще дефолтный. Так что на основе временного объекта оно будет конструироваться почти бесплатно.

Ответы: >>543348

15 Сен, 12:55 #253 #543348

>>543314
>Логика здесь как и везде в крестах простая - тебе предоставлен наиболее общий случай из наиболее быстрых.
Да, логично. Просто для ньюфага было неочевидно, спасибо.

>>543316
>Там два перегруженных конструктора - с const & и с && и еще дефолтный.
Возможно, я не правильно понял тебя, но как тогда менять буфер, чтобы переиспользовать объект stringstream?

http://stackoverflow.com/questions/9507008/passing-by-reference-to-a-constructor
>However don't forget that once a reference has been assigned it can not be changed so if assignment requires a change to str then it will have to be a pointer instead.

>Так что на основе временного объекта оно будет конструироваться почти бесплатно.
И что ты подразумеваешь под временным объектом? Можно пример.

Ответы: >>543503

15 Сен, 12:55 #254 #543349

Анчоусы, кто ставил CLion как ide под окна? Упрямо игнорирует и mingw и cygwin. Пишет, что не поддерживает. Как вы компилятор вообще в него вставляли?

Ответы: >>543505

15 Сен, 18:09 #255 #543444

Делаю упражнения из Страуструпа для ньюфагов. Пятое упражнение 11 главы. Само упражнение получается без проблем, но помогите разобраться с постоянными ссылками (или не знаю как это назвать). Вот есть у меня следующий код:

http://ideone.com/89Jim9

Что я хочу сделать? Я хочу создать const std::vector<unsigned int>& -- т.е. при помощи функции создать объект по ссылке, БЕЗ КОПИРОВАНИЯ. Казалось бы UB, но чукча умный, чукча объявил переменную статиком и сопроводил это комментом о состоянии своего психического здоровья.

Я всё правильно сделал или нет? Я знаю, есть способ через void и второй аргумент зафигачить, но это неспортивно. Мне интересно, происходит ли в main() копирование или нет:

std::vector<unsigned int> classification{ string_classification(line) };

Ответы: >>543449, >>543491, >>543510

15 Сен, 18:17 #256 #543449

>>543444
Это ты так из строки знаки препинания убираешь?

Ответы: >>543452

15 Сен, 18:21 #257 #543452

>>543449
Нет. C++11 издание книжки Страуструпа для ньюфагов, 11 глава.

5. Write a program that reads strings and for each string outputs the character classification of each character, as defined by the character classification functions presented in §11.6. Note that a character can have several classifications (e.g., x is both a letter and an alphanumeric).

15 Сен, 19:34 #258 #543491

>>543444
Не происходит. Ты посути глобльную переменную используешь. Твоя функция будет возвращать всегда один и тотже объект. И если ты его изменишь в одном месте, все остальные тоже изменятся. Если хочешь делать эффективно читай про мув семантику, std::move и т.п. Но если ты новичек пока лучше туда не лезть, и вообще по возможности ссылки не использовать. Ну а потом наоборот, не пердолится с указателями, лол. Ссылки достаточно сложная концепция (в том виде в котором она в плюсах) еще и в других языках вроде аналога нет, знать и использовать нужно обязательно, но новичку лучше немного в языке освоится в общем, а потом уже погружаться.

Ответы: >>543500, >>543593

sage 15 Сен, 19:42 #259 #543500

>>543491
> всегда один и тотже объект
Имелось ввиду ссылку на один и тотже объект, естественно.

15 Сен, 19:49 #260 #543503

>>543348
>как тогда менять
Через метод str ().
>что ты подразумеваешь под временным объектом
rvalue-объект, для которого вызовется конструктор с rvalue-параметром. Например, basic_istringstream { string {"Tvoya mamka"} };
Здесь сконструированный на основе "Tvoya mamka" безымянный string будет rvalue-объектом. Конструктор знает, что его можно испортить, и поэтому сделает поверхностное копирование вместо глубокого. Перенесет указатель на данные в свою строку и все. Выполняется гораздо быстрее.

15 Сен, 19:51 #261 #543505

>>543349
А я ко всем, кто его юзал обращусь. Как в сравнении со студией вообще? Правда, что тормозное говно без задач? Стоит ставить и пробовать?

15 Сен, 20:00 #262 #543510

>>543444
Эээм. Так символы все равно копируются же при вызове самой верхней функции. Что ты хочешь сделать вообще, я не понял? Как ссылка на вектор вместо вектора тебе поможет не копировать что-либо, если в main ты все равно новый вектор создаешь, а для аргументов функций и конструкторов тоже, да выполняется std::decay, после которого ссылка трактуется как сам объект? Ты там совсем пизданулся штоле, лол?

Ответы: >>543593

15 Сен, 21:49 #263 #543569

Можно ли так писать:
[code]int a = new int, b = new int;
delete a, b;[/code]
Сработает ли delete для b? Нигде не нашёл такой инфы. Просто в коде много массивов и все они удаляются в конце, поэтому получается несколько строк с этим delete. Хотелось бы сократить.

Ответы: >>543595, >>543598

15 Сен, 22:35 #264 #543593

>>543510
>Так символы все равно копируются же при вызове самой верхней функции.
Одним байтом я готов пожертвовать на копирование, но объекты больше четырёх байт пускай по ссылочке отрабатывают.

Ну ты же сам прекрасно понимаешь, что работать со стандартными типами быстрее с копированием.

>Как ссылка на вектор вместо вектора тебе поможет не копировать что-либо, если в main ты все равно новый вектор создаешь
И он будет один, а не два (я это и уточнял).

>>543491
Спасибо. А вообще то, что я сделал, это как, общепринятый паттерн для тяжёлых объектов -- создать конст референс функцию, внутри которой возвращается статическая переменная, или нет?

Просто нигде не встречал такого.

22 Кб, 529x294

23 Кб, 476x304

15 Сен, 22:38 #265 #543595

>>543569
>>543569
Похоже нет.

Ответы: >>543601

15 Сен, 22:44 #266 #543598

>>543569
Да, там опечатка и должны быть звёздочки.
Немного поиграл с массивами и обнаружил, что массив b не удалится.
[code]int a = new int[Size], b = new int[Size];
delete[] a, b;[/code]
В данном случае массив b останется висеть в памяти.

https://social.msdn.microsoft.com/Forums/vstudio/en-US/3d6fa578-6008-474e-9f3d-369a33d5d995/c-delete-operator-with-multiple-arrays?forum=vclanguage
Здесь пишут, что в стандарте delete принимает только один параметр. Получается, когда компилятор видит конструкцию типа: delete[] a, b; — он воспринимает это как два выражения, разделённые запятой, поэтому он сначала выполняет delete для a, а потом просто b.
[code]delete[] a, b;
//эквивалентно
delete[] a;
b;[/code]
Можно даже сделать, чтобы удалялся именно b, если написать так:
[code]delete (a, b);[/code]
Я всё правильно понимаю?

Ответы: >>543602, >>543604, >>543608

15 Сен, 22:46 #267 #543601

>>543595
А почему ты пишешь просто delete, а не delete[]?

Ответы: >>543603

15 Сен, 22:47 #268 #543602

>>543598
Мимо проходил, а такой вариант не канает?

>delete[] a, delete[] b;

Ответы: >>543604, >>543606

15 Сен, 22:47 #269 #543603

>>543601
потому что переменная, а не массив. Щас проверю.

Ответы: >>543605, >>543606

15 Сен, 22:49 #270 #543604

>>543598
В последнем примере [] забыл.
>>543602
Канает. Просто интересно было, можно ли сократить количество delete.

15 Сен, 22:50 #271 #543605

>>543603
А, да, показалось, что там [], а не (). Понял.

15 Сен, 22:50 #272 #543606

>>543603
delete[] a,b; без изменений
>>543602
Работает но смысла нет в этой записи.

22 Кб, 478x314

15 Сен, 22:53 #273 #543608

>>543598
>Я всё правильно понимаю?
да

15 Сен, 22:55 #274 #543609

[code]delete[] a, b;
//эквивалентно
delete[] a;
b;[/code]
Здесь удаляется массив a.
[code]delete[] (a, b);[/code]
Здесь удаляется массив b.
[code]delete[] a, delete[] b;[/code]
Здесь удаляется всё.
[code]delete[] a;
delete[] b;[/code]
Здесь тоже.
В принципе, я разобрался.

15 Сен, 23:57 #275 #543619

Подскажите как легко и безболезненно прикрутить к сабжу графоний. Хочу подгружать картинки, двигать их по окну и реагировать на мышку.

Ответы: >>543628

16 Сен, 00:48 #276 #543628

>>543619
SFML.

16 Сен, 01:32 #277 #543646

Почему, блядь, Boost такой нестабильный? на одной системе работает, на другой не работает. Торвальдс прав был. Ну нахуй, лучше на Си буду писать.

Ответы: >>543663

16 Сен, 02:19 #278 #543663

>>543646
Стандартизация уменьшает необходимость boost с каждым годом. Потерпи немного.

16 Сен, 09:02 #279 #543703

Знаю, что не туда пишу, но С тред мертв.

Кинули на пару месяцев на легаси проект, сразу вопрос:

http://ideone.com/I2NQpL

Почему хуйня на 20 и 21 строчках даёт одинаковый результат? Имя функции, если та передаётся аргументом, эквивалентно её адресу?

Ответы: >>543714, >>544161

16 Сен, 10:21 #280 #543714

>>543703
Имя функции и указатель на функцию всегда взаимозаменяемы. Можно использовать имя, когда требуется указатель, можно не дереференсить указатель на функцию для её вызова. Алсо, почему ты решил, что Си тред мертв?

Ответы: >>543718

16 Сен, 10:24 #281 #543718

>>543714
Спасибо!

Хз, я его давно не видел уже. Думал, пишут пару раз в месяц, как в хачкель-тред.

16 Сен, 13:07 #282 #543789

Подскажите как правильно записать функцию в виде лямбды
http://ideone.com/0iMfwL

Ответы: >>543844

16 Сен, 14:48 #283 #543844

>>543789
Ты тело лямбы забыл, должно быть что-то типа
std::function<void (std::vector<T>&, std::vector<T>&, bool)> merging = [&](std::vector<T> &lfirst, std::vector<T> &lsecond, bool lascending_order) {return;};

Ответы: >>543846

16 Сен, 14:50 #284 #543846

>>543844
Спасибо

16 Сен, 23:00 #285 #544161

>>543703
При вызове функции для аргументов вызвается std::decay. Он, в том числе, навешивает указатели на массивы и функции.

17 Сен, 00:56 #286 #544230

Что вы вообще пишете на работе?

Ответы: >>544242

17 Сен, 01:17 #287 #544242

>>544230
Когда дедлайн просрали, что в коммит написали? Осторожно, мясорубка.

17 Сен, 12:25 #288 #544388

>>543312
>Если тебе настолько удобнее парсить глазами вывод консольки, то почему бы и нет? Правда мне кажется, что нелюбовь к отладчикам у тебя таки от неосиляторства, у меня у самого так было, лол.
У меня нет нелюбви к отладчикам, это мне написали про "будешь гореть в аду". Мне отладчик просто нужен редко до статистической погрешности.
Парсить глазами - у меня есть вся гамма утилит для работы с текстом, от грепа до gnuplot.
>Это можно высечь в граните и поставить под любой мало мальски удобной фичей.
Ну да, динамической типизацией, например. Или wysiwyg html-редакторами.
Иногда за удобство требуется платить в будущем. И наоборот. Вот tex, например, для мелких документов неудобен, однако удобен для крупных. Отладчики - они как ворд. Те, кто отладчики не любят, они стремятся к модульной архитектуре, биндигам к скриптовым языкам, дампам состояния и т. п. Хорошей архитектуре отладчик нужен только в реально экстренных ситуациях.
>Если у тебя там не исключение бросается, а access violation, например кококок делай проверки скорость не важна, то ты заебешься прикручивать обработчик, который будет делать дамп.
Ты о #ifdef DEBUG не в курсе что ли? Тестовые сборки должны быть с проверками, и скорость не важна. И ты еще говоришь о неосиляторстве, почему я должен говорить о таких простых вещах сеньору-помидору?
Для access violation скорее нужен valgrind чем отладчик, кстати, и выцеплять их нужно до того, как все упало.

Ответы: >>544422, >>544423

17 Сен, 13:31 #289 #544422

>>544388
Э нет, ты еще про assert вспомни. Как только ты добавляешь логику выбора между debug и release, потенциально в них начинают происходить разные вещи. Потом получается код, который работает в debug версии, а в release не работает, или наоборот. Вот буквально джве недели назад в очередной раз столкнулся. Один мудила прикрутил к тестовой сборке старую версию vld, которая не только ловила утечки, но еще местами прощала ошибку я так и не догнал до конца, что там было, но вроде что-то в духе delete вместо delete [], которая в релизной версии вызывала крах. Все, пиздарики, при переходе на релизную версию все крашится. Искали это говно почти неделю, связать крах с прикрученным в самом начале vld очень сложно. И да, без отладчика вообще бы хуй нашли, потому что в библиотеки ты отладочные печати не повставляешь.

И это если забыть про то, что код, в котором на каждом шагу #ifdef, просто неприятно читать.

Ответы: >>544429

17 Сен, 13:39 #290 #544423

>>544388
>будешь гореть в аду
>от грепа до gnuplot
ты уже в аду, лол

17 Сен, 13:57 #291 #544429

>>544422
>Э нет, ты еще про assert вспомни
Я про assert и говорю. Ты написал "кококок делай проверки скорость не важна", спизданул хуйню какую-то. Assert'ы иногда можно выпилить из release, да и то не часто.
>старую версию vld, которая не только ловила утечки, но еще местами прощала ошибку
Вот уж спермопроблема-то. Вместо внешней утилиты valgrind какая-то хуита, которая прощает ошибки.
>я так и не догнал до конца, что там было, но вроде что-то в духе delete вместо delete []
Ручной delete я несколько лет не писал. delete[] - никогда в жизни. Ну, плюс-минус. Голые указатели в 2015? Говноконтора какая-то.

Ответы: >>544451

17 Сен, 14:26 #292 #544451

>>544429
>иногда можно выпилить из release
Так assert автоматически проверяет DEBUG и ничего не делает в релизной, хуле его выпиливать-то? И в любом случае не решается проблема же.
>какая-то хуита, которая прощает ошибки
Так про то и речь же. В идеальном мире ты все пишешь сам с нуля или используешь железобетонно проверенные библиотеки, в которых нет ошибок. А в реальности часто то, что ты подсунешь, например, вместо стандартных new и delete, писал либо ты сам, либо другой хуй из твоей же конторы, либо Вася с гитхаба, и поэтому у тебя получается, что не идеально проверенный код отличается в тестовой и релизной сборках, а вполне обыкновенный. И цена ошибки тут гораздо выше, потому что обнаружится это в последний момент.
>Голые указатели в 2015
ВНЕЗАПНО под капотом у smart pointers голые указатели. Говорю же, это самописные аллокаторы были тому що нужна была нестандартная стратегия выделения памяти из соображений байтоебства. Прямые запросы, кэширование, все дела.

Ответы: >>544480

17 Сен, 14:35 #293 #544452

ОП репортинг ин. Есть один индус, у которого весьма неплохая книжка по крестам, там последний стандарт и все дела понятное дело, что все это гуглится по отдельности, но в формате книги я ничего сравнимо нового не видел. Я хотел ее почитать и добавить в шапку, если действительно годная. Но. Она есть только на гуглокнигах https://books.google.ru/books?id=2VSIBwAAQBAJ&printsec=frontcover&hl=ru#v=onepage&q&f=false и всяких амазонах, скачать бесплатно без смс так и не нашел, а пиратская натура мне не позволяет платить за книги. Так вот, я, конечно, не надеюсь, что у анона она имеется хотя вдруг чудо произойдет, поэтому хочу спросить в треде. Во-первых, интересен ли вам подобный контент, и стоит ли вообще мне заморачиваться с ее вытягиванием? Во-вторых, хоть и анрилейтед будет здорово, если кто-то сможет пояснить про возврат денег в Google Books. Это все беспроблемно проходит, или придется ругаться с техподдержкой?

17 Сен, 15:09 #294 #544480

>>544451
>Так assert автоматически проверяет DEBUG и ничего не делает в релизной, хуле его выпиливать-то? И в любом случае не решается проблема же.
Проблема решается в том, что ты пытаешься повторить баг в дебажной версии и у тебя вместо сегфолта вылезает ассерт. Или же ты видишь в каком месте сегфолт и видишь парой строчек выше ассерт, и уже знаешь, куда копать. Ситуация - типичная. Ситуаций, когда баг проявляется только в релизе, в разы меньше. При этом даже если ты отдаешь заказчику релизную версию без ассертов ради 5% прироста производительности, тестерам-то почему не дать релиз, но с ассертами?
В общем, не писать проверки "из соображений производительности" - это бред. Их нужно писать всегда, а потом с профайлером в руках поотключать те, которые жрут больше 5% производительности. То есть - никакие не отключать бгг.

>А в реальности
А в реальности ты знаешь о неидеальности твоих средств и тебе в голову не придет реализовывать leak detector через include <йоба-хеадер перекрывающий стандартные аллокаторы>. И ты мне еще что-то говоришь про 2015 год.
Этим должна заниматься виртуальная машина, так же, как и профилировкой. Она вполне может заменить вызовы libc на что-то еще. И у тебя и твоего Васи в таком случае будут просто разные версии valgrind, у тебя будет ругаться, у него нет, ну бывает.

И даже если от этого никуда не деться, как можно это запихнуть чисто в DEBUG сборку? А я знаю как - мышкой крайне неудобно настраивать сборку под все случае жизни, поэтому у вас только DEBUG (со всем говном - ассертами, без оптимизации и т. п.) и RELEASE (без всего). Т.е. вещей типа O0+ASSERTS+PROFILE или O2+ASSERTS у вас нету, потому что cmake вы пользоваться не умеете и написать cmake .. -DMY_YOBA_ASSERTS не можете, это же в консоль пердолиться. А неосилятор при этом - я.

>ВНЕЗАПНО под капотом у smart pointers голые указатели.
Зачем тебе лезть под капот? Ты придумал ПАТЧ? Синдром NIH как есть. На современных крестах можно написать десятки тысяч строк без new и delete. И особенно - без new[], для которого есть vector.
А так я, кажется, понял, в чем секрет такой производительности. Писать по 1000 строчек в день велосипедов - очередной аллокатор, очередной умный указатель, очередной хэш-мап, и называть это разработкой на С++.

Ответы: >>544516

17 Сен, 16:05 #295 #544509

Здравствуйте. А где можно найти полный текст стихотворения из ОП-поста? Или это ориджинал, который пишется на ходу?

Ответы: >>544517

17 Сен, 16:22 #296 #544516

>>544480
>Зачем тебе лезть под капот?
Потому что я могу. Потому что стандартные версии рассчитаны на стандартное применение. В конкретном случае было всего три или четыре сценария выделения памяти, но нестандартных, использование самописных аллокаторов ускорило работу в полтора раза. Собственно, они и писались после того, когда выяснилось, что со стандартными медленно пашет.

Хороший погромист отличается умением думать. Умение думать включает в себя не только отказ от велосипедов там, где они не нужны, но и отказ от стандартных средств, когда их недостаточно. Такие дела.
>в разы меньше
Редко, да метко.
>поотключать
В самом начале проверки есть везде, причем сделанные не через ассерты, а удобно, с исключениями. Потом оказывается, что, допустим, есть 10% кода, в котором производительность критична. Оттуда убираются исключения и вставляются ассерты. С этим проблем нет. Проблема есть, когда ты вместо ассерта пишешь #ifdef и хуяришь нетривиальный код, различный в разных версиях. Мы же с тобой говорили об обработчике-создателе дампа. Ну вот, ты пишешь что-то подобное, а потом оказывается, что в одной версии оказался корректный код, а в другой некорректный, и начинается ебля.
>в голову не придет реализовывать leak detector через include
Этот leak detector есть надстройка над вендовым API для контроля аллокаций. Уж извини, под каждой системой свои методы решения задач, valgrind'а не завезли.

Про аллокаторы было с утечками вообще никак не связано, это чисто вопрос быстродействия.
>у вас нету
Есть, отчего же? Не из лесу же, под cmake все и делается. Сборок пять или шесть всего. Про неудобность настройки не понял тебя, настроить можно что угодно, но в итоге-то нужно протестировать единственную релизную версию, с оптимизациями и без говна. Если ты делаешь #ifdef'ы, то придется их убирать хотя бы из этой единственной тру релизной версии, и тогда все, что ты ИНТЕЛЛЕКТУАЛЬНО ТЕСТИРОВАЛ будет уже не совсем тем кодом, который идет в продакшен. В продакшене появляются баги, которых нет ни в одной из других сборок, в тестовой, "совсем тестовой", "полурелизной", "почти релизной", ну ты понел. А в релизной версии нет инструментов для ловли бага, потому что говно удалили, а отладочная информация не включается. Ты отдаешь релиз тестерам, они говорят "вот тут примерно хуйня какая-то". И приходится ебаться вслепую, потому что кое-что наставил блядских compile-time условий.

Ответы: >>545146

17 Сен, 16:24 #297 #544517

>>544509
Ориджинал. Когда доходит до 400 постов, я начинаю беспокоиться, потом тяну до последнего, и уже перед самым бамплимитом собираю яйца в кулак, и, проклиная все на свете, выдавливаю из себя очередную порцию стихов. Да, я знаю, что я хуевый поэт, и вообще это калька с Данте.

17 Сен, 17:14 #298 #544536

Аноны, не гоните ссаными тряпками.
Как мне считать текст из файла в массив символов char для последующих операций с ним?
Или, может быть, есть какие-нибудь еще варианты считывания текста и оперирования с ним?

Ответы: >>544538, >>544542, >>544552, >>544739

17 Сен, 17:20 #299 #544538

>>544536
Язык - C?

Ответы: >>544541

17 Сен, 17:22 #300 #544541

>>544538
Плюсы.
Название треда говорит же

Ответы: >>544627

17 Сен, 17:26 #301 #544542

>>544536
//Сколько символов в файле
std::size_t mamka_size = 0FFFFFFh;
std::ifstream tvoya_mamka {"mamka.txt"};
std::istream_iterator it {tvoya_mamka};

//Размер массива не меньше размера файла
std::array <char, max_size> arr;
std::copy_n (it, mamka_size, std::begin (arr));

Ответы: >>544543, >>544547

17 Сен, 17:29 #302 #544543

>>544542
istream_iterator <char>, конечно же.

17 Сен, 17:36 #303 #544547

>>544542
Не работает, браток.
Какие библиотеки нужны?

Подключены
#include <iostream>
#include <fstream>
#include <string>
#include <Windows.h>
#include <iterator>

17 Сен, 17:50 #304 #544552

>>544536
Да хоть так http://www.cplusplus.com/reference/fstream/ifstream/rdbuf/

Ответы: >>544564

17 Сен, 18:19 #305 #544564

>>544552
Спасибо, няша!

17 Сен, 19:23 #306 #544627

>>544541
Я подумал, что C, потому что массив символов char.
http://en.cppreference.com/w/cpp/io/basic_ifstream

17 Сен, 19:32 #307 #544634

Пишу сортировку бинарным деревом. Подфункция создание отсортированной последовательности из дерева: лучше запилить две подфункции для разного порядка (убывающий/возрастающий) или восстанавливать в фиксированном порядке в вектор, а потом в зависимости от нужного копировать его от начала к концу или от конца к началу. ?

Ответы: >>544642

17 Сен, 19:39 #308 #544642

>>544634
Функцию сравнения нужно вынести в класс-компаратор, который будет шаблонным параметром.

Ответы: >>544643

48 Кб, 674x600

17 Сен, 19:41 #309 #544643

>>544642

Ответы: >>544658

17 Сен, 20:06 #310 #544658

>>544643
Была if (yoba < yoba[i+1]) станет if(compare(yoba, yoba[i+1])), то есть сравнение ты выносишь в отдельную функцию. Точнее не функцию, а класс с перегруженным operator():
template<class T>struct Less { bool operator(T l, T r){return l < r; };
template<class T>struct Greater { bool operator(T l, T r){return l > r; };

И далее было void yoba_sort(массив), стало template<class Comparator = Less> void yoba_sort(массив) { Comparator comparator; ... }

Ответы: >>544866

106 Кб, 1079x706

17 Сен, 20:22 #311 #544668

Почему у меня в Eclipse такое вылазит, когда нажимаю Run?

Ответы: >>544680, >>544701, >>544704

17 Сен, 20:30 #312 #544680

>>544668
Я бы начал с имени проекта латиницей.

Ответы: >>544692, >>544695

85 Кб, 1053x740

17 Сен, 20:39 #313 #544692

>>544680
Латиница ничего не меняет.

45 Кб, 657x370

17 Сен, 20:41 #314 #544695

>>544680
Здесь тоже нет реакции на Run.

17 Сен, 20:49 #315 #544701

>>544668
А у тебя компилятор там есть? А ты точно компилишь c++, а не фортраном каким-нибудь? А ты конфиги не менял?

Ответы: >>544897

17 Сен, 20:52 #316 #544704

>>544668
Поставь себе QT Creator.
Библиотеки QT при этом использовать не обязательно.

17 Сен, 21:02 #317 #544709

Господа, прошу простить нюфаньский вопрос, но я так и не понял, как интепретировать этот вопрос в гугле. Я наткнулся на использование знака разыменования при объявлении переменной типа данных char и каково было мое удивление, если не сказать что я просто ахуел, когда увидел следующее:

char *name = "слово";

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

Ответы: >>544718, >>544723

17 Сен, 21:13 #318 #544718

>>544709
Это не разыменование, это объявление переменной name с типом "указатель на char".

Ответы: >>544720

17 Сен, 21:16 #319 #544720

>>544718
Достаточно коротко, что бы я ничего не понял. А где почитать об этом - не в курсе?

17 Сен, 21:20 #320 #544723

>>544709
Массив - непрерывный кусок памяти плюс константный указатель на начало массива.
const char name == char name[];
Когда ты пишешь char name = "abc", в память непрерывно записывается "abc", то есть три char значения. Дальше работаешь с этим всем как с массивом или с указателем (name == *(name + i)). Иди почитай про указатели ещё раз.

Ответы: >>544725

17 Сен, 21:23 #321 #544725

>>544723
А-а-а, опять забыл, что звёздочки съедаются.
"Массив - непрерывный кусок памяти плюс константный указатель на начало массива.
const char 1name == char name[];
Когда ты пишешь char 1name = "abc", в память непрерывно записывается "abc", то есть три char значения. Дальше работаешь с этим всем как с массивом или с указателем (name[k] == *(name + k)). Иди почитай про указатели ещё раз.

17 Сен, 21:48 #322 #544739

>>544536
Если файл нужно считать ПОЛНОСТЬЮ, то C++11 средствами ПРОТОТИПЫ решения будут среди следующих вариантов:

http://insanecoding.blogspot.ru/2011/11/how-to-read-in-file-in-c.html

Если ты совсем новичок, то самый понятный из всех приемлемых по скорости способов вот:

http://ideone.com/wJBJbt

не обращай внимания, что не компилируется, откуда ему файл data.txt найти-то

17 Сен, 22:40 #323 #544759

Кстати, вопрос команде знатоков.

std::string govno{ "mocha" };

&govno[0] это то же самое, что и govno.data() ?

Ответы: >>544798, >>544865

18 Сен, 00:02 #324 #544798

>>544759
По ходу, нет: data() даёт копию данных, если я правильно понял, из-за дописывания '\0' к массиву чаров...

http://programmers.stackexchange.com/questions/218879/what-is-the-difference-between-string-c-str-and-string0

Ответы: >>544865

18 Сен, 04:12 #325 #544865

>>544798
Не совсем так.
>>544759
По стандарту последовательное размещение в памяти гарантируется только для vector. Теоретически string может быть, например, оберткой над list, и каждый его символ физически не соседствует с предыдущим и следующим. Метод data () гарантирует, что вернет const char *, но просто ли берется указатель на первый символ, или все строится при вызове прямо на месте, не уточняется. Ирл бывают реализации строк, основанные на подсчете ссылок, это полезно, когда у тебя одна и та же подстрока встречается много раз. В этом случае строка реализуется как дерево указателей на подстроки, а при вызове data () который в этом случае весьма дорогой все они копируются в временный буфер, ан который и возвращается указатель. Поэтому для &govno[0] никаких гарантий дать нельзя, кроме того, что там будет первый символ строки. Использовать это как адрес всей строки некорректно.

Ответы: >>544867

18 Сен, 04:17 #326 #544866

>>544658
Два чаю, только less и greater в точности такие уже есть в STL. Как и sort_heap, впрочем.

18 Сен, 04:26 #327 #544867

>>544865
Хотя нет, вот тут таки все поменялось с новым стандартом. До C++11 было так, как я сказал, а теперь добавили требование на непрерывное хранение. Кроме того, data () и c_str () обе возвращают строку с нулем на конце а раньше это требовалось только для c_str (). Таким образом, ноль в любом случае хранится после строки, и разницы с &govno[0] нет, за исключением одного. Когда строка пустая, &govno[0] вызовет access violation, а data () и c_str () вернут nullptr. Лучше использовать методы, в общем.

Ответы: >>544868

18 Сен, 04:30 #328 #544868

>>544867
Лол, покурил стандарт, все еще веселее. Для всех трех data (), c_str () и &govno[0] поведение одинаково, даже для пустых строк они вернут указатель на строку из единственного нуля. Так что теперь можно использовать любой из способов, разницы никакой нет.

Ответы: >>544906

34 Кб, 492x366

18 Сен, 07:06 #329 #544889

Зацените compile-time quicksort.
http://ideone.com/RXyHUL

18 Сен, 07:50 #330 #544897

>>544701
Не менял. Что нужно менять и докачивать? А то еще несколько суток буду с попыткой начать, тщетно пытаться.

Ответы: >>544902

82 Кб, 1010x719

18 Сен, 08:19 #331 #544902

>>544897
Выкачал еще что-то с Eclipse. Теперь просто вылазит такое:
без сообщения об ошибке.

Ответы: >>545119

18 Сен, 08:46 #332 #544906

>>544868
>Лол, покурил стандарт
Давай прямую выдержку в студию.

>Для всех трех data (), c_str () и &govno[0]
Для первых двух точно да. Но они же работают через копирование, дописывая '\0' в конце так?

Кроме того, &govno[0] дописывает или не дописывает '\0' в конце?

Ответы: >>544916

18 Сен, 09:19 #333 #544916

>>544906
21.4.1/4 гарантирует, что все символы в [0, size ()), т.е. не считая терминального нуля, хранятся последовательно.
21.4.5/2 гарантирует, что govno[govno.size()] вернет указатель на какой-то \0, который не обязан находиться сразу после строки в памяти.

Но.

21.4.7/1 гарантирует, что data () и c_str () вернут p = &govno[0], но одновременно и гарантирует, что p + govno.size () == &govno[govno.size()], который указывает на \0, согласно 21.4.5/2.

Таким образом, единственная возможная реализация таки ставит \0 сразу после строки в памяти. Алсо, никакое копирование было бы невозможно и без этого пункта, потому что сложность всех этих методов гарантируется константная, а копирование требует линейной.

Ответы: >>544922

18 Сен, 09:32 #334 #544922

>>544916
Короче, я правильно понял, что

govno.data() == govno.c_str() == &govno[0]

вообще всегда и во всём, включая govno.length() == 0 ?

Ответы: >>544934

18 Сен, 09:53 #335 #544934

>>544922
Именно. Если у тебя не хитровыебанная версия стандартной библиотеки десятилетней давности.

Ответы: >>544936

18 Сен, 09:55 #336 #544936

>>544934
Вообще не понимаю, как люди учили язык до C++11. Это же не язык был, а что-то ужасное.

Ответы: >>544946

18 Сен, 10:29 #337 #544946

>>544936
Ты еще не видел того, что было до стандартизации. RTTI десять лет вводили по различным компиляторам.

18 Сен, 15:36 #338 #545119

>>544902
Так, чувак. Если у тебя норм интернет, сходи и скачай Visual Studio Community 2015. Если у тебя говно инет, то я видел у тебя ещё и Code::Blocks. В этом случае ты идёшь вот сюда http://www.mingw.org/
Или сразу вот сюда http://sourceforge.net/projects/mingw-w64/
Качаешь оттуда вирусняк, распаковываешь, запускаешь. После того, как ты запустишь установщик, он предложит тебе выбрал файлы для скачивания. Качаешь файлы для C++ (не помню, что именно, сам справишься).
ВАЖНО! Либо скачивай сразу в папку, где у тебя лежит Code::Blocks, либо потом перемести скачанную папку MinGW в папку Code::Blocks.
Потом запускаешь (или перезапускаешь Code::Blocks), он должен выдать сообщение о том, что найден новый компилятор. Идёшь в настройки, ищешь строку вроде "Выбрать компилятор", выбираешь найденный и пробуешь опять...
В этот момент я пошёл и загуглил ебаное "eclipse c++", нашёл вот это. http://habrahabr.ru/post/241133/
Если эта статья тебе не поможет, допишу конец моего поста. И почему мне кажется, что нихуя мне не придётся дописывать?

Ответы: >>545357

18 Сен, 15:53 #339 #545136

Хочу работать в гугле жить в америке и писать на крестах сложные алгоритмы и оптимизации. Заканчиваю лафоре начинаю седжвика и учу инглиш. В каком направлении развиваться ещё 2 года? Что читать? Что писать? Чему учится?

Ответы: >>545158

18 Сен, 16:00 #340 #545146

>>544516
>Потому что стандартные версии рассчитаны на стандартное применение.
У стандартных умных указателей аллокатор - один из шаблонных параметров. Я так и не понял, зачем лезть внутрь.
Изначальный вопрос был не в этом, а в том, зачем делать new[], тягающий malloc, там, где vector работает.

>Умение думать включает в себя не только отказ от велосипедов там, где они не нужны, но и отказ от стандартных средств, когда их недостаточно.
Помимо стандартных средств и велосипедов есть еще и сторонние средства типа boost::pool.

>Мы же с тобой говорили об обработчике-создателе дампа. Ну вот, ты пишешь что-то подобное, а потом оказывается, что в одной версии оказался корректный код, а в другой некорректный, и начинается ебля.
Это ты сам себе выдумал. Ты говорил о том, что "данные долго готовятся перед багом", на что я сказал, что в том месте, где они готовятся, нужно добавить save_data();exit();, запустить программу, далее и вместо долгого получения данных сделать load_data();. После отладки этот код стирается.
>Этот leak detector есть надстройка над вендовым API для контроля аллокаций. Уж извини, под каждой системой свои методы решения задач, valgrind'а не завезли.
Так это под твоей системой принято на каждый чих дебаггер вызывать и дрючиться.

>В продакшене появляются баги, которых нет ни в одной из других сборок, в тестовой, "совсем тестовой", "полурелизной", "почти релизной", ну ты понел.
В продакшене появляется баг, в дебажной не повторяется. Тогда ты смотришь полурелизную - нет бага, почти релизную - есть. Ага, смотришь, чем они отличаются и видишь vld

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

Ответы: >>545153, >>545198

18 Сен, 16:05 #341 #545153

>>545146
Бля. Вы все ещё спорите об отладке и дебагах? Позовёте когда закончите.

Ответы: >>545159, >>545170

18 Сен, 16:06 #342 #545157

>Проблема есть, когда ты вместо ассерта пишешь #ifdef и хуяришь нетривиальный код, различный в разных версиях.
Это - моветон. Ты просто делаешь 2 уровня ассертов
#ifdef ASSERT_LEVEL == 0
#define assert1 пусто
#define assert2 пусто
#elseif ASSERT_LEVEL == 1
#define assert1 код ассерта
#define assert2 пусто
#else
#define assert1 код
#define assert2 код
#endif
И далее везде расставляешь стандартные assert'ы и там, где тебе надо, даешь им уровень.
>но в итоге-то нужно протестировать единственную релизную версию
Это называется "скупой платит дважды". Тестеру нужно дать все версии и пусть тестирует дольше, но локализует версию, в которой появляется баг.

Ответы: >>545205

18 Сен, 16:06 #343 #545158

>>545136
У Алены недавно аватарка сменилась, что-то совсем постарела и погрустнела. Так что не рекомендую Америку, жизнь там тяжелая у крестоблядей.

18 Сен, 16:07 #344 #545159

>>545153
Во-во-во, этому чаю за счёт комитета стандартизации. Нашли что обсудить. Скорость постинга околонулевая, не считая них, по ходу все в школу пошли в сентябре.

18 Сен, 16:10 #345 #545170

>>545153
Я точно ни с кем не спорю.

Ответы: >>545198

18 Сен, 16:26 #346 #545198

>>545146
>один из шаблонных параметров
Во-первых, у умных указателей стандартных в шаблонных параметрах нет никакого аллокатора, только deleter. И нужен он обычно вообще не для управления памятью, а для освобождения ресурсов, которые нельзя просто взять и удалить. Во-вторых, аллокатор в любом случае должен уметь выдавать raw-pointer на свежевыделенную память, этого требует интерфейс. Память эту он берет у системы опять же при помощи raw-pointers, и хранит у себя дополнительный пул. Тебе придется пачкаться как минимум в двух точках - при получении памяти и при отдаче ее по требованию.
>делать new[], тягающий malloc, там, где vector работает
Это все инкапсулировано в аллокаторах, которые прикручены для нестандартной стратегии выделения памяти, в месте, где это критично по скорости. Я это уже говорил, по-моему.
>типа boost::pool
boost помогает, конечно же. Но в библиотеках тоже есть не все, и чем специфичнее задача, тем меньше шансов, что ты найдешь готовое решение, которое не придется допиливать. К тому же, boost весьма прожорлив, это ограничивает его применимость.
>данные долго готовятся перед багом
У нас же не 70-е с пакетной обработкой данных. Данные забираются маленькими порциями, изредко какая-то порция вызывает крах.
>на каждый чих дебаггер вызывать и дрючиться
Утечки дебаггером даже у нас не ловят. Это извращение какое-то было бы.
>Ага, смотришь, чем они отличаются и видишь vld
...vld и еще несколько прикрученных утилит. Не забывай, если для каждой комбинации утилит делать отдельную сборку, то получится k! сборок, и ты заебешься даже просто ждать, пока они скомпилируются и прогонятся, не говоря об отладке.
>>545170
Хоть горшком назови, только в печь не ставь.

Ответы: >>545234, >>545240

18 Сен, 16:36 #347 #545205

>>545157
>Это называется "скупой платит дважды". Тестеру нужно дать все версии и пусть тестирует дольше
Нет, ты не понял меня. Я не говорю, что тестировать нужно только ее. Имелось в виду, что конечная цель - работоспособная релизная версия, и если пляски с тестированием кучеи промежуточных сборок не решают проблему из-за различия в параметрах с релизной, то приходится делать как-то иначе.

18 Сен, 16:40 #348 #545211

>>540763
Значицца так. Мне скучно, поэтому я роллирую, и если не выпадет что-то чересчур сложное реализую через шаблоны, на метауровне.

Ответы: >>545212

18 Сен, 16:41 #349 #545212

>>545211
Реролл.

Ответы: >>545213, >>545217

18 Сен, 16:42 #350 #545213

>>545212
И ещё.

Ответы: >>545214, >>545217

18 Сен, 16:43 #351 #545214

>>545213
Почему ничего нормального не выпадает? нова ролл.

Ответы: >>545217

18 Сен, 16:45 #352 #545217

>>545213
>>545214
Да ты охуел, меня все в >>545212 устраивает. Буду пилить генератор.

Ответы: >>545220

18 Сен, 16:45 #353 #545218

Двач, я сегодня впервые написал что-то реально полезное. У меня есть предмет в шараге - дискретная математика, и я написал дискретный калькулятор на основе формул что мы уже успели пройти. Зацените:
http://pastebin.com/zGqpsbXv

Ответы: >>545224, >>545226

18 Сен, 16:46 #354 #545220

>>545217
Просто рероллить в тематике это очень весело!

18 Сен, 16:48 #355 #545224

>>545218
>\n
Замени.

Ответы: >>545227

18 Сен, 16:48 #356 #545226

>>545218
ах да не обращайте внимание на смесь английского и транслита, для себя писал. И r,p,s - это размещение, перестановка и сочетание соответственно. Еще я не уверен что оно будет нормально работать с факториалами больше 13.

18 Сен, 16:49 #357 #545227

>>545224
зачем? и так ведь работает.

Ответы: >>545229

18 Сен, 16:49 #358 #545229

>>545227
Непереносимо.

Ответы: >>545230

18 Сен, 16:50 #359 #545230

>>545229
на эндлайны заменить?

Ответы: >>545231

18 Сен, 16:51 #360 #545231

>>545230
Да.

Ответы: >>545237

18 Сен, 16:52 #361 #545233

>conio.h
Дальше не читал.

Ответы: >>545237

18 Сен, 16:52 #362 #545234

>>545198
>Во-первых, у умных указателей стандартных в шаблонных параметрах нет никакого аллокатора, только deleter.
Это параметр в allocate_shared, не суть вообще. Главное, о чем я говорил, что под капот им лезть не нужно, чтобы написать кастомный аллокатор.
>Во-вторых, аллокатор в любом случае должен уметь выдавать raw-pointer на свежевыделенную память, этого требует интерфейс.
Изначальный вопрос был о том, откуда взялся delete[], почему вместо него не было vector<yoba, my_yoba_allocator>. Ты написал,

>Но в библиотеках тоже есть не все, и чем специфичнее задача, тем меньше шансов, что ты найдешь готовое решение, которое не придется допиливать.
Хуй знает.
>Не забывай, если для каждой комбинации утилит делать отдельную сборку, то получится k! сборок, и ты заебешься даже просто ждать, пока они скомпилируются и прогонятся, не говоря об отладке.
Да у тебя же КОМБИНАТОРНЫЙ ВЗРЫВ. Для локализации бага достаточно log2(k) сборок, но проще сделать k сборок - т.е. постепенно прикручивать фичи. Когда тестер дает баг, программист пытается найти его в релизе, а далее постепенно откатывается к дебагу, потом (если баг еще в наличии) - по коммитам до последней работающей версии.

18 Сен, 16:56 #363 #545237

>>545231
http://pastebin.com/pMhNDp30
>>545233
что не так с ним?
Если есть какие-то альтернативы взять у пользователя данные и что бы он не нажимал энтер, то я о них не знаю, я ток Лафоре 10 глав прочитал.Да и функция из conio.h используется только одна - _getch(); когда программа просит пользователя нажать любую кнопку что бы выйти.

Ответы: >>545246, >>545252

18 Сен, 16:57 #364 #545240

>>545198
Опять интерфейс макабы рулит.
>Во-вторых, аллокатор в любом случае должен уметь выдавать raw-pointer на свежевыделенную память, этого требует интерфейс.
Изначальный вопрос был о том, откуда взялся delete[], почему вместо него не было vector<yoba, my_yoba_allocator>. Ты написал "Говорю же, это самописные аллокаторы", но я так и не нашел, где это было написано до моего вопроса, слово "аллокатор" первый раз встречается в том посте.

А так в целом могу сказать, что нежелание пользоваться дебаггером приучает к системному подходу. Ты спокойно локализуешь баг вплоть до сборки и коммита, а дальше смотришь, а что, собственно, поменялось. Потом смотришь дампы того, что поменялось и, возможно, запускаешь дебаггер. А дебаггером - хуяк-хуяк, есть RELEASE есть DEBUG, две недели ебемся с vld.

Ответы: >>545248

18 Сен, 17:00 #365 #545243

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

Ответы: >>545246

18 Сен, 17:01 #366 #545246

>>545237
Ещё со switch можно что-то сделать. Не разбирался что там происходит, но возможно можно сделать виртуальные функции или указатели на функции чтобы вызывать одной строчкой.

>>545243
horosho teperi oldfagi toge budut govorit na translite

Ответы: >>545249

18 Сен, 17:03 #367 #545248

>>545240
Ну значит я хотел про это написать постом раньше, но забыл. Не серчай.

18 Сен, 17:05 #368 #545249

>>545246
К главе "Виртуальные функции" я только сейчас перехожу, а про указатели на функции Лафоре в главе "указатели" ничего не говорил. Вот пройду виртуальные функции - модернезирую свою ПРОГРАММУ.
P.s. капча: Выберите все изображения, где есть указатели.

18 Сен, 17:09 #369 #545252

>>545237
Я дочитал до функции факториала, в которой ты факториал вычисляешь с помощью int b; Ты знаешь, что int значение это крайне мало для такого огромного говна, как факториал, и твоя функция для 13! уже выдаст ошибку? Ситуацию можно улучшить с помощью использования unsigned вместе с long long, но это тоже мало. Короче, чувак, твоё говно - полное говно и дальше факториала я не читал.

Ответы: >>545253, >>545255

18 Сен, 17:12 #370 #545253

>>545252
и что мне делать с факториалом что бы было достаточно для 20 хотя бы? Я же просто не знаю еще.

Ответы: >>545256

18 Сен, 17:12 #371 #545254

>Choose s povtorami or not 1/2
>Type m and n cherez probel:
this is voshititelno

18 Сен, 17:13 #372 #545255

>>545252
А разгадка одна - следует использовать свой класс, в котором число не ограничивается по размеру например, deque из битовых полей, а умножение перегружено Карацубой.

18 Сен, 17:13 #373 #545256

>>545253
Прикрутить библиотеку с длинной арифметикой.

Ответы: >>545260, >>545261

18 Сен, 17:15 #374 #545260

>>545256
Ок, попозже займусь этим. А сейчас мне пора ехать. Спасибо за критику и советы, Аноны.

18 Сен, 17:15 #375 #545261

>>545256
Нет! Писать самому.

18 Сен, 20:59 #376 #545357

>>545119
Почему опять что-то не так? На Code::Blocks запускается Hello World, набираю свою программу, и запускается окно хеллоу ворлд, а потом и вообще нихрена. Блжат что за ебля с этими компиляторами, я не пойму.

Ответы: >>545386

2 Кб, 144x90

18 Сен, 21:27 #377 #545386

>>545357
Тебе дали ссылку на настройку eclips'a, а ты пошёл делать по недописанному мини-гайду по настройке Code::Blocks? Возьми сажи, братишка. Лично для тебя принёс.

Ответы: >>545598

19 Сен, 08:44 #378 #545575

пацаны а напомните, какой самый незашкарный способ хранения данных настроек программы во внешнем файле ?

GetPrivateProfileString я так понимаю для опущенцев, libconfig/libconfuse для пидоров, Program_options из состава boost только ради них ставить не стоит, а QSettings если уже сразу на QT пишешь ?
Про g_key_file из состава glib для поехавших гномоблядков даже не вспоминаю.

70 Кб, 941x673

19 Сен, 10:12 #379 #545598

>>545386
И где же здесь мое окно dos? И выводит не то что нужно а опять этот ссаный хеллоуворд.

Ответы: >>545604

LOL, Eclipse никогда даже пытаться ставить не буду. 19 Сен, 10:39 #380 #545604

>>545598

Ответы: >>545606

19 Сен, 10:54 #381 #545606

>>545604
А что поставить чтоб без еботы????

Ответы: >>545607

19 Сен, 10:56 #382 #545607

>>545606

рекомендую в консольке, как деды
для простеньких программ и для обучения самое то

Ответы: >>545608, >>545648

19 Сен, 10:57 #383 #545608

>>545607

notepad programma.cpp
cl programma.cpp
programma.exe

39 Кб, 350x523

ИЩУ МЕНТОРА Iiyama 19 Сен, 11:12 #384 #545610

ребята, здорова.
(извиняюсь за дубляж)
Такая ситуация :
26 лет.
Программач - это моё профильное образование, но опыта работы в нём нет. Да , чисто мой косяк, хотя есть оправдание - в моём регионе реально негде работать по профилю. И поэтому года три работал и занимался совершенно другой хренью. Сейчас надоело. Вкатываюсь.

Решил потратить пару месяцев, чтобы подтянуться до среднего\базогового уровня (освежить память , знания и т.д) чтобы переехать куда-нибудь (например СПб : большой город, но не такой дорогой как МСК) и ходить на собеседования .
И я даже определился с языком - C++.

Но я сейчас дальше носа собственного не вижу.
Советоваться в плане направления движения не с кем, коннекта никакого нет.
На форумах удобно спрашивать, по конкретным вопросам, а не по абстрактным.
Самому себе задания придумывать не могу, по той же причине - просто сомневаюсь в актуальности (пока в планах добить Липпмана, потом СТЛ и что-нить по алгоритмам и оптимизации кода), но что делать дальше - не знаю.

Поэтому ищу ментора. Нянька не нужна - просто человек, который подскажет куда смотреть,
на что обращать внимание, что поделать, чтобы докатиться до уровня собеседований
..или как то так
(или может нужны дополнительные руки, благо времени свободного в избытке)

Ответы: >>545680

sage 19 Сен, 13:07 #385 #545643

Как узнать размер объекта из его метода? sizeof разыменованного this? Можно свой sizeof написать? Как он работает?

Ответы: >>545678

19 Сен, 13:34 #386 #545648

>>545607
Допустим предварительно стоит Linux на виртуалке. Но там же делается это через некий vim, и как загрузить туда эти библиотеки или что это. Чеееерртт мне учить кресты нужно а я ебусь с этими программами вместо этого.

Ответы: >>545650, >>545685

19 Сен, 13:37 #387 #545650

>>545648
vim не обязательно. Хоть в блокноте код пиши. потом компилятор из консольки запускаешь.

19 Сен, 14:26 #388 #545678

>>545643
Это глупость какая-то. Если ты вызываешь невиртуальный метод объекта tvoya_mamka, то ты уже знаешь его тип и размер, и можешь просто писать sizeof (tvoya_mamka). Если у тебя есть только указатель на базовый класс, то делаешь виртуальный метод из одной строчки, который возвращает этот sizeof. Но в любом случае sizeof вычисляются на этапе компиляции, поэтому код сгенерируется с жестко зашитым числом-размером, как будто ты написал return 4, например.

Ответы: >>545679

sage 19 Сен, 14:30 #389 #545679

>>545678
>sizeof вычисляются на этапе компиляции
Размер объекта же можно менять.

Ответы: >>545681, >>545682

19 Сен, 14:31 #390 #545680

>>545610
Читать книжки из шапки про "учимся не писать говнокод".
Научиться в git, какую-нибудь систему сборки, фреймвор для тестирования gtest.
Познать STL.
Познать boost.
Реализовывать простые идеи выше была картинка-рулетка, результаты выкладывать на гитхаб.

Ответы: >>545687

19 Сен, 14:31 #391 #545681

>>545679
Как?

Ответы: >>545684

19 Сен, 14:32 #392 #545682

>>545679
Только не в крестах. Это не пистон тебе, лол.

19 Сен, 14:38 #393 #545684

>>545681
string меняет свой размер.

Ответы: >>545686, >>545727

19 Сен, 14:40 #394 #545685

>>545648

вижуал студия сразу иконку консольки делает
а можно и восвсе mingw на винду поставить

Ответы: >>545714

19 Сен, 14:41 #395 #545686

>>545684
Иди нахуй, долбоёб.

Ответы: >>545688

19 Сен, 14:43 #396 #545687

>>545680
спасибо за ответ , бро.
скопирую твое сообщение в ориентиры
просто когда не с кем посоветоваться пыл пропадает и рабочий настрой. это как по глухому лесу идти : идёшь идёшь , а куда придёшь и придёешь ли вообще - хрен пойми.

19 Сен, 14:43 #397 #545688

>>545686
Я ещё не до конца дочитал. Но почему тут 2 раза 4, а не 3 и 6?
https://ideone.com/IHllfU

Ответы: >>545692, >>545697

19 Сен, 14:45 #398 #545692

>>545688
Ты так толст, что тонок или правда не понимаешь?

Ответы: >>545695

19 Сен, 14:46 #399 #545695

>>545692
Не понимаю.

Ответы: >>545698

19 Сен, 14:48 #400 #545697

>>545688
Потому что этот string содержит внутри себя указатель на char* и больше ничего. Ты можешь поменять размер блока данных по этому указателю, но сам класс должен иметь один и тот же размер (сумма размеров его полей).

Ответы: >>545698, >>545699, >>545700, >>545769

19 Сен, 14:49 #401 #545698

>>545695
string хранит char* (и я преполагал что ещё и размер, но sizeof(4) говорит об обратном).

>>545697
>сумма размеров его полей
Плюс выравнивание :3

Ответы: >>545732

19 Сен, 14:49 #402 #545699

>>545697
вектор тоже так?

Ответы: >>545701, >>545702

19 Сен, 14:50 #403 #545700

>>545697
>сумма размеров его полей
И плюсь vtbl*

Но в первом приближении верно.

19 Сен, 14:50 #404 #545701

>>545699
Проверь.

Ответы: >>545705

19 Сен, 14:51 #405 #545702

>>545699
Да.

Ответы: >>545705

19 Сен, 14:54 #406 #545705

>>545702
>>545701
да. и с размером 5 и 50 выводит размер 12. что там кроме указателя?

Ответы: >>545708, >>545709

19 Сен, 14:55 #407 #545707

Когда ты пишешь. string s; внутри функции, то компилятор выделяет память на стеке вычитанием 4 из регистра ESP (extended stack pointer, стекъ растетъ внизъ).

http://soliduscode.blogspot.ru/2012/04/creating-local-variables-in-assembly.html
http://wiki.osdev.org/Stack

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

Ответы: >>545710

19 Сен, 14:56 #408 #545708

>>545705
Размер выделенной памяти (capacity) + реальное число элеменов (size)

19 Сен, 14:58 #409 #545709

>>545705
У вектора есть две величины, size и capacity. Size - это размер блока данных, capacity - сколько фактически памяти выделено. Vector просит у системы памяти больше, чем нужно, чтобы эффективно работал push_back. Поэтому 12 - это указатель на начало данных, размер фактических данных, максимальный размер до перевыделения памяти.

19 Сен, 15:00 #410 #545710

>>545707
>Когда ты пишешь. string s; внутри функции
а если в глобальном пространстве имён или с модификатором static, то он где и какого размера выделяется?

Ответы: >>545713

19 Сен, 15:04 #411 #545713

>>545710
В статически распределяемой памяти, которая выделяется во время запуска. Размер будет тот же. Со static ты фактически получаешь глобальную переменную, которую видно только из одной функции. Как в фортране. Основной минус в том, что рекурсия в таком случае невозможна, все "экземпляры" функции используют одну и ту же памяти, для рекурсии нужен стек.

Ответы: >>545715

19 Сен, 15:04 #412 #545714

>>545685
Была вижуал студия, пытался фортран прикрутить, и безрезультатно. Ладно, пойду освобождать место и выкачивать заново студию.

19 Сен, 15:06 #413 #545715

>>545713
понял и с вектором тоже вроде понял. всем спасибо

19 Сен, 15:27 #414 #545727

>>545684
Нет, string хранит указатель на область памяти с символами, которая меняет свой размер.

19 Сен, 15:31 #415 #545732

>>545698
string - массив char значений, заканчивающийся нулевым '\0' знаком, по которому и определяется размер строки. Поэтому на самом деле string занимает char* + char места, но через sizeof выдаёт только размер указателя.

19 Сен, 16:38 #416 #545769

>>545697
>больше ничего.
А как же size и capacity? + строки до 16-ти символов хранят текстовые данные прямо в себе.

Ответы: >>545793

19 Сен, 17:12 #417 #545793

>>545769
Ну если sizeof(string)==4, как иначе может быть? Size и capacity видимо вычисляются динамически проходом до \0. Может, конечно, там pimpl, но как-то странно это.

Ответы: >>545801, >>546424

19 Сен, 17:23 #418 #545801

>>545793
Это не pimpl же. Методы находятся в самом basic_string, а указатель смотрит на POD, в котором size, capacity, копия начала строки и еще один указатель на данные.

Ответы: >>545803

19 Сен, 17:39 #419 #545803

>>545801
Зачем так сделано, лишняя аллокация не повредит?

Ответы: >>546188

19 Сен, 21:12 #420 #545924

Есть неймспейс. Внутри нейспейса две функции. Внутри одной функции именованная лямбда. Можно ли вызвать эту лямбду внутри второй функции? Или пилить лямбду как отдельную функцию? Просто в реале функций 40+, а лямбда вызывается только в двух. Алсо, все шаблонное.

Ответы: >>545927, >>545929, >>546000, >>546189

19 Сен, 21:14 #421 #545927

>>545924
Какую книжечку на русском почитать чтобы понять твой вопрос? В лафоре такого нет.

Ответы: >>545931, >>545936

19 Сен, 21:15 #422 #545929

>>545924
Лямбда что-нибудь захватывает?

Ответы: >>545936

19 Сен, 21:15 #423 #545931

>>545927
Что-нибудь с С++11 в названии

Ответы: >>545936

19 Сен, 21:23 #424 #545936

>>545927
Хабр и >>545931

>>545929
В спецификации указано захват по ссылке, но по факту работает только с переданными аргументами. Алсо он выше по телу файла, нежели вторая функция, откуда я хочу ее вызвать.

Ответы: >>545948

19 Сен, 21:35 #425 #545948

>>545936
В таком случае вынести ее из функции наверх никаких проблем нет.

Ответы: >>545955

19 Сен, 21:40 #426 #545955

>>545948
Есть проблема ЭСТЕТИЧЕСКОГО ВОСПРИЯТИЯ

Ответы: >>545964, >>545976

19 Сен, 21:48 #427 #545964

>>545955
Эстеты пишут на брейнфаке или перле. На C++ пишут практики.

Ответы: >>545968

19 Сен, 21:54 #428 #545968

>>545964
То есть, ты не знаешь, возможно ли добиться того, что я хочу?

19 Сен, 22:04 #429 #545976

>>545955
Странные у тебя представления об эстетике.

19 Сен, 22:35 #430 #546000

>>545924
>функций 40+
И это C++?

Ответы: >>546274

19 Сен, 23:11 #431 #546030

Есть большой std::vector<std::string> v и две практические задачки:

1) удалить последние n элементов вектора наиболее эффективно (pop_back() в цикле на n итераций не канает, давайте что-нибудь поумнее);

2) задачка со звёздочкой: удалить первые n элементов вектора

http://stackoverflow.com/questions/7351899/remove-first-n-elements-from-a-stdvector
std::vector<myvector::value_type>(myvector.begin()+N, myvector.end()).swap(myvector);
как это будет для данной задачи вообще -- так, что ли?
std::vector<v::std::string>(v.begin() + N, v.end()).swap(v);

Ответы: >>546050

19 Сен, 23:22 #432 #546033

Работал кто-нибудь с qwtplot3d? Как это говно подключить к qt?

19 Сен, 23:43 #433 #546050

>>546030
1. v.resize(v.size() - n);
2. по твоей ссылке есть ответы тащемта, самый тривиальный - vector::erase

Ответы: >>546060

20 Сен, 00:03 #434 #546060

>>546050
1. Так и думал, да.
2. >наиболее эффективно

Ответы: >>546075, >>546103, >>546243

20 Сен, 00:17 #435 #546075

>>546060
>наиболее эффективно
define "эффективно"
Можешь завести указатели на начало и конец вектора и работать относительно них. При удалении фактически ничего не удалять, а сдвигать указатели. Как припрет - чистить память.

Ответы: >>546103, >>546215

20 Сен, 01:46 #436 #546103

>>546060
Наиболее эффективное решение может показать только профайлинг. Там я вижу 2 нормальных решения - через swap и erase (которое на ум сразу приходит). Но вообще >>546075 прав - достаточно завести 2 итератора с началом и концом.

20 Сен, 07:09 #437 #546188

>>545803
Исследования показали, что строки слишком часто передаются по значению. Поэтому от старого подхода, когда все они лежат в самом объекте и получается 32 байта, отказались почти все производители стандартной библиотеки.

20 Сен, 07:11 #438 #546189

>>545924
Конечно нет. У нее область видимости будет не неймспейс, а тело функции. Точно так же, как у обычных локальных переменных, к которым извне нет доступа. Неймспейс вообще никакой роли здесь не играет.

20 Сен, 09:59 #439 #546215

>>546075
>define "эффективно"
Самый быстрый способ сдвинуть 0 элемент вектора на N-ный в том же самом объекте (ничего новое не создаётся, даже временное). При этом erase это самый медленный способ, очевидно.

А ещё я хотел спросить, правильно ли я понял синтаксис решения по ссылке:

std::vector<v::std::string>(v.begin() + n, v.end()).swap(v);

Ответы: >>546228, >>546231

20 Сен, 10:23 #440 #546228

>>546215
erase таки будет самым быстрым способом. В современных реализациях STL он проверяет тип элементов вектора на TriviallyCopyable. Если да, то он вызовет memmove, быстрее которого энивей ничего нет для любых данных. Если нет, он будет вызывать move-конструкторы и замедлится, но это и правильно, потому что объекты с нетривиальными конструкторами перемещения не должны перемещаться незаметно для себя, вдруг они свой адрес хранят или еще чего.

20 Сен, 10:27 #441 #546231

>>546215
Приведенное решение как раз таки медленнее всех прочих, потому что в нем: Вызовется конструктор вектора, аллокатор для памяти на n элементов, конструкторы копирования n элементов, метод swap, деструкторы всех элементов старого вектора, деструктор самого старого вектора и деаллокатор всей его памяти. Хуйню написал, короче.

67 Кб, 1458x808

20 Сен, 11:13 #442 #546243

>>546060
erase должен быть константным на конце. Куда эффективней?

Ответы: >>546532

20 Сен, 13:04 #443 #546274

>>546000
Да. Это задачки из книжечки.

20 Сен, 17:30 #444 #546387

>>537129 (OP)
помогите, не работает программа, подскажите как исправить чтобы заработала пожалуйста
http://pastebin.com/imCCkvc7

Ответы: >>546418

20 Сен, 18:14 #445 #546403

>>537129 (OP)
Не был у вас пару тысяч лет. Хотел бы добавить пару IDE.
Clion, хоть пока и сыровата, особенно со сложными шаблонами. А ещё и жрёт дохуя, но очень неплох для кроссплатформы, благодаря интегрированному cmake. И сама иде абсолютно одинаковая на 3х платформах, под ко-е я крестоблядствую. Mac, Linux, Win.

Второе, что хотел бы добавить QTCreator. Вполне неплохая ИДЕ и жрёт мало. Можно юзать тоже на 3х платформах. Хотя есть свои проблемы с шаблонами.

Третье. Пока самый лучший компиль для кроссплатформы на винде - MinGW w64. http://sourceforge.net/projects/mingw-w64/ . Как показывает практика, то код после него шикарно компилируются под линем обычным gcc Удивительно, да?. И с нек-ми проблемами под OS X Yosemite. Особенно это касается фитч 11 стандарта.
Но если целевая платформа винда, то студия вне конкуренции, благодаря куче тулз и хорошему дебаггеру. А ещё нормально юзать глубокое winapi нормально получится только со студии.
Если мак, то крайне не советую юзать XCode. Местами у него пиздящий дебаггер.

И четвёртое. Хотел бы добавить пару книг.
Ни для кого не секрет, что бустовые потоки почти полностью спизжены в стандарт.
Возможно пропихнут asio. Ну и кучу других фишек в последующих стандартах.
И в большинстве компаний знание буста немаловажное требование.
Так что вот - http://rghost.ru/8gdkXVy8l . Увы, но не помню откуда спиздил её.

Немного проектирования и архитектуры. На примерах, к-е вполне могут встретиться.
http://rghost.ru/6CPFv7GFg . Тоже не помню, прощу прощения.

И хотел ещё норм книгу по проектированию дать. Но чот проебал её. Позже найду, надеюсь.

Ответы: >>546497

20 Сен, 18:25 #446 #546407

Немного профилирования.
Помимо встроенных.
valgrind, callgrind - под линь и мак. Позволят отследить как утечки, так и найти "бутылочное горлышко" в вашей программе, к-е замедляет её работу.
http://valgrind.org/

Под винду пробовал только Dr. Memory, если не ошибаюсь, что у него нет коллстака всего кода, но отлично подходит для нахождения потенциальных утечек памяти.
http://www.drmemory.org/

Бесплатный статический анализатор кода - cppcheck.
Не самая лучшая штука, но тем не менее ошибки уровня
void f(cons std::string str){}
Сообщит. Особенно актуально, когда это ваш тип данных. Копирования которого весьма накладное.

Ну и дополнительно - кодить с -pedantic под gcc. Для студии выставляйте /W3.
Тоже позволит писать хороший код.

Ответы: >>546408, >>546497

20 Сен, 18:26 #447 #546408

>>546407
http://cppcheck.sourceforge.net/

20 Сен, 18:27 #448 #546409

Извните, что врываюсь, за плюсами меньше недели >съеби.
Поясните мне за классы и объекты. Пожалуйста.
Вот создаю я класс ЧЕЛОВЕК и в нем же (функцию или процедуру?) при обращении к которой, можно будет получить всю информацию про какого то человека:

class chelovek {
public:
string name;
string last_name;
int age;
void showinfo(){
cout<<name;
cout<<last_name;
cout<<age;
}
};

Класс готов, теперь я могу в программе создать объекты этого класса. Создам двух человеков:

chelovek one
one.name="vasya";
one.last_name="pupkin";
one.age=25

chelovek two
two.name="petya";
two.last_name="huev";
two.age=40

Ну и решил я значит вывести инфу про Васю:
chelovek.?vasya.show_info(0);

Вопросы:
Как создать объект класса "программно", не зная их общего количества?
Например, "группа студентов" - я хочу добавлять их по очереди из уже работающей программы, как это сделать?
Всякие попытки дать уникальное имя классу не работают, типа: "chelovek-n+1"

Задача которую я хочу решить звучит примерно так: при помощи классов создать программу, в которую можно вписывать неопределнное количество людей. У каждого человека должны быть описаны Имя фамилия возраст etc. Программа должна иметь меню управления, из которого имеется возможность проверить все методы класса, такие как "сортировка по имени, фамилию, возрасту", "показать всех людей (перечислить)", "удалить человека", "добавить человека"

Анонимус, отзовись! Я не прошу написать за меня программу. Может быть я неправильно понимаю, что такое классы? Перечитал дохуя инфы, дошел уже до ютубов.
Но всё равно остается непонятным - как управлять объектами класса? То же перечисление всех людей из списка - как вот это вот всё.
Спасибо.

Ответы: >>546410, >>546415, >>546416

20 Сен, 18:33 #449 #546410

>>546409
Почитал тут шапку, и кажется я иду нахуй. Что хотя бы гуглить то по моему вопросу.

Ответы: >>546412

20 Сен, 18:45 #450 #546412

>>546410
Возьми учебник попроще, скажем, Java in a Nutshell, где разобрана 8-я жабба, потом вернись к плюсам.
>не зная их общего количества
Коллекции в JiaN разобраны оч. подробно.

Ответы: >>546413

20 Сен, 18:48 #451 #546413

>>546412
Думаю, мне этот способ не подходит.
Почему никак не гуглится "создать объект класса c++" или "перечислить объекты класса" ?
Может я в корне неправильно мыслю?

20 Сен, 18:51 #452 #546415

>>546409
Объекты создаешь с помощью new. Хранишь их в std::vector (читай документацию). Можно сделать отдельный класс для хранения человеков (внутри него будет вектор) в котором будут все необходимые операции над человеками, но возможно, для тебя такое еще рано.

20 Сен, 18:51 #453 #546416

>>546409
Код на https://ideone.com/.
Второе, судя по твоим словам, то ты хуёво понимаешь что пишешь. Поэтому читай литературу, будь добр.

Касаемо твоего вопроса. Объекты класса ничем не отличаются от того же std::string. Поэтому ты точно так же можешь объединять их в массив http://www.cplusplus.com/doc/tutorial/dynamic/ , юзать для хранения std::vector http://en.cppreference.com/w/cpp/container/vector , std::list http://en.cppreference.com/w/cpp/container/list и так далее.

То что ты хочешь будет выглядеть примерно так:

int main()
{
std::vector<chelovek> people_list;
while(condition)
{
chelovek human;
/ Тут твоя реализация общения с пользователем.
Уровня создать человека? Д/Н.
Введите имя и прочее.
...
/
people_list.push_back(human);
}

return 0;
}

Теперь все созданные люди у тебя хранятся в std::list.
Чтобы найти какого-то конкретного по имени тебе нужно перебрать всех людей в листе.

chelovek find_human(const std::vector<chelovek> &people, const std::string &name)
{
for (int i = 0; i!=people.size(); ++i)
if (people.name == name) return people;
return chelovek(); //возвращаем пустой объект
}

Простой вариант. Но учти, что в стандартной либе уже есть std::find http://www.cplusplus.com/reference/algorithm/find/ и подобные им. Второе есть std::map и подобные, где поиск идёт по ключу.

В третьих для перебора элементов лучше всего использовать итераторы. std::vector<T, Alloc>::begin(), std::vector<T, Alloc>::end() и так далее. Более подробно описано в референсах.

В четвёртых, если юзать 11 стандарт, то можно перебрать всё таким образом:
for (const auto &human: people){ ... }
http://en.cppreference.com/w/cpp/language/range-for

Вот как-то так. И повторю, что читай больше литературы.

Ответы: >>546417, >>546422

20 Сен, 18:54 #454 #546417

>>546416
Бля. Обосрался. В std::vector хранится инфа. А не в листе.
Хотел пример с листом сделать, но вектор ближе всего к обычному массиву. И имеет random access.
Так что там везде про std::vector

20 Сен, 18:55 #455 #546418

>>546387
Поправил, теперь работает.
http://pastebin.com/E3k786fM

20 Сен, 19:08 #456 #546422

>>546416
>if (people.name == name) return people;
if (people[ i ].name == name) return people[ i ];

10 Кб, 356x202

20 Сен, 19:13 #457 #546424

>>545793
Откуда 4? Capacity может быть больше чем size. Проходом по строке его не вычислишь.

Ответы: >>546438

20 Сен, 19:32 #458 #546438

>>546424
https://ideone.com/r33VvK

Ответы: >>546459

20 Сен, 19:53 #459 #546450

А я могу записать объект в "массив" вектора?

Ответы: >>546454, >>546457, >>546465

20 Сен, 19:57 #460 #546454

>>546450
Объект класса в первый элемент вектора, например. Доставьте эту "строчку" кода, пожалуйста.

20 Сен, 20:01 #461 #546457

>>546450
http://www.cplusplus.com/reference/vector/vector/

http://www.cplusplus.com/reference/vector/vector/operator[]/

http://www.cplusplus.com/reference/vector/vector/push_back/ , с изменение размера, если нужно.

20 Сен, 20:04 #462 #546459

>>546438
Видимo в 14-том стандарте string содержит указатель на старый string. Все равно же нужно хранить capacity.
http://ideone.com/uHYFbQ

20 Сен, 20:13 #463 #546465

>>546450
http://en.cppreference.com/w/cpp/container/vector/data
Return value
Pointer to the underlying element storage.

Получай underlying storage и пиши в него что хочешь.

20 Сен, 20:31 #464 #546472

Анонимус, не оставь без внимания. 28 строчка. Вопрос там же.
Как записать в массив объект класса состоящий из 3х разных свойств.
https://ideone.com/eRnzhR

Ответы: >>546480

20 Сен, 20:47 #465 #546480

>>546472
У тебя массив char а ты суешь туда людей. Создай вектор vector<chelovek> massiv; А лучше удали всю ту хуйню что ты написал и читай книги из шапки. Не понимаешь нихуя.

Ответы: >>546488, >>546489

20 Сен, 21:06 #466 #546488

>>546480
Ну отредактировал - всё равно ошибка же.
https://ideone.com/eRnzhR

Ответы: >>546489

20 Сен, 21:08 #467 #546489

>>546488
>>546480
Исправил, спаисбо. Нужно было в квадратных скобках писать.

Ответы: >>546496

20 Сен, 21:17 #468 #546494

Аноны, работаю с char строкой посимвольно. Как мне проверять слово из строки со словами из словаря? И как вообще подключить словарь к программе?

20 Сен, 21:34 #469 #546496

>>546489
Нет, push_back() используй.
То что ты там в квадратных скобочках нахуякал - то все до пизды.

Ответы: >>546498

20 Сен, 21:37 #470 #546497

>>546403
>>546407
От души, братишка, спасибо. Про IDE я сделаю, наверное, отдельный раздел, который вынесу из шапки во второй пост, чтобы не захламлять ее. В шапке будут инструкции для быстрой сборки хэллоуворлдов, а во втором посте уже обзорная инфа про IDE.

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

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

Про утилиты тоже черкну во втором посте.

Еще я собираюсь изменить структуру шапки, чтобы отделить C++11 ньюфажные книжки от старых. А то все выбирают Лафоре, который как раз таки 2004 года, лол.

20 Сен, 21:38 #471 #546498

>>546496
Не обязательно использовать push_back. Если он точно знает что ему нужно именно 10 элементов можно и так.

Ответы: >>546502

20 Сен, 21:50 #472 #546501

Зачем нужен boost, когда есть qt?

Ответы: >>546503

20 Сен, 21:51 #473 #546502

>>546498
Я не увидел, что он создал вектор определенного размера.

20 Сен, 21:52 #474 #546503

>>546501
Вот это сейчас вообще пушка была.
Зачем нужен кетчуп, когда есть майонез?
Библиотеки вообще отличаются более чем полностью.

Ответы: >>546505

20 Сен, 21:54 #475 #546505

>>546503
> кетчуп
> майонез
> отличаются более чем полностью
Но оба для быдла.

Ответы: >>546524

20 Сен, 21:59 #476 #546506

Блять, я сдаюсь нахуй.
Доставьте, пожалуйста, простейший пример
ввода-вывода-хранения объекта класса с несколькими своствами. Без массивов. Хранение не постоянное, а в рамках работы программы.

Ответы: >>546513, >>546516, >>546525, >>546540

20 Сен, 22:14 #477 #546513

>>546506
Хули тебе здесь надо?

20 Сен, 22:29 #478 #546516

>>546506
Ты памятку прочитал?

20 Сен, 22:47 #479 #546524

>>546505
>толька яяяяя знаю что не для быдла
>мама ну не бей мам

20 Сен, 22:48 #480 #546525

>>546506
Кинь свой телеграм, я тебе все объясню

20 Сен, 23:01 #481 #546532

>>546243
Второй вопрос про начало, а не про конец. С концом всё понятно, ресайз.

20 Сен, 23:34 #482 #546540

>>546506
в гугл с++ serialization

Ответы: >>546546

20 Сен, 23:55 #483 #546546

>>546540
http://habrahabr.ru/post/244963/
Господи, какой же понос, что за хуйню я читаю? Что это блядь такое вообще? Я не очень в крестах, извините.

Ответы: >>546567

21 Сен, 00:25 #484 #546554

Есть вообще смысл просить анона сделать подобное задание:
>при помощи классов создать программу, в которую можно вписывать неопределнное количество людей. У каждого человека должны быть описаны Имя фамилия возраст etc. Программа должна иметь меню управления, из которого имеется возможность проверить все методы класса, такие как "сортировка по имени, фамилию, возрасту", "показать всех людей (перечислить)", "удалить человека", "добавить человека"

Подайте хотя бы исходник не такой же но аналогичной программы.

Ответы: >>546557, >>546558

81 Кб, 573x800

21 Сен, 00:36 #485 #546557

>>546554
>при помощи классов создать программу

21 Сен, 00:38 #486 #546558

>>546554
Это и есть круд?

21 Сен, 01:01 #487 #546564

Кто-то вел личные проекты на С++?
О чем они были?
Внезапно осознал, что некуда девать свой творческий потенциал, потому что все что приходит на ум - давно уже сделано в стократном количестве.

21 Сен, 01:14 #488 #546567

>>546546
потому что там хуйня для любителей с++11
сериализация - неотемлимая часть любого развитого фреймворка общего назначения любого языка
ну а то, что ты, блядь, вообще не знаешь что это такое и при этом кодишь что-то - твои проблемы

Ответы: >>546582

21 Сен, 02:20 #489 #546580

Прочитал Мейерса Effective Modern Cepepe

Возьмите меня на работу.

21 Сен, 02:23 #490 #546582

>>546567
Почитал отдельно про сериалиазцию. Понял, сохранял структуры, было дело.
Но там правда крестопонос во всей красе. Хотя с новым стандартом знаком.

49 Кб, 700x433

21 Сен, 10:28 #491 #546637

Поясните за еблю байтов. Вот есть у нас универсальные встроенные типы char, short, int, long, long long и есть два стула множество архитектур начиная с лютого 8-битного эмбеда заканчивая экзотикой каких-нибудь ALPHA, каждая со своими заёбами.

Если мне не принципиально какой тип, лишь бы N байт минимум обеспечил, я беру по табличке
char - 1
short - 2
int - 2
long - 4
long long - 8
Если мне дохуя принципиально (читать файлы, пакеты из сети), то я должен сначала скорректировать byteorder, затем взять int8_t, int16_t, int32_t, int64_t.

Итак, вопросы:
- чем правильнее всего корректировать byteorder?
- как быть если машина не поддерживает например 16 битные числа и тип int16_t недоступен?
- как работают типы (и присутствуют ли вообще) long long/int64_t на 32-битной машине? Реализует ли кокомпилятор эмуляцию автоматически?
- как быть 100% уверенным что структура/массив не имеют алигнов с пустыми байтами? Для чтения файла например.

Ответы: >>546650, >>546655

21 Сен, 11:13 #492 #546650

>>546637
1. Хуй знает, я, если честно, не сталкивался с ручным обеспечением этого. Понятно, что для малых объемов вообще несущественно, как это делать, а для больших я бы, например, прочитал в сыром порядке, а потом векторными операциями прогнал, чтобы перевернуть каждый блок. Платформозависимость во все поля, ага.
2. http://en.cppreference.com/w/cpp/types/integer вот тут видно, что некоторые из них опциональны, и поддерживаться не обязаны. Для остальных поддержка требуется стандартом 18.4.1, так что они энивей есть, хотя могут быть медленными из-за эмуляции. Не используй опциональные типы, либо будь готов ставить самостоятельно using с редиректом на int_fast16_t или типа того, если на очередной платформе соснешь.
3. int64_t и uint64_t опциональные, long long жестко требуется, начиная с 11 стандарта. Так что любой компилятор, соответствующий 11 стандарту обязан эмулировать как минимум long long и все неопциональные fixed-width типы но отдельно для них, разумеется, никто ничего не делает, все объявляют синонимами int/long long, поэтому на практике опциональные просто тоже делаются их синонимами. Как эмулируется long long - дело байтоебское, все это на асме написано, конечно же.
4. В 11 стандарте ввели alignof () в дополнение к sizeof ().

Ответы: >>546652, >>546659

21 Сен, 11:18 #493 #546652

>>546650
Не. Про то что они опциональные я в курсе. Я о том как читать/писать байтовый поток содержащий такие типы если они недоступны? Ебаться с логикой и сдвигами? Ладно, пусть так, но какой IFDEF использовать? Или может готовое что есть?

21 Сен, 11:25 #494 #546655

>>546637
Так вышло, что я поддерживаю одновременно проекты на 8, 16 и 32 битных контроллерах. Уже забыл, когда объявлял переменные без явного указания длины)

Многобайтные расширения поддерживает любой нормальный компилятор, проблема одна - замедление исполнения, причем существенное. Например, интегрирование результатов 12-битного АЦП через прерывания на 8081 контроллере занимало у меня чуть ли не за сотню тактов.

Самая жопа это выравнивание, конечно. Даже если у тебя нет структур, а ты хочешь превратить четыре байта во флоат. При работе с STM под IAR постоянно приходится помнить про прагму data_alignment, например.
Со струтурами же, чтобы не было пропусков, просто смотришь внимательно, чтобы чары шли по два или четыре, добиваешь их явно пустыми байтами и т.п.
Но потом впендюриваешь еще один в середину, и все ломается. Поэтому я в принципе перестал делать явное преобразование массива в структуру, а все поля перегоняю ручками.

Гарантий тебе никто не даст. Рано или поздно ты обязательно выстрелишь себе в ногу.

Ответы: >>546657

21 Сен, 11:28 #495 #546657

>>546655
(быстроапдейт)
Просветление меня настигло, когда оказалось, что с точки зрения IAR в инте под msp430 два байта, а под STM - четыре. Тут-то я и сел переписывать все свое библиотечное барахло, да.

21 Сен, 11:30 #496 #546659

>>546650
Я вот стараюсь смотреть не на стандарт, а на возможности конкретного компилятора, прагмы, вот это все.

21 Сен, 12:12 #497 #546669

Хочу написать сонсольную "записную книжку", реализванную при помощи классов. Запись - вывод.
Прошу пояснить теоретическую "структуру" и работу программы. Что считывать и что куда записывать. В двух словах.
Максимально упрощенно, без усложнений.

Сроки горят, читаьт кникни не успеваю, буду делать свой говногод на ходу. Преподу на код похуй. Лищь бы работало.

Мои рассуждения: создаем класс для типичной записи (запись, автор, дата (только число)).
Делаем функцию, которая будет создавать объект (самое непонятное).
Записываем объект в одномерный и единственный массив (с большой размерностью, 100 например) - нереально наверное без ваших векторов и прочего говна.
И делаем функцию вывода записанных объектов этого класса.

Я верно мыслю или нет?

Ответы: >>546730, >>546732, >>546753

21 Сен, 14:19 #498 #546730

>>546669
> Что считывать
Данные
> куда записывать
В память

21 Сен, 14:21 #499 #546732

>>546669
Бля, чувак, я не знаю, как объяснить. В общем так: если ты понимаешь, как работает класс, то делаешь приватные "переменные/массивы/ещё какая-нибудь хуйня", в чём будешь хранить данные и потом в паблике пилишь функции записи и вывода и с классом работаешь. Если ты не понимаешь, как работают классы, то делаешь так: создаёшь класс "xyeclass", пишешь в классе "public:" и под пабликом пишешь все свои переменные или какая там хуйня, вроде int date; потом создаёшь объект типа "xyeclass", к примеру так - xyeclass var; теперь пишешь var.date = 100500; таким образом записываешь все переменные. Учти, что если у тебя что-то вроде xyeclass *ptr = &var; то вместо ptr.date = 100500; тебе надо писать ptr->date = 100500. Через точку записываешь и считываешь данные из класса. Ну и да, если совсем не ебаться с хранением объектов, то пишешь xyeclass var[100500]; потом var[0].date = 100500; var[1].date = 1488; и так далее. Таким же образом и выводишь: std::cout<<var[0].date<<var[0].xyu;
Дальше объяснять лень, надеюсь тебе препод даст пизды за то, что в футбол хуями играешь, а не дело делаешь.

Ответы: >>546738

21 Сен, 14:27 #500 #546738

>>546732
Таки всё так, как я думал, но как мне реализовать "новую запись"? Записей много и я не знаю их названия, но допустим хочу создать объекты класса с названиями zapis1, zapis2и тд. Как это сделать? В названии объекта игнорируются переменные и я не могу двинуться дальше.

Ответы: >>546749

21 Сен, 14:30 #501 #546746

НОВЫЙ ТРЕД
https://2ch.hk/pr/res/546742.html
https://2ch.hk/pr/res/546742.html
https://2ch.hk/pr/res/546742.html

21 Сен, 14:32 #502 #546749

>>546738
Ты что, гумунитурий? Я же тебе показал, тупица:" xyeclass var[100500]; var[0].date = 100500; var[1].date = 1488; либо запили функцию со статическим счётчиком записей, и передавай ей указатель на объект, либо запили цикл, который сперва проверяет, чего хочет пользователь - получить в жопу свои данные, или наоборот, посрать данными. Потом цикл либо выводит данные, либо опять же по статической переменной счётчика делает новую запись в var[счётчик].date. И я в прошлом своём посте написал, как выдавливать данные из указателя на объект, поэтому съеби нахуй, пожалуйста.

Ответы: >>546760

21 Сен, 14:34 #503 #546753

>>546669
CREATE TABLE notes (
id serial PRIMARY KEY,
content text NOT NULL
);

INSERT INTO notes (content) VALUES ('я ебал коня');

SELECT * FROM notes;

21 Сен, 14:42 #504 #546760

>>546749
Блять, ты не понимаешь, нахуй.
class govnokniga;
public:
char text;
char autor;
int etc-govno;

Я могу прямо в коде создать ебучую запись, но не могу сделать этого из уже работающей программы.
govnokniga zapis1.

Я не могу вместо zapis1 написать переменную, например. В твоем примере все пишется в массив?

Ответы: >>546764, >>546772

21 Сен, 14:48 #505 #546764

>>546760
Что мешает вместо govnoknoga zapis1; написать govnokniga zapis[100500]; и потом использовать этот массив, забив хуй на память? Есть способы динамического выделения памяти, но там надо уметь работать с указателями, векторами и тому подобным говном. Я тебе дал самый простой способ, который может сделать даже первоклассник. Потом прочитаешь литературу и будешь пилить нормальные программы; в моём примере тебе нахуй не нужно ебаться с новой инфой.

Ответы: >>546771

21 Сен, 14:54 #506 #546771

>>546764
То есть я как и прежде объявляю класс (я правильно его показал же?), а потом тупо создаю объекты этого класса с присваиванием им индекса массива? Я не догоняю просто, как массив связан с классом. Запись будет иметь тип date? Я смогу записать в массив этоттипа разве?

ВОт строка
govnokniga zapis[100500]
что обозначает? Мы создаем объект класса типа массив? или что тут происзодит.

Ответы: >>546776, >>546785

21 Сен, 14:55 #507 #546772

>>546760
И да, ещё одно - разве не
class govnokniga
{
//your class
}
?

Ответы: >>546774

21 Сен, 14:57 #508 #546774

>>546772
Да, я просто торопился и опустил это.

21 Сен, 14:59 #509 #546776

>>546771
Имя класса - такая же хуйня, как и всякие int, char, float, и используется точно так же. Но к переменным и функциям класса доступ происходит не напрямую, как в int, char, float, а через оператор "точка". Поэтому govnokniga zapis[100500] - просто создание массива типа govnokniga(как int) по имени zapis из 100500 объектов.

21 Сен, 15:12 #510 #546785

>>546771
И ещё, про оператор точка и данные класса. Смотри, вот у тебя есть
class xyeclass{
pubic:
int date;
string str;
};

теперь ты создаёшь объект:

xyeclass var, another_var;
var.date = 100500;
another_var.date = 1488;
var.str = "эта строка";
another_var.str = "и другая строка";

теперь, если написать

cout<<var.date<<endl<<var.str<<endl;
cout<<another_var.date<<endl<<another_var.str<<endl;

тебе выдаст такое:

100500
эта строка
1488
и другая строка

Ответы: >>546798

21 Сен, 15:28 #511 #546793

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

Ответы: >>546798

21 Сен, 15:29 #512 #546794

Анонсы, давайте пинать труп треда?

Ответы: >>546819

21 Сен, 15:37 #513 #546798

>>546793
>>546785
Спасибо тебе! Сам мразь, уебок!

Ответы: >>546810, >>546816, >>546889

21 Сен, 15:49 #514 #546810

>>546798
На, пожуй
http://pastebin.com/xiGvh4E2

Ответы: >>546816

36 Кб, 432x360

21 Сен, 15:59 #515 #546816

>>546798
>>546810
Пидоры гнойные. Мрази ебаные. Суки гнилые.

13 Кб, 228x228

21 Сен, 16:00 #516 #546819

>>546794
А давай.
СТРАУС ТРУП
СТРАУС ТРУП
СТРАУС ТРУП

Ответы: >>546831

21 Сен, 16:18 #517 #546831

>>546819
Это старая шутка, или сам придумал?

21 Сен, 18:03 #518 #546889

>>546798
Есть вкудахт/телеграм у тебя? Я могу тебе помочь и разжевать все что тебе нужно, у меня как раз время свободное есть, болею.

Ответы: >>546916, >>546929

21 Сен, 18:47 #519 #546913

Аноны, пытаюсь удалить Microsoft Visual Studio 2013. Почему у меня все остановилось на "Configuring your system. This might take a while." и так уже второй час? Что делать с этой хуйней?

Ответы: >>547002

21 Сен, 18:52 #520 #546916

>>546889
Помоги мне?
unrln6

Ответы: >>546930, >>547066, >>547588

21 Сен, 19:08 #521 #546929

>>546889
Блжат, я в пролете. Ни вкудахта ни телеграмма не имею.

Ответы: >>546930, >>547066

21 Сен, 19:08 #522 #546930

>>546916
>>546929

21 Сен, 20:46 #523 #547002

>>546913
Разобрался без вас, ребята.

21 Сен, 22:02 #524 #547066

>>546916
Чо
Это что вообще.
>>546929
>>546929
Заведи

Ответы: >>547112, >>547120

21 Сен, 23:13 #525 #547112

>>547066
А ты только в телеграме и параше есть, либо же где еще?

Ответы: >>547143

21 Сен, 23:21 #526 #547120

>>547066
Я слоу. Дошел до второго ответа.
>Заведи

22 Сен, 00:49 #527 #547143

>>547112
В чем проблема быренько зарегистрироваться?

Ответы: >>547149, >>547157, >>547588

22 Сен, 01:12 #528 #547149

>>547143
На телеграм у меня смартфона нет, а на парашу левой симки.

Ответы: >>547167

22 Сен, 01:39 #529 #547157

>>547143
http://vk.com/bkelb

Ответы: >>547588

22 Сен, 02:29 #530 #547167

>>547149
Там и не нужен смарт, оно кроссплатформенное

Ответы: >>547177

22 Сен, 03:05 #531 #547177

>>547167
Я не использую интернет в телефоне.

22 Сен, 12:56 #532 #547288

Знает кто видеокурсов для ньюфагов. Типа как Шевчук по шарпам?

22 Сен, 20:43 #533 #547588

>>547143
Анон, отпишись мне в вкудахт плз!
>>546916 >>547157 - кун

23 Сен, 00:45 #534 #547706

Бля, я тупой как сибирский валинок - просто пизда, слов нет. Объясните дебилу, как - ебать его в сраку этот алгоритм "правой руки" - использовать ПРАВИЛЬНО? Суть - наебашил я массивчик из простейшего лабиринта - 10 в высоты и 15 в длинну, сам нарисовал его - поворотов штук 6 может, есть 2 прямых путей - почти на всю ширину. Ну короч - ебашу я ветвление, если СЕМАФОР, ПИДАРАС ПОТЫКАНЫЙ, равен нужной мне букве, И, след клетка + 1 != '#', то заходи в условие и делай инкремент. Заебок - выхожу я нахуй из начальной точки), а дальше поворот налево. Дальше проверка СЕМАФОРА, ЧТОБ ЕГО ЧЕРТИ ВЗЯЛИ - меняет этот питурд букву на условие след ветвления, ну и короч так далее. Когда мой значок сталкивается с выбором, а у него их может быть аж два, этот питурд делает следующее..бля ну его нахуй - ща код выкину.

if (mark.sim == 'r' && map.background[mark.coord_y][mark.coord_x + 1] != '#') {
\t\t\tmark.coord_x++;
\t\t\tcontinue;
\t\t}
\t\telse if (mark.sim == 'r') {
\t\t\tmark.sim = 'b';
\t\t}

\t\tif (mark.sim == 'b' && map.background[mark.coord_y + 1][mark.coord_x] != '#') {
\t\t\tmark.coord_y++;
\t\t\tcontinue;
\t\t}
\t\telse if (mark.sim = 'b') {
\t\t\tmark.sim = 'l';
\t\t}

\t\tif (mark.sim == 'l' && map.background[mark.coord_y][mark.coord_x - 1] != '#')
\t\t{
\t\t\tmark.coord_x--;
\t\t\tcontinue;
\t\t}
\t\telse if (mark.sim = 'l') {
\t\t\tmark.sim = 'f';
\t\t}

\t\tif (mark.sim == 'f' && map.background[mark.coord_y - 1][mark.coord_x] != '#')
\t\t{
\t\t\tmark.coord_y--;
\t\t\tcontinue;
\t\t}
\t\telse if (mark.sim == 'f')
\t\t{
\t\t\tmark.sim = 'r';
\t\t}

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

ЧЯДНТ

единственную человеческую блок-схему что я нашел кидаю сюды

http://myrobot.ru/articles/logo_mazesolving.php

Ответы: >>547707

23 Сен, 00:46 #535 #547707

>>547706
сукбля пацаны простите за табы((((((((((((

26 Сен, 12:16 #536 #549255

>>537129 (OP)
По наставлению универа начал в борланде кодить. Он хорош или стоит всё же на вижуал переходить?

Ответы: >>552848

37 Кб, 402x604

27 Сен, 18:23 #537 #549812

Приветствую
Господа, катиться мимо вас толстая веб-пхп-макака, это я.
В веб пошёл от нужды быстро работу найти, но подобное программирование никогда не привлекало, сейчас хочу уйти от туда.
Думаю либо про андроид с жабой, либо про кресты.
За спиной паскаль, руби, два курса вуза, Кормен и т.п., и чувство что это моё.
Но вот в чем вопрос, чем сейчас занимаются программисты на C/C++ ? Меня интересуют конкретные задачи.
И какой уровень нужен для поиска работы?
Что в портфолио положить?

Вот с вебом всё ясно, с мобильными тоже.
А вот чем вы на работе заняты я не очень понимаю.
Помогите разобраться.

32 Кб, 497x304

27 Сен, 22:57 #538 #549944

>>537129 (OP)
При создании проекта появляется такая вот ошибка

28 Сен, 00:47 #539 #550009

можно ли в условии ветвления вызывать функцию, создавая таким образом рекурсию?
if (X > 0 && Maze[Y][X - 1] == Free && Solve(X - 1, Y))
{
return true;
}

вот как выглядит эта параша, функция булевая.

28 Сен, 21:17 #540 #550427

Куда пропал Мейстер треда? Чому никто не отвечает на последние вопросы?

29 Сен, 22:03 #541 #550934

Pshh..Yoba, eto ti?-pshh

02 Окт, 14:41 #542 #552175

Пацаны, пошел на курсы при компании на плюсах, задали написать MVP приложение с использованием OAuth 2.0 для чтения писем с gmail. На QT, конечно же. Сам я студентота и работал в ебучем VS всё время. С чего начать, анон? Я вроде не зелёный, но тут что-то совсем потерялся: пытался гуглить примеры OAuth под QT, а оно какую-то шляпу предлагает.

02 Окт, 20:16 #543 #552332

Анон, ай нид хелп. Как сделать, чтобы в этом(y=x-1) выражении при х<1 выводило 0, а при х>1 выводило результат вычетания, при этом не используя условных операторов

Ответы: >>553287

03 Окт, 20:51 #544 #552848

>>549255

одна хуйня малина
а из вижуала кресты уже выпилили практтически

04 Окт, 18:35 #545 #553287

>>552332
Выполни операцию недопустимую для отрицательных чисел и обработай исключение.
По идее попытка взять корень от <0 вызовет исключение, а вообще ищи функцию C++ которая 100% скинет

87 Кб, 662x580

06 Окт, 15:38 #546 #554413

Нормально ли использовать Spirit для написания парсера простого ЯП?

06 Окт, 23:00 #547 #554678

Здравствуйте, я нафаня. Пользуюсь Mac OS, подрублена Win 8.1 в параллелс на всякий случай. Интересуют методы компиляции .cpp файла, например, в .exe-шник ну и в другие популярные бинарники линукса. Что посоветуете?

Ответы: >>554687

06 Окт, 23:09 #548 #554687

>>554678
Я так понял, что лучшим вариантом будет вижуал студиа для экзешников, а вот с g++ что - то не могу разобраться. Какой формат файла я получаю на выходе? Что за a.out?

кекович 07 Окт, 11:40 #549 #554925

Анон, помоги. Есть следующая конструкция:

[code]auto in = fstream("input.txt");[/code]

Возникает вопрос, будет ли вызван copy constructor, или move?

Ответы: >>556358

42 Кб, 604x466

09 Окт, 01:13 #550 #555576

Суп, котаны. На чем в можно парсить HTML в крестах? Есть ли в qt классы для этого, или может быть отдельные библиотеки?

Ответы: >>556357

09 Окт, 01:13 #551 #555577

Здравствуй, анон. Только начал учить программирование, и возник вопрос. Как составить цикл для разбития n-разрядного числа на цифры?

Ответы: >>556222

11 Окт, 09:50 #552 #556222

>>555577
Тебе в незасаганный тред.

11 Окт, 15:41 #553 #556357

>>555576
https://github.com/google/gumbo-parser
http://www.xmlsoft.org/

Классика.

11 Окт, 15:42 #554 #556358

>>554925
>Скотт Мейерс - Effective Modern C++ (на ангельском) (2015) - https://goo.gl/uImH0J

Обновить тред
Двач.hk не отвечает.
Вы видите копию треда, сохраненную 15 октября 2015 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.

« /pr/В начало тредаВеб-версияНастройки/a//b//mu//s//vg/Все доски

Пользуетесь скринридером — пишите, что можно улучшить.
Host-Food.ru — надёжный хостинг от 12 руб/мес | Free DNS
Зеркала М.Двача: m2ch.hk, m2ch.lib, m2chfapiswfw2wcakptqp4o6ltgchvjuxfab7urxlduraomtlnhw5xad.onion