Вы видите копию треда, сохраненную 8 апреля 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Тот, кто в познаньи от невежд отвык,
Окрест уж не отыщет места гаже.
"Сап, двачик, посоветуй годных книг";
"Тред не читал, какую выбрать либу?";
"Завел гитхаб. Здесь будет мой дневник"... -
Галдят сыны овец, хотя могли бы
Поднять на шапку праздные глаза.
О боги! Предложи мне кто-то выбор:
Толпе арапов подставлять туза
Иль видеть этих грязных мракобесов -
Я встал бы раком, видят небеса!
Любой осел средь крестухов - профессор,
Но скудна эта скверна на ослов -
Здесь каждый безбородый байтослесарь
Считает, что senior'ом быть готов.
Старший брат: >>683573 (OP)
Предыдущий: >>681348 (OP)
TL;DR
Q: Я хочу тотчас вкатиться, а разбираться буду в процессе. Что я должен делать?
Q: Не уверен, что хочу изучать C++. Как мне пощупать его без лишней ебли?
A: Читаешь эту книжку, смотришь упражнения из нее и суешь в онлайн-компилятор. Сообщения компилятора об ошибках копипастишь в гугл, ответы на возникающие у тебя вопросы ищешь в предыдущих тредах, спрашиваешь в этом треде, если не нашел. Если тебя послали на хуй или не ответили, то ты спросил платину, читай предыдущие треды внимательнее.
Памятка ньюфагу
- Вопросы по синтаксису идут на хуй
- Лабы идут на хуй
- "Как мне сделать Х на чистых крестах без библиотек" идут на хуй
- Все идут на хуй
- Хейтер сосет члены на пару со своей мамашей
Небольшие фрагменты кода размещай в треде при помощи тега [code] и жабаскрипт-костыля. Для больших фрагментов используй внешние сервисы.
FAQ
Мотивация
Q: Почему стоит использовать именно C++?
A: Ни один язык не идеален, но по совокупности киллер-фич C++ оставляет все остальные языки позади. Вот основные три:
- Скорость
C++ действительно быстрый язык — вместе с C, его прародителем, они с большим отрывом уделывают по скорости все остальные языки высокого уровня. Код на C++, как правило, медленнее аналогичного кода на C приблизительно на 0-20% а в ряде случаев C++ оказывается даже быстрее, причем замедление появляется только при использовании высокоуровневых конструкций (в C++ ты никогда не платишь за то, чего не используешь). Таким образом, если тебе требуется высокопроизводительный код, C++ станет отличным выбором. - Мощь
C++, являясь одним из наиболее выразительных и мощных языков, позволяет использовать большинство существующих парадигм. Его философия построена на минимальном ограничении программиста в выборе методов и инструментовпростреливания ногирешения задачи. Как следствие, используя C++, ты можешь не думать о том, как обойти искуственные ограничения языка, а беспрепятственно выбрать наиболее подходящие к ситуации средства. - Популярность
C++ по-настоящему популярен. На нем написаны десятки тысяч приложений и миллиарды строк кода, о нем написаны сотни книг, он до мельчайших подробностей документирован и стандартизован. Используя C++, ты никогда не останешься без работы или поддержки комьюнити.
Литература
Q: Окей, я решил вкатиться. Какие же книги мне читать?
A: Специально для тебя аноны /pr собрали уникальную коллекцию отборной литературы по крестам. Только лучшие книги, последние издания, без хуев! Выбирай категорию и обмазывайся:
-
Для нюфань
Учебники для начинающих. Все примерно одинаковой годноты, читать имеет смысл только какой-нибудь один, который больше приглянется:
Автор(ы) Название Год Ссылка Стэнли Липпман, Жози Лажойе и Барбара Му Язык программирования C++ 2014 https://goo.gl/kVaela Стивен Прата Язык программирования C++ 2012 https://goo.gl/z7kA8u Бьерн Страуструп Программирование. Принципы и практика использования C++ 2011 https://goo.gl/nAFUXa
Другие обучающие материалы
Q: Я не умею читать.
A: Можешь посмотреть какой-нибудь онлайн-курс: раз, два, три
Q: Не люблю, когда льют воду. Хочу коротких материалов по существу.
A: Вот тебе блоги, факи, референсы и всякое такое:
- Годный блог, в котором все просто и понятно тян не нужны кококок борщ
- Блог с хорошо расписанными фичами новых стандартов
- Краткие описания библиотечных функций и контейнеров - на русском или более подробно на ангельском
- Блог Герба Саттера (на ангельском)
- Блог Скотта Мейерса (на ангельском)
- Блог еще одной тянки, много о Qt и оптимизации (на ангельском)
- Куча других блогов (на ангельском)
- Большой FAQ по C++ (на ангельском)
- Видео с CppCon (на ангельском)
Софт и библиотеки
Q: Я готов начать погроммировать! Куда мне писать код?
A: На этапе написания хэллоуворлдов можно не ебаться с установкой софта, а использовать онлайн-компиляторы: раз, два, три, четыре. Для работы над более серьезными вещами удобнее всего установить какую-нибудь IDE. Ниже приведены несколько хороших вариантов:
Платформа | Название | Описание | Ссылка |
---|---|---|---|
Windows | Microsoft™ Visual Studio® | Общепризнанно самая продвинутая и удобная IDE, не имеющая равных по части автодополнения и возможностей отладчика. По ссылкам справа можно скачать бесплатную редакцию последнего выпуска (2015 Community Edition). Кроме того, существуют редакции с расширенными возможностями (Professional и Enterprise). Они стоят сотни денег, но если ты студент вуза, подписанного на Dreamspark Premium, то ты можешь получить их безвоздмездно (то есть даром). Многим новичкам интерфейс студии кажется чересчур сложным, так что обязательно прочти этот гайд, если у тебя возникают проблемы с компиляцией хэллоуворда | https://goo.gl/qgAAc6 (русская версия) или https://goo.gl/WIPW9L (ангельская версия) |
Все | CodeLite | Простая, легковесная, кроссплатформенная, швабодная IDE. Менее навороченная, чем студия, но среди бесплатных вне конкуренции. Вероятно, это наилучший вариант для новичка с *nix. Под Windows же требует чуть больше ебли с установкой компилятора MinGW/LLVM | http://codelite.org/, "sudo aptitude install codelite codelite-plugins" для установки под *nix |
Все | CLion | IDE, призванная похоронить Visual Studio пока не особо получается. Она стоит денег, но можно украсть почти не протухшую версию на торрентах или получить бесплатную лицензию на год по скану студбилета, если ты студент. Удобные свистелки и перделки присутствуют. Тормоза и баги присутствуют. Кросплатформенность присутствует | https://www.jetbrains.com/clion |
Q: Я прочитал все вышеперечисленное, теперь я гуру! Что дальше?
A: Дальше переходишь по ссылке, пробуешь отвечать на вопросы и понимаешь, что ты пока в самом начале пути. Кроличья нора крестов практически бездонна, поэтому продолжать постигать тонкости и детали можно очень и очень долго. В то же время, на этом этапе у тебя должно быть достаточно знаний, чтобы уверенно писать неплохой код. Поэтому читай исходники открытого софта и библиотек, отправляй пулл-реквесты в них, читай книжки по предметным областям и общим методикам разработки, а дальше уже сможешь запилить свой проект или вкатиться в существующий.
Хорошие стишки.
Шапка не нужна.
У листа нет рандом итератора, в нем нет смысла искать бинарным поиском. Точнее лист (с небольшими изменениями в структуре) для бинарного поиска называется красно-черное дерево.
третий дабл подряд.
Можешь взять std::lower_bound. Хотя это особо не имеет смысла. Лучше придумай другую задачу.
ты там совсем ебанулся со своими даблами?
И как же, хм, сортировать лист? И главное - нахуя?
У него же время доступа по индексу линейное...
для qsort доступ можно не по индексу делать. только до входа в следующую рекурсию надо указатель на центральный элемент и боковое запоминать.
Не лучше для графов.
introsort'у не нужен индекс же. На quicksort-этапе он берет в качестве образца первый элемент списка и в любом случае проходит последовательно по всем элементам, сравнивая с ним. На heapsort-этапе вообще все хуярится в кучу в дополнительной памяти, поэтому несущественно, опять же.
Обычно merge sort
Я тоже.
А без хуя в жопе никак?
Какой нахуй ментор. Это всё бред.
У нас тут полный тред менторов. Задавай вопросы и тебе ответят.
>А если у меня скайпа нет
Ты хотел сказать что нет микрофона?
>и я только начинаю?
Какая разница?
У меня лично был диск "погромирование по русски - 5в1", и никакого питона там не было.
Нет, микрофон есть, даже два лол. А вот учётки в скайпе нет и не очень-то хочется. Альтернативу на крестах напишем?
Ну был вопрос, кто и почему вкатился в кресты.
Когда я заинтересовался погромированием - никаких интернетов у меня не было.
Да и у кого они были - были по карточкам и повременка.
Когда я им заинтересовался у меня был сраный Вектор-06Ц со встроенным бейсиком, магнитофон Маяк и старый телевизор. Так что у тебя еще дохуя выбора было, лол.
Я начинал программировать с варкрафта 3, там был скриптовый язык jass.
По мере развития картостроительства, энтузиасты сделали настройку над джассом называемый cJass с си подобным синтаксисом.
У меня в планах 2 книги (Эккель, он охуенен), потом можно и попрактиковаться.
На втором курсе технаря познакомился с Pure C. Очень вкатило. Потом много лет нихуя-не-делания. Сейчас вкатываюсь в кресты.
>Вы давно программируете, но решили перекатится
Что это меняет? Прокрастинацию никто не отменял. Моя идея со скайпом как раз в том, что не важно какой у нас с вами уровень, мы можем заниматься совершенно разными вещами на плюсах, просто будем говорить друг другу что сделали за неделю и все. Так можно попробовать одержать победу над прокрастинацией. Лично мне, сказать: "Я нихуя не сделал, ничего не прочел, смотрел всю неделю аниму" будет не приятно.
Олимпиадки решать. Теперь еду на респу и лучше всех знаю кресты.
Ну а если я скажу: Вот делаю свой небольшой 3д шутер. Хочу там сделать двери и двигающиеся стенки. Ебусь с квейковским бсп.
Что это изменит?
Аноны тебе с кодом помогут.
>Как ты себе это представляешь?
Решить, что пилить, заебашить проект на битбукете и в шкайпике обсуждение, охуительные идеи и реализация.
Вот этот сайт не смотрел? http://fabiensanglard.net интересный разбор кода некоторых шутеров, может пригодиться.
То, что мне надо там нету.
Проще тупо исходники квейка самому смотреть.
Я тебе сам могу посоветовать:
https://www.youtube.com/user/philipbuuck/videos
В какую сторону копать?
Раньше ведь под досом и без него обходились.
На хабре статьи есть про software rendering.
Если надумаете, вы знаете что делать.
мимо 688953 кун
А у меня майн даже с Optifin-ом не тянет.
class A
{
//поля
A (A x,...) {};
void xyu(...)
{
...
A x = new A(...)/конструктор должен запуститься от указателя на данный экземпляра класс - как ето написать блеать?/
}
};
Точнее ник в скайпе такой: "max.j.t.", да после t точка.
Если вас интересует борьба с прокрастинацией то вам сюда
https://2ch.hk/se/res/8791.html (М)
Нормально код залей. Нихуя не понятно. Ты хочешь просто указатель передать. Так передавай какие проблемы?
Эккель это джавист ебаный, пытающийся накормить читателя жабой под видом "философии C++". Духу крестов его книги нихуя не соответствуют, да и сам он, прям скажем, не специализируется конкретно на крестах. Можно рекомендовать это читать только джаваблядкам, желающим ознакомиться с крестами для общего развития.
Да ну, такие вещи с аноном никогда не взлетают. Осенью вон пилили борду-убийцу и дальше гуглодока с 3.5 анонами дело не зашло. А разгадка одна - все только пиздеть горазды и командовать, реальная долговременная работа в команде невозможна без начальства.
Ну смотри, всегда все идет по одинаковому сценарию. Находятся энтузиасты вроде тебя я и сам такой, начинают что-то пилить. В начале активнейший обсуждач, все интересно и охуенно. Потом начинаются проблемы - Вася проебался, а исправлять другим; мнения анонов по какому-то вопросу принципиально различаются, а высшей инстанции нет; половина людей переключились на что-то другое и испарились из проекта... Ну ты понел. В таких условиях всего джва варианта: либо есть какой-то мощный стимул бабло в конце, анальные кары от начальства, который принудит большинство участников серьезно въебывать, либо кто-то один фактически вытягивает на себе весь проект, и коллективным его уже сложно назвать. Такие дела.
Блять, но на западе же эта хуйня работает?
Давеча в дишный ирц-канал отписался с вопросом и охуел - сука сразу куча ответов нормальных и по существу, а тут или на каком-нибудь лоре бы хуями и говном в 3 слоя обложили...
Ответить в irc или, скажем, ITT это минутное дело. Ты зашел в тред в подходящем настроении и помог ньюфагу, а иной раз хуями обложишь. А коллективная работа - совсем другой уровень, там энивей надо превозмогать. Превозмогать анон не любит, что у нас, что у них.
Но ведь есть и профиты. Фан, опыт, возможность указать, если что то выгорит, эту хуйню в резюме.
Ну и что? Существует огромное количество профитов, которые мы игнорируем, потому что они вне зоны комфорта. Сычевик даже тян не может найти, хотя желание тян у большинства гораздо сильнее, чем желание получить фан от разработки.
Массив классом? Так есть же std::array
А почому нельзя сразу определить элементы?
Это тот же самый рандом, только при наступившем событии ты дропаешь непонравившуюся тян.
В бэ даже программу для этого писал, а какой-то анон мне указывал на ошибки. Сошлись на версии где её создавали с помощью new и вызова конструктора.
Ну, можно и с другой стороны посмотреть. Перебираешь массив и в ифах требование выставляешь. Ты ничего не дропаешь, просто ищешь.
Но это невозможно. ИРЛ ты не знаешь тян, пока с ней какое-то время не поконтактируешь.
Невозможно знать инфу о тян - это приватные мемберы.
Так что только рандом -> выясняешь -> дропаешь если не так.
И такой вариант в бэ писал. Там целая оценочная функция была где пользователь мог сам параметры задать. Её писали т.к. при поиске по обязательным требованиям цикл мог быть очень долгим и не завершиться вовремя. Ещё какую-то рекурсивную функцию писал которая стек рвала если такой тян нет.
Представь if как фильтр, как вход в здание. Если тня не соответствует требованиям, она просто не попадает в твоё поле зрения.
Но ты блять не знаешь изначально, соответствует она требованиям или нет.
Это как конфета с говном - пока не надкусишь - не узнаешь.
Ещё были какие-то причины не создавать её на стеке. Не помню какие, но они есть!
Да нет же. Спасает оценочная функций когда все тян получают оценки и выбираешь лучшую. Но тако подход не сработает если тян очень много.
На кой тогда с ифами ебаться? Может сразу функцию запилить?
Может уязвимость перезаписи стека?
Омежка все равно качнет.
Тебе нужен указатель на создаваемый класс внутри конструктора? Там есть и так неявный this
Читай...
[1, 3, 9, 7, 3, 8].sort!((x, y) => x < y)
Какие проекты, вероятнее всего, среднестатистический некриворукий анон будет делать, если выучит C++ на уровне приличного новичка? Какие проекты чаще всего попадаются? Какие проекты интересные? Какие проекты в 2016 году делаются на Qt? На голом C++? Под какие платформы? Бывалые, опишите, интересно же. На моей прошлой работе был крохотный проект на плюсах с нормальным ООП, но он был скорее огромным таким биндингом для использования другого проекта.
Я писал на Qt.
ПОСАДИЛИ МИШКУ НА КОЛ
ОТОРВАЛИ МИШКЕ ЛАПУ
ЧАС ПРОБИЛ И ЖРЕБИЙ БРОШЕН
И НИКТО МНЕ НЕ ПОМОЖЕТ
Юзай коммон версию.
Алсо, не понимаю дрочь на кроссплатформу. Всегда было на все кроме шинды поебать.
хочу с эклипса перекат на годную ide сделать.
зачем переписывать под qmake если проще geany с парой скриптов какихньть?
>зачем переписывать под qmake
qmake - прошлый век. Юзай qbs, он не генерит промежуточный файл, а дергает инструменты напрямую. Реально быстрее собирает.
Код блок можешь тогда попробовать. Сам не юзал, но грят норм вдобавок легковесный
Интересненько, отстал я от qt но не решает проблемы лишнекодописания
>>689460
>Код блок
пик? не юзал но пробну.
>>689461
в этом и беда анон
на оверлокался сжег писюк
продал озу с него, купил олд битую железку
появился таск на спасение моей жизни рендер написать с парой 3д анимаций на апараты 2003-5ых годов рождения
браузер имой любимый эклипс сьедают 210процентов озу
это не удобно капец
>>689462
ну надо знать грань между жиром и легкостью
на крестах даже в qt относительно легкие проги выходят. только мелкие смогли придать крестам веса
A(A* x=this, ....) {}
http://pastebin.com/m1r6nTVZ
Прошу сразу не крыть хуями по поводу ИДЕ, работаю на чем велено.
Нужны любые комментарии, я только учусь, а обсудить сделанное не с кем.
Код плохо читаем:
- Не понятна мотивация кода. Напиши, нахуя вообще нужен класс
- Красиво оформи интерфейс класса, чтобы не приходилось его искать.
- Используй smart pointers
Он нужен для работы с файлами экселя. Выполняет подключение к файлу, и выборку+обработку некоторого диапазона.
Оформлю.
С умными указателями пока не имел дело, но при работе с классом не хило кушается память, примерно по 3Мб на 1 обработанный файл. Подскажите хотя бы что гуглить, чтобы отвобождать память корректно? Вроде деструктор сделал, вроде даже и вектора чищу clear'ом. Но все равно память жрется стабильно.
>Он нужен для работы с файлами экселя. Выполняет подключение к файлу, и выборку+обработку некоторого диапазона.
Не здесь пиши, а в коде. Те комменты, что есть бессмысленны - когда знаешь, что код делает в общем, то в деталях легко разобраться.
Память в общем случае можно мониторить и профайлить ее использование например этим: https://github.com/gperftools/gperftools
Навскидку не скажу, что там у тебя течет. Да и не интересно мне в говне копаться. Да, кстати,
>вроде даже и вектора чищу clear'ом
память не освобождает, читай внимательно доки к вектору.
При вызове метода, к примеру, XlsHelper::MakeSqrtSum у тебя создается новый экземпляр XlsApp, а указатель на старый (если был) проебывается. Тоесть последовательные вызовы XlsHelper::MakeSqrtSum будут давать утечку. если после каждого вызова XlsHelper::MakeSqrtSum (или подобной функции) ты будешь удалять экземпляр XlsHelper от которого был вызван XlsHelper::MakeSqrtSum то память будет очищаться, деструктор ты действительно создал. Если ты не хочешь использовать умные указатели, то перед каждым вызом new ты должен проверять не находится ли по тому указателю уже готовый (старый) объект и если он есть (указатель не nullptr) то удалять его.
Алсо, возможно я ошибаюсь (код не сильно внимательно просмотрел), но как мне кажется корень твоих проблем в идеологических ошибках. Какой объект из твоей предметной области представляют инстансы твой класса? Никакого. Твой код построен в стиле обычного структурного программирования, на которое ты какого-то хуя навернул ООП - но оно нихуя тебе не дает, твои переменные класса, так как в них нет никакого смысла, фактически работают как глобальные переменные вследствие чего ты и обсираешся. Тебе можно превратить твой класс в неймспейс, удалить глобальные переменные (подразумеваются все переменные-члены твоего класса), соответсвено подправить код - и все утечки волшебным образом исчезнут.
Попробуй лучше написать что-то свое. Реализацию вектора или хэшмэп. Чтобы там rule of 5 и остальные плюшки были. Это тебе даст гораздо больше и за меньшее время.
Вот ещё один момент, не дает мне покоя. В прошлый раз, да и во все другие разы, замечал что программки, вроде бы небольшие не хило едят память, но ничего, созданного через new в них нет. ведь я уже создавал проектик на подобие, где не было "ооп", а были только события на кнопках, а массивы из экселья грузились в стандартные компоненты среды, и после каждого просчета естественно все обнулялось. кроме памяти, лол Чому так? Видимо не только через new может выделяться динамическая память? Или я создавал всё в стеке и он может расти до бесконечности?
Вместо создания второго списка создаешь его на стеке - рекурсивно посылаешь элементы в функцию, пока они не закончатся, плюс передаешь голову списка. На нижнем уровне у функции будут одновременно последний и первый элементы, который ты объединяешь в новый список и возвращаешь наверх.
Если ты не вызываешь new, это не означает, что он не вызывается где-то в библиотеках.
Ты запускаешь программу. ОС создает процесс в оперативной памяти. Там хранится вся инфа про процесс, стек, инструкции программы и т.д.
Но в библиотеках же все должно быть четко, разве нет? Или их писали такие как я?
Ну, эмбаркадера всегда славилась анальностью своих продуктов. Вообще, это самый главный минус их "плюсов" – дэльфевый рантайм живёт по своим правилам.
>же все должно быть четко
В смысле без выделения памяти? Как ты себе это представляешь? У Qt, например, почти все классы сделаны как pimpl, то есть при создании класса он всегда в куче выделяет память, а в самом экземпляре хранится только указатель.
Я имел ввиду, что если библиотечный компонент, то он должен правильно все делать, раз попал в библиотеку. но скорее всего тут все же моя вина. что-то где то не доглядел. и не дописал как надо. как с vector.clear(), который память не освобождает на самом деле. вот же ебатория
Если у тебя 10 (и мб 12) студия - вымазывайся. На следующих релизах студии убивает нахуй всю систему лагами, хз что там такое.
Алсо, visual assistor в 10 раз лучше.
Только если что-то портируешь под винмобайл.
лучше сразу c# обмазывайся. Больше толку будет
> Для нюфань
> Стэнли Липпман, Жози Лажойе и Барбара Му Язык программирования C++ 2014 https://goo.gl/kVaela
бля, я хуею, что за дебилы пишут эти учебники:
> Если первый параметр конструктора -- ссылка на тип класса
> передаче объекта как аргумента параметру не ссылочного типа
помню как в детстве читал подобную муть и мозг просто отказывал.
Бля ну что за авторы-черви без мозгов.
Почитай эту тему у страуструпа. Только не увлекайся.
А вы это ещё и нюфаням советуете. Ломаете жизни.
А что им посоветовать надо-то? С++ за 21 день?
Двачую. На переводчиках часто экономят, и получаются отвратительные высеры типа "Искусство автономного тестирования", лол.
Нуфаги обычно не могут в инглиш. А те то не для нуфагов есть в шапке на инглише.
Вот мотивация прямо из книги: есть gui-приложение, которое работает на разных платформах. И клиентский код, который должен работать с gui частью, нужно изолировать от непосредственных платформо-специфических деталей.
И значитсо они берут и хуяк: делают pimpl, перенаправляя все все вызовы в WindowImpl. И у меня вопрос: что в этом хорошего, если WindowImpl превратился в god-object, который содержит реализацию всех наследников интерфейса Window? Я не понимаю, блядь!
Ведь здесь должно быть несколько параллельных иерархий(что-то вроде пикрил4), где каждый конкретный класс наследуется от соответствующего интерфейса.
Да, я понимаю, что возникнет проблема с виртуальными функциями, но можно наследование реализаций замутить через шаблоны, будет не очень удобно, но работать будет.
Скажите мне, прав ли я, или в глаза ебусь и не понимаю смысла паттерна?
Пикрил4
Ну вообще паттерны это не серебряные пули же, у них есть и отрицательные стороны. Мост хорошо применять в случаях, когда, грубо говоря, есть возможность выразить всю функциональность класса через небольшое количество базисных функций. Ну там, скажем, функции отрисовки любых объектов через функцию отрисовки точки, которая обращается к графической библиотеке. Тогда ты выносишь реализацию этого базиса в параллельную иерархию и все заебись, вместо произведения количества библиотек на количество клиентских классов ты получаешь сумму, в этом весь профит. Емнип у банды про это разжевано. Ну вот, а в общем случае не факт, что тебе нужен мост. Бывает, что библиотеки имеют разные интерфейсы, а реализовывать все через их пересечение неоптимально по производительности. Тогда про мост нужно забыть и сделать как-то иначе.
В джава написал одну прогу ищущую "вилки" у футбольных букмекерах. тут объяснение, что такое вилка http://probukmeker.ru/25-vilka.html Но прога жрала 5 Гб оперативной памяти, так что о её качестве можно промолчать. Очень давно написал пару лаб по С++.
Да, нет, никаких сверхспособностей замечено не было. Вкатился просто: пришел на предприятие, сказал "хочу работать", если ты про это.
Да, тоже про это подумал, уже ищу. Лучше всего изучать язык изучая готовый код, как мне говорил знакомый-кодер.
Конечно.
Исходники всегда бесплатны и их можно официально скачать с сайта издательства.
С шаблонами поиграйся.
Если останется время, читни чутка Рефакторинг Фаулера. Мне знакомый программист-сеньор как-то сказал, что он считает, что каждый программист должен прочитать эту книгу.
Я так инглиш изучал. Читая всё нормально. Фильмы книги всё могу. Пишу и долго думаю как правильно. Я говорить предложениями больше 5 слов вообще не могу.
Да ты стихотворец.
Нет. Нужно дерево отрезков и пирамидальную сортировку написать. Всё на куче.
std::priority_queue
>>689918
Дерево отрезков это не совсем куча, из стандартного вроде ничего не подходит.
Нет. Это не то. Говорю же нужно вниз и в верх но куче ходить.
>>689923
Спасибо. Слышал что она на куче сделана. Совсем забыл про эту штуку. Только я не умею её пользоваться и не знаю как вверх и вниз по нему ходить.
Пиздец
> вверх и вниз по нему ходить
Лигитимного способа нет. Инкапсуляция же. Если тебе нужно ходить то это массив и функции которые ты упоминал раньше. Только если тебе задали написать пирамидальную сортировку то скорее всего мечтают что ты те функции сам напишешь. А для дререва отрезков куча не подходит, идея там похожая но отличия большие. В куче находятся только элементы которые ты туда поместил, а в дереве отрезков помещенные элементы находятся только на самом нижме уровне - все что над ними специально высчитаные служебные элементы. Обычные алгоритмы работы с кучей там не помогут.
inb4:пхп, питон
шарп
джава
Ясно. Спасибо. Свою напишу.
>Где читнуть вкратце про atomic с примерами использования? Эта хуйня не документирована примерами на cppreference.
Concurrency in action
Си
неистово арчюю этого
брацы АНОНЫ кто-ньть годнолинкк дайте на выстраивание освещения в рендере с картой нормалей http://habr.ru/p/279143/ типа такого но я тут не понял сути
у меня есть нормаль полигона и нормаль в касательном пространстве.. как переаести её в нормальное пространство без матрицы то?
статья типичная. и моего знания вышки и тензоров всяких последнее просто на ну ле не даает что-то понять что на пике за штукт
туплю чет с записью нод в массивы, дружище, скинь как ты реализовал это дело.
Я изрядно там наговнокодил, но в принципе работает. Могу скинуть если хочешь. Правда там уровня лабы, я тогда только начинал с c++11 знакомиться, накуралесил со многими вещами
Лучше свой код покажи, вдруг кто-то из антонов поможет найти ошибочку.
Алсо, на днях видел жирный такой репозиторий с алгоритмами поиска путей, на штуку звездочек где-то, сейчас попробую найти еще раз.
да у меня не то, что ошибочка, просто не допирает как это сделать, яж тоже еще тот ньюфаг. сделал вот вектор из объектов класса нод, в котором содержатся координаты и f, а дальше как-то в башке не прет, скинь свой плес.
https://github.com/innermous/AStarPathfinding/blob/master/src/astar.cpp#L130
Работает примерно как на пикче. Вряд ли ты тут что-то поймешь, очень сильно намешано.
объясни плес вот это
Ptr current = *std::min_element(ma_openedList.begin(), ma_openedList.end(),
[&](const Ptr t1, const Ptr t2)
{
return t1->node.f < t2->node.f;
});
current - экземпляр класса Ptr. std::min_element возвращает итератор на минимальный элемент в ma_openedList. Функия принимает функтор (лямбда выражение), который сравнивает 2 элемента в списке.
Советую почитать литературу в шапке.
Горжусь доской.
>как переаести её в нормальное пространство без матрицы то?
Без матрицы - никак. Поэтому и считают два вектора - tangent и bitangent. Вместе с нормалью они как раз и составляют матрицу 3х3.
у тебя лист с доступными узлами это обычный массив? разве можно так? я вот вектор делаю, чтоб туда пушбекать узлы, чтоб не было ограничений никаких на расстояния. с вектором min_element не хочет работать. и последний вопрос, что такое [&]?
а ты жестокий
Нихуя вы тут щапку наворотили, молодца, уважаю.
Множественное наследование это плохо, когда его используют для быстрого грязного объединения различных реализаций, в каком-нибудь адаптере, скажем. А наследование от нескольких ортогональных стратегий с целью base class optimization это вполне себе годная и уважаемая практика. Почитай того же Александреску, там на каждом шагу оно.
При виртуальном наследовании - к таблице "самого производного" класса. Собственно говоря, из-за этого виртуальное наследование и критикуют, тому що результаты не совсем очевидно меняются при добавлении еще одного наследника.
Если пекарня старая, может ставиться до талого. У меня на и5 4Гб где то час - полтора ставился.
Нахуй нужна для обучения студия? Кодблокс ставиться за 5 минут. Правда там компилятор отдельно надо ставить, но это тоже быстро.
Дан файл, содержащий текст. Переписать в другой файл только слова, начинающиеся с согласной, а заканчивающиеся
гласной.
Буду пиздец как благодарен, пытался найти помощь на cyberforum - нихуя.
наше такое, но в середине кода ошибку выдает компилятор. http://www.cyberforum.ru/cpp-beginners/thread602355.html
#include <stdio.h>
#include <string.h>
На будущее, вбиваешь в гугл название функции, идешь на cpp reference (http://www.cplusplus.com/reference/cstring/strlen/) Я взял хедеры оттуда.
Спасибо Большое!
Тогда уж лучше QtCreator с mingw. И ИДЕ удобнее, и компилятор в комплекте.
Ставьте с iso, а не веб-установщиком
>Множественное наследование это плохо, когда его используют для быстрого грязного объединения различных реализаций, в каком-нибудь адаптере, скажем
Щито? И чем же плохо использовать адаптеры?
Знаю, что одно из последних достижений - это сбор статистики вызова методов и их автоматический инлайнинг в рантайме.
Нужно провести исследование и составить заявку в комитет, чтобы в плюсы добавили реальные фичи, а не уродских клонов буст::асио и буст::файлсистэм.
Иначе в скором будущем, после смерти нашей крестопараши, придётся перекатиться в Жабу на значительно меньшую зарплату, т.к. конкуренция там велика.
Жаба с крестами пересекаются только на десктопе. В девятке добавят модульность, значит можно будет делать компактные приложения для десктопа (сейчас жре занимает около 150 метров). В десятке сделают структуры, жаба будет жрать меньше памяти при умелом использовании. Но сильной конкуренции все равно не будет - через год массово появляется webasm, который изначально заточен под плюсы.
Стоит прочитать шапку.
> асскажите что она умеет делать по-настоящему крутого, что в перспективе сможет полностью убить плюсы
Кроссплатформенность и сборку мусора.
Кроссплатформенность и у плюсов есть, причем скомпилировать плюсовый код под другую платформу часто проще, чем ебаться с нативными либами у жабы. Менеджмент памяти у джавы достаточно спорная вещь, чтобы считать его откровенным плюсом. Для десктопа джава откровенно сосет, и будет продолжать это делать в будущем.
Я думаю, тут большинство ее прочло так или иначе. Я понимаю там не осилить стандарт или страуса из-за большого объема, но она-то тоненькая и написана понятно.
Ну смотри, это фактически тот же вопрос превосходства композиции над наследованием реализации. Бывают адаптеры, которые наследуют adaptee приватно и target публично, с целью писать поменьше кода. Это не очень хороший вариант во многих случаях, из-за негибкости механизма наследования и вообще хотя иногда так сделать действительно лучше, например, когда тебе зачем-то понадобился двусторонний адаптер, лол. А адаптер, который агрегирует объект адаптируемого класса отлично применим гораздо более часто.
Бля, это че, она правда входит в теормин джуна или ты меня тролишь сейчас?
Оно зависло, это обычное дело. Убиваешь процесс и ребутишь, оно должно продолжиться с того же места после перезагрузки.
В таком случае у нас получается джун, который умеет проектировать. И чем тогда от него отличается не джун?
>а как же энтерпрайз?
А у них обычно выхода нет, кроме как джаву использовать - если весь стек на джаве, зачем кресты использовать.
Говорю абсолютно серьезно. Другое дело, что "теормин джуна" это не то же самое, что "ньюфажные книги для сдачи семестрового курса", даже джуну в крестах нужно сильно больше знаний, чем в универе дают. Не обязательно городить мозговыебанные конструкции из Александреску в продакшене, но знать их должен любой уважающий себя крестовик.
>Если серьезно: есть ли здесь кто-нибудь, кто прочитал её?
Я пролистал, ничего нового не открыл. В 98 году она может и была интересна, сейчас - не очень.
Все хуйня. В процессе работы ты набираешься всяких деталей о построении архитектуры и промышленном программировании(читай: тестирование+распределение задач в команде+VCS). Прочитай GoF, какую-нибудь книжку о TDD и git/vcs + проработай месяц, чтобы освоиться с внутренней кухней и ты уже того же уровня, что и человек, который проработал год и осваивал все на своем опыте.
Сейчас я почувствовал себя петухом с разрушенным манямирком. Давай дальше: что должен знать любой уважающий себя крестовик?
Тащемта кода ни разу не меньше, а столько же. Но похуй, я подумал, ты на адаптеры in general наезжаешь.
Все средства и идиомы языка. Не так много, вообще-то. Часто даже достаточно знать о наличии их, но не использовать ни разу. Я, например, за 3 года ни разу не юзал виртуальное наследование или аллокаторы. Но я о них знаю и этого хватает.
Средства языка:
http://en.cppreference.com/w/
Идиомы:
https://en.wikibooks.org/wiki/More_C++_Idioms
>ни разу не меньше
Я имел в виду, что многие делают это из-за небольшой экономии на method () вместо base_.method () при вызовах адаптируемых методах. Еще иногда из-за того, что нагородили хуйни с защищенными членами и прямым доступом к ним тоже уменьшают количество кода.
>>690576
Дэсктоп уже почти умер, что там есть кроме игор, в которых по сей день текстурки размытые?
Скайп в любом телевизоре и мобилке есть. Фильмы смотрятся онлайн через браузер в том же телевизоре.
Электронные книги с монитора на десктопе читать тяжело. С планшета удобней. В имеющихся на сегодняшний день планшетно-мобильных платформах рулят жаба/обжси/дотшарп.
Думаю, те же 3Д экшоны можно делать на Жабе, существовал бы движок и тулзы. 99% памяти занимают текстуры, для которых можно сделать ручную выгрузку, с остальным сборщик мусора справится.
Вот поясните мне хардкору, в какой сфере плюсы реально уделают Жабу, как по эффективности, так и по трудозатратам.
Как бэ остутсвие сети и файловой системы в стандартной библиотеке 2016 года намекает на то, что кресты безнадёжно отстали. Тут ни лямбды, ни вариадики, ни мультитрединг без средств верификации не спасут.
Только вчера думал об этой хуйне.
Теперь думаю о том, что я тупо зря время проебал. Крестопараша мне очень нравится, но в >2016 крайне узкий сегмент ее использования, да и перескочить хуй куда получится годы крестоёбства и написания костыликов ничем не помогут в перекоте на другой язык, не надо тут
> плюсы реально уделают
Конечно нигде они не уделают. Если есть жаба то понятно что в плюсах смысла нет. Это заметно даже по тому что в плюсы добавляют интерфейсы для вызова джаба кода, а не наоборот.
Сначала выбирай область, которой хочешь заниматься, а потом уже технологии.
А где ты увидел советы ньюфагам вкатиться в кресты? Лобого ньюфага будут отговаривать от вката, если он попросит совета.
>те же 3Д экшоны можно делать на Жабе, существовал бы движок и тулзы.
Вот именно, существовал бы. А на чем его напишут? Ну подумай головой, я тебе дам время.
>Более того, крайне нежелательно пытаться изучить его первым, если ты раньше вообще не программировал. С большой вероятностью это приведет к разочарованию и потере времени. Гораздо лучше будет начать с другого языка и базовых вещей алгоритмы, архитектура пека, операционные системы, а уже потом вернуться к крестам
>в какой сфере плюсы реально уделают Жабу, как по эффективности, так и по трудозатратам
Гейдев, эмбеддед вместе с Си, хайлоад.
>намекает на то, что кресты безнадёжно отстали
Намекает на то, что надо использовать boost, которая де-факто стандарт. Ну серьезно, мог бы найти что-нибудь посерьезнее, чтобы доебаться.
>Если есть жаба то понятно что в плюсах смысла нет
Ну вот пишут JetBrains свои IDE на жабе. Пишут отлично, стараются, оптимизируют. Но вот открываешь в CLion какой-нибудь llvm, и все, пизда, зависло нахуй. Сидишь такой на машине с ssd, а оно зависло. Ну йобана, говоришь ты и смотришь в сторону QtCreator, который хоть и кастрированный и крэшится, но не виснет на анализе.
Такие дела.
Ну сначала сделают враппер для ДиректаИкса, хуле и там и там интерфейсы. Тогда станет возможно заменить плосовой код конкретной игоры на Жабу.
Потом для каждого ЗДмакса, редактора карт и прочих тулзов сделают прокси плугин, который сможет использовать Жаба плугины.
Закон капитализма гласит, что фирма, которая не расширяется - погибает. Поэтому тот же Орокол в погоне за баблом и необходимости расширения вложит кучу бабла в появляющуюся нишу и сделает всё возможное чтобы выбить плюсы с рынка 3Д экшонов.
>Если есть консоли то понятно что в пекарнях смысла нет. Это заметно даже по тому что в пекарни добавляют эмуляторы консолей, а не наоборот.
>Поэтому тот же Орокол в погоне за баблом и необходимости расширения вложит кучу бабла в появляющуюся нишу и сделает всё возможное чтобы выбить плюсы с рынка 3Д экшонов.
С учетом того, что Google и Apple взялись за написание нормального компилятора C++, да еще и у Microsoft подгорело и они начали гнаться за clang, а также того, что комитет по стандартизации планирует релизить TS чуть ли не каждый год, то еще посмотри кто кого.
Гнида ебаная, если бы я сразу понял, что ты троллишь, я бы не отвечал тебе.
Это я не заметил, возможно, имеет смысл переместить этот абзац в начало шапки.
>А перекатываться с плюсов некуда.
На web, например. Но не всем нравится макакинг, если говорить о frontend. А если говорить о backend, то подозреваю с появлением REST-фреймверков на C++, остальные языки будут тихо насасывать по производительности.
>>690696
В гейдеве уже и так 90% кода это скрипты и триггеры в картах. От плюсов почти ничего не осталось.
Эмбеддет уже почти десять лет нормально переваривает жабу. Успел поработать, знаю что менеджеры частенько норовили слямзить Одроид и впихнуть на весьма специфичные устройства.
Си - это прыщи и только прыщи, вместе с торвалсом. Писать драйвера уже давно не нужно, т.к. сетевухи/звуковухи это риалтек и только риалтек. Любое юсб устройство может работать через либу, нетрудно сделать враппер на Жабе.
Хайлоад - скорее хуйлоад, посмотрел запись конфы https://www.youtube.com/watch?v=eTk9Zu6rLTY. Атомики с мемори барьерами дали, средств проверки не дали. Чтобы найти ошибку в очереди, которая из трёх операций CAS состоит, опытный дадька неделю потратил.
Некий студент, пишущий диссертацию якобы написал реализацию конкурентного RB дерева - это блеать 15 страниц псевдокода, и денег он с этого наверняка не поимеет. Кто за этот хуйлоад платить будет, легче Жабу и сотку гигов оперативки использовать.
За незнание буста и нелюбовь к нему надо расстреливать без суда из следствия. Кто будет платить за асинковую лапшу с вонючими портянками которые де-факто boos::asio::sockets::ip::tcp::address::v4? make_context скажешь? не пробовал, но чуется что дебаггер твою сопрограмму даже не увидит.
Нахуй такой стандарт если для обхода папок нужно ездить на велосипедах типа бууст::фаелсистем::рекурсив_директори_итератор_т, особо забавляет это ваше _t в конце, ещё хвостик ему в конце пририсуйте. Это воистину засвидетельствует ваши знания в бусте. Чесслово, рассчитано на идиотов которые не знают что перед именем переменной имя типа идёт.
И вообще, сколько вы будете зарабатывать, если зазубрите весь буст целиком? Все его нюансы и тонкости. Сколько лет у вас на это уйдёт? В Жабе нет такого геморроя.
>С учетом того, что Google и Apple
Распил бабла в крупных конторах. Это как в государстве только в частном.
Да в любой. Джава - очень хуевый язык, который предлагает по сравнению с крестами одно: nullpointerexception вместо сегфолта. И все. REPL не завезли, система типов хуевая, библиотеки так себе. Если бы там про питон спросил, или про жс, то там есть четкие ниши, в которых они лучше крестов - быстрое прототипирование и т. п., а в жабе нет нихуя, кроме фобий менеджеров по поводу того, что индусы не сумеют написать на крестах код. И это правда. Но вот от таких проектов и надо держаться подальше. Нравится тебе лепить круд для банка в галере - ну удачи, хули.
Нет. Это фак. Если у тебя вопросы ты читаешь его. Если там нет ответа ты пишешь в тред.
Рефакторинг днищенский, поиск по коду (find usages, например, не позволяет удалять результаты), call hierarchy нет как такового, интеграция с git хуевая(окошко с log тупо показывает текстовый вывод консольного git'а). Это только то, что сразу в голову пришло.
Во время дебага бывает крэшится. Особенно если дебагер - lldb.
>хайлоад
Часто ищу на hh.ru такую работу. Любо там надо 6 лет опыта, либо там не нужен С++, а только желателен т.к. совсем другая сфера. Нормальных вроде только пару штук за несколько месяцев находил. Но так чтобы ещё и зарплата была указанна ни разу. Так где же будет работать только вкатившейся джун?
Да нигде, блядь. Зарплаты зависят от бородатости, никому вчерашний студент не нужен нахуй.
>Писать драйвера уже давно не нужно, т.к. сетевухи/звуковухи это риалтек и только риалтек.
Охуительные истории ITT. Месье не смущает тот факт, что в половина кода для linux 4.5 - это драйверы. А это, на минуточку 500к строк кода, блядь!
>В гейдеве уже и так 90% кода это скрипты и триггеры в картах. От плюсов почти ничего не осталось.
А кто же эти скрипты обрабатывает? Не C++ ли код?
>Эмбеддет уже почти десять лет нормально переваривает жабу.
И толку, что java-код запускается на embedded? Я уверен, что GTA 5 тоже можно запустить на Raspberri PI, если постараться. Но толку от этого?
>Кто за этот хуйлоад платить будет, легче Жабу и сотку гигов оперативки использоват
Слишком толсто. Даже комментировать не буду.
>boos::asio::sockets::ip::tcp::address::v4
Ну не позорься, осиль уже namespace aliases.
прочитаю я их, и что? все не запомню явно. я вот инторнеткурс усваиваю помалёху, пилю свой рогулайк, решаю проблемы по мере их поступления и так учусь. алгоритм вот что пишет.
algorithm(1734): error C2678: бинарный "==": не найден оператор, принимающий левый операнд типа "node" (или приемлемое преобразование отсутствует)
Ещё забыл: нормальная система сборки и менеджмент зависимостей.
Ты какой-то тупой дегенерат.
Твой уровень - Лафоре. Ты же блядь пытаешься с наскоку осилить йобу, не надо так. Пиздуй азы читать про указатели, перегрузку, функторы, полиморфизм, вот это вот всё.
Кодблокс неплох, но там даже цвета без геморроя не поменять. Даже Notepad++ с консолькой в этом смысле удобнее если ты любишь тёмную тему
Переопределить значит его надо. Гугли переопределение операторов с++. Или в функции сравнение по другому сравнивай их.
>минуточку 500к строк
Подумать только, пятьсот тысяч строк кода. Только вот четыреста тысяч из них - это для железок, которые сняты с производства ещё в прошлом тысячелетии. И что там с дровишками для видюх, игр для прыщей нет и не будет.
>Не C++ ли код?
Ты сможешь заработать себе на квартиру и на красную икру патчами для этого С++ кода или патчами для фаерфокса? Нет, ты будешь жрать сосиски с глутаматом.
>Слишком толсто
Окее, тот же мап на слим локах будет не сильно отставать от недоатомик мапа на касах если таковой вообще сделают труъ лок-фри cо вставкой/удалением/траверсингом... И то, блять, это миф про лок-фри, если мы не засыпаем, то долбимся в цикле, вызывая кас на каждой итерации и увеличивая выбросы СО2 на электростанциях.
>namespace aliases
оукеее, первый экран при открытии файла будут занимать не только хэдеры, но и неемспеес олиосы, у твоей жены длинный указательный палец, если нет, то твои детишки вырастут неконкуретноспособными, скроллить ведь придётся больше чем кодить.
Мне пока это не нужно, в 15 лет не особо интересуюсь алгоритмами. Хотя нужно было бы, учусь дизассемблировать. Читаю сейчас Криса, вот как-то так. Посоветуй какую книгу по алгоритмам, буду читать параллельно.
Dive into Python
{
int a = 0;
return 0;
}
Вот это ваше a - оно в стеке выделяется?
Да.
ЭКСПИРИЕНС!
>Дэсктоп уже почти умер, что там есть кроме игор, в которых по сей день текстурки размытые?
Например, тулзы чтобы делать игры. Любые другие программы для работы с картинками/видео/звуком. Жабка текстовые редакторы с трудом тянет, о графике и говорить нечего.
>Думаю, те же 3Д экшоны можно делать на Жабе
Можно, конечно, только будет оче тормозить. Майнкрафт, например, на кресты обратно переписывают. У них ебли с памятью в джаве получилось гораздо больше, чем при ручном управлении (такое, кстати, почти во всех нагруженных программах на джаве).
>Дэсктоп уже почти умер, что там есть кроме игор, в которых по сей день текстурки размытые?
Сразу видно нешкольника. CAD, софт для творчества (видеоредакторы, аудиоредакторы, maya), различные IDE и т. п. Хотя откуда тебе это знать, если для тебя мир - это игры и потребление контента. А движок на "жабе" есть, Unity называется, только он на C# (потому что жаба говно даже в своей жабонише), и у Unreal Engine он посасывает.
> Это заметно даже по тому что в плюсы добавляют интерфейсы для вызова джаба кода, а не наоборот.
JNI в Жабе был с самого начала.
Писать буду в VS2015, запускать и дебажить на виртуалке
Описанная тобой фича джавы -- profile-guided оптимизация. В gcc уже лет 5 назад доступна была.
Тридээкшоны ты вряд ли сделаешь на жабе. Потому что на каждый чих в жабе выделяется память, а в экшонах нужна вся скорость, которая есть, иначе у тебя начинается задержка обработки ввода (input lag) и лаги, когда вдруг сборщик мусора соизволил вмещаться. Я не говорю, что плюсы невозможно переплюнуть, но управление памятью в джаве это пиздец для разработки экшонов
Для начала подумай, что будешь делать, когда венда не пожелает прожевать неподписанный драйвер, и тебе придется делать developer mode.
>Unity называется, только он на C#
Он тоже написан на C++, лол. На C# там только интерфейс для сторонних разработчиков. Можно заплатить и получить исходники на C++ и ебашить как надо.
Затем, что будет нативная производительность и маленький размер кода. С сишечкой на вебасм это возможно, а для той же скалы надо будет десяток метров стандартной либы тащить.
Заметил во многих олимпиадных задачах такой пункт, как "строка может превышать 10^10 символов ", или что-то в этом роде. К чему это?
Например, чтобы ты писал o(log(n)) алгоритм, а не надеялся, что o(n^100) с нынешними гигагерцами совладает.
Как проинициализировать QSqlDatabase? Нужен статический экземпляр, но вот хер знает как заставить его таким стать. Всякие
QSqlDatabase db = NULL не катят, тип не тот.
>>691188
Запамятовал, сорян.
В доках еще указано что можно взять дефолтное подключение, типа
QSqlDatabase database = QSqlDatabase::database();
Но со static это дает: a function call cannot appear in a constant-expression.
Может еще где обосрался... хз ^
А если инициализировать то типа работать будет? Ты проверял? У тебя какие-то подозрительные ошибки, похожие на ошибки линковщика.
До этого у меня была эта же переменная без static.
Заводилась через init_db(QString addr) (addr - там из диалога открытия файла адрес передавался).
Сейчас я понял, что обосрался, т.к. мне к БД надо обращаться больше, чем в одном окне, а плодить подключения, я так понял, нецелесобразно и начал искать пути решения. Пока свелся к тому, чтобы бд внутри контроллера держать статическим, а контроллеры таки плодить. Не знаю, насколько это лучше, но, надеюсь сработает. Если я конечно разгребусь с этим всем.
Хотя вот прямо сейчас смотрю ветку на форуме где рассказывают какой ТС мудак о том, что глобальные подключения вредны и лучше делать маленькие, но сразу их выпиливать потом.
Ну вот чего ты лезешь в qt, когда C++ не знаешь?
static переменные нужно инициализировать вне определения класса. А ты этого не сделал.
Во-вторых, нахрена тебе нужен static? Передавай объект базы данных в конструктор и храни внутри класса сылку на БД.
В-третьих, хуле ты используешь библиотеку и не читаешь доки блчдь??? ПЕРЕД ИСПОЛЬЗОВАНИЕМ ПОЛНОСТЬЮ ПРОЧТИ ДОКИ К КЛАССУ
Я макака и не преследую целей стать программистом. Мне побрязгаться интересно.
Извини, если задел твои чувства, я не специально.
Почему ты решил что тебя не устраивает дефолтное подключение и вообще пытаешся свое сделать?
В отличии от GC-петухов у нас есть выбор. GC-поведение легко достигается с помощью shared_ptr. Не хочешь ебаться с памятью - везде ебашь shared. Не нравится полученная производительность - оптимизируй, хуле. Только мы можем стандартными средствами оптимизировать, а шлюхи вроде тебя будут бесконечно настраивать GC и писать костыльный unsafe-код.
Java - это крутая HotSpot JVM, фичи шестилетней давности вместо языка, и целый ворох радостей, если у тебя jvm другого вендора.
А как сходишь к жава разработчикам на этаж, а у них до сих пор древний oc4j 10g, который боятся торгать, и шестая джава – то есть уже не такая крутая жвм и говно 12летней давности вместо языка.
Если хочешь байтоёбится на джаве, внимательно посмотри это видео и подумай, а нахуй оно надо - https://www.youtube.com/watch?v=Q-7y1u9kZV0
Не приходит в голову эффективного решения. А удобного решения не приходить в голову без рефлексии. Так что если таки надо, то надо делать самому под свою задачу.
Stroustrup: I would have liked to get modules for better protection against changes in some components context (such as protection against macros) and better compiler speed, but that proposal isn't ready for C++17, so it goes into a TS. I think that eventually, modules will become massively important. They address long-standing problems in C and C++. An early version currently ships as part of Microsoft's C++. A different variant, more friendly to macros, is available in some versions of Clang. I am disappointed that stackless co-routines are being put into a TS rather than directly into the standard itself. I think they are ready and important for a few critical use cases (pipelines and generators). An early version currently ships as part of Microsoft C++.
http://www.infoworld.com/article/3044727/application-development/qa-bjarne-stroustrup-previews-c-17.html
Смотря где и смотря как. Я сейчас стараюсь использовать unique_ptr'ы и иммутабельность.
Справедливости ради замечу, что функциональность shared_ptr не идентична GC. В случае умных указателей возможна ситуация, когда утекает кусок памяти со взаимными указаниями друг на друга, с которой GC борется путем "универсального суперкласса" или еще как-то.
Ну поэтому кроме shared ещё есть weak_ptr и unique_ptr.
Для циклических ссылок и в жяве точно так же используется WeakReference.
Сборщик выигрывает у смартпоинтеров когда есть много объектов с небольшим временем жизни – из-за фрагментации памяти плюсы в таком крде могут хоть у питона соснуть. Но ясен хуй, что на смартпоинтерах такие куски писать никто не будет.
Бля. Этот ёбыч судя по "бинчмаркам и сравнинийам с си сиплюсплюс" даже не в курсе, что это не аллокация в жяве супербыстрая, это аллоцированная память не освобождается.
игру запили
И правильно. Совместное владение, по-хорошему, лучше использовать как можно меньше. Комбинация unique ptr и обычных указателей - тот контекст, в утром unique_ptr объявлен владеет указателем, а тот контекст, который его использует из вне, получает прямой указатель если нужно. Это при условии, что владелец живёт дольше, чем все пользователи.
>Для циклических ссылок и в жяве точно так же используется WeakReference
Очень редко, потому что GC и так умеет работать с циклическими ссылками.
мимо-новичок
>Компания Crytek анонсировала новый движок CryEngine V
>Среди основных нововведений:
>Поддержка C#;
>...
Кто там кукарекал, что сееплюсплюс незаменим для тредээкшонов?
Это для скриптов же, и чтобы юнитишкольников привлечь.
Так то же язык для скриптов, их на чем хочешь пишут. Небось до этого там какой-то lua (или вообще пистон) использовался.
В плане синтаксиса устаревают, но в подобных темах это не так важно. И вообще, других-то нет.
По поводу устаревания синтакиса: верно ли, что нюфане надо знать и старый и новый синтаксис, так как вдруг на работе придется поддерживать проект, который был написан до С++11?
Новый не исключает старого, а только дополняет. И там не такие ниебические изменения, которые нельзя за недельку от корки до корки вызуприть и поиспользовать.
Кстати, вы на работе переписываете проект на C++11 или оставляете как есть вдруг оно сломается?
Мы ж не ебанутые. Новые фичи начинают использоваться, как только все используемые компиляторы начинают их поддерживать. Тут обычно в VS проблема. То дорого обновлять лицензии, то самая новая студия не стабильна, то самая новая студия еще не умеет во все фичи.
Активно изменяемые модули часто переписываются для использования новых фич. С лямбдами так было.
Единственное, что не используется на кроссплатформе, это стандартная библиотека. С этим до сих пор проблемы. В итоге используется boost.
А вообще ломающих фич не так много, переписывать обычно ничего не надо.
SetConsoleTextAttribute меняет цвет всего текста. Мне чо блять изменять назад каждый раз?
Такая запись - норма в VS2015. Ну ок.
Ты упомянул студию, значит вы ее используете на работе в какой-то мере. Ради чего вы ее используете? Неужели только из-за продвинутого автодополнения и крутого отладчика как написано в шапке?
Емнип у студии самый быстрый рантайм из всех компиляторов под венду. Ну и стабильнее она. Вот я осенью внезапно наткнулся на баг в clang, который проявлялся при использовании unordered_map вместе с многопоточностью. Вроде не страшно, в следующей версии его пофиксили, но для продакшена ждать месяц никак нельзя из-за подобной хуйни.
Стандартным образом - никак. Можно использовать прямое обращение к функциям консоли, но это будет не кроссплатформенно. Еще можешь поискать какую-нибудь библиотеку для продвинутого ввода-вывода.
Потому что пекарни 32-битные, 32/8=4. Процессор работает сразу с двойными словами в 4 байта, из-за этого могут быть тормоза без выравнивания. Например, чтобы считать байт из выровненной позиции, ты читаешь 4 байта в EAX и дальше забираешь байт из AL. А без выравнивания ты не можешь считать ровно с этой позиции 4 байта, тебе придется считывать с предыдущей выровненной, байт окажется не в AL, а в одном из старших байтов EAX, тебе придется делать сдвиги, ну ты понел. Но если тебе скорость не так важна, а память дорога (на микроконтроллерах, например), то можно выключить выравнивание.
У любого процессора задан размер машинного слова. У 32-битных - 32 бита, у 64 битных - 64 и т.д. Регистры ЦПУ имеют именно такой размер (если не считать сопроцессора). Все операции производятся над данными разбитыми под размер машинного слова. Обращение к памяти тоже происходит по словам. Соответственно, если данные не выровнены по границам машинного слова, то операция чтения или потребует больше времени, или вообще не будет произведена (как у АРМов).
Выравнивается. По 1 байту. Однобайтные данные выравниваются по 1 байту, двухбайтные по двум, четырех по четырем. Те что больше машинного слова - по машинному слову.
>имеет размер 1 байт и не выравнивается?
С чего ты взял, что не выравнивается? Например, создай класс на стеке, и посмотри на его адрес.
Внутри структуры или массива.
Про минимальный размер я знаю. Мне было интересно про выравнивание.
Бьерн Страуструп
Программирование. Принципы и практика использования C++
2e издание 2014
https://yadi.sk/i/oJphQyQVmimRG
Есть одна очень большая компания, которая упорно использует vs6. И мы вынуждены поддерживать код в sdk для этой версии. Хотя сами сидим на свежих clang и gcc5
>Вот я осенью внезапно наткнулся на баг в clang, который проявлялся при использовании unordered_map вместе с многопоточностью. Вроде не страшно, в следующей версии его пофиксили, но для продакшена ждать месяц никак нельзя из-за подобной хуйни.
Что думаешь насчет этого? Из-за этого вы и делаете сборки разными компиляторами?
1) Виртуальные деструкторы - зло. Ни в коем случае не используй их.
2) К черту методы. Переопределяй операторы. Зачем придумывать названия методам, когда умные люди дали тебе операторы.
3) Умные указатели для идиотов, которые незнают как писать nwe и delte. (Их тоже перегружай, а то вдруг стандартная реализвация изменится, и программа полетит)
4) rvalue? lvalue? Ничего старых добрых сишных указателей не придумали. Передача по указателю - наше все.
Продолжай, анон
Создание объекта не причем. Абстрактный класс может реализовать виртуальный метод с телом. Тогда все равно нужно как-то вызвать его. А это значит что для абстрактного класса должен быть vtable.
В интерфейсах тоже есть vtable.
На ангельском:
http://stackoverflow.com/questions/11196329/interface-vtable
Мультинаследование - самый мощный инструмент языка, не пренебрегай им.
Мне кажется ты не понял сути vtable. Он не для создания экзепляров класса нужен, а для поиска нужной реализации виртуального метода в рантайме.
Два ромба этому содомиту.
Да это я понимаю. Просто без объекта и таблица не нужна. А если в классе есть чисто виртуальный метод то мы и не можем создать объект.
Вообщем в MSVC есть такое. https://msdn.microsoft.com/ru-ru/library/k13k85ky.aspx
Я так понял во время компиляции подставляется declspec(novtable) и vtable не создается
Используй goto вместо while. Его оставили для лучшей оптимизации и компилируется он всего в одну ассемблерную команду jmp поэтому он очень быстрый.
Еще раз - причем тут создание объектов?
Позднее связывание реализуется при помощи vtable. Допустим есть float Shape::area() = 0
И Square наследует Shape и переопределяет Shape::area().
И есть например метод заливки площади определнным цветом - void fill(Shape* ptr)
В методе fill и будет использоваться vtable для определения реализации Shape::area() конкретного класса, в данном случае будет использоваться Square::area()
> Единственное, что не используется на кроссплатформе, это стандартная библиотека. С этим до сих пор проблемы. В итоге используется boost.
Не понял. Ты про то, что стандартная библиотека бедна (ни filesystem, ни networking, etc) или про то, что stl, алгоритмы и прочее по-разному реализовано и ломает код на разных платформах? Поясни крч пжл
С кодом обосрался, но думаю суть должна быть понятна.
НАПИСАЛ ВСЮ ПРОГРАММУ ОДНОЙ ФУНКЦИЕЙ ИЗ 100К СТРОК С GOTO ВМЕСТО ПОДПРОГРАММ
@
КОД НЕ УМЕСТИЛСЯ В ОДИН СЕГМЕНТ
@
GOTO ТРАНСЛИРУЕТСЯ В LONGJMP ИЗ ТРЕХ КОМАНД
Повежливее с герром ван Винклем, он только что из 1999-го с коммерческими STL.
Самозащита от сокращения?
Да. Понял к чему ты. Спасибо, что пояснил.
> stl, алгоритмы и прочее по-разному реализовано
100 РЕАЛИЗАЦИЙ
@
СДЕЛАЕМ СВОЮ, ЧТОБ ЛЕГЧЕ БЫЛО ПЕРЕНОСИТЬ
@
101 РЕАЛИЗАЦИЯ
Мне кстати очень не хватало раньше бинпоиска. Такого что ищет элемент и возвращает итератор указывающий на него, а если такого элемента нет, то итератор на элемент перед которым должен стоять искомый.
std::lower_bound
>Накидайте список вредных советов.
Лямбды для мудаков, юзай шаблонные функторы и мультинаследование по максимуму.
А также пиши код с упором возможности запуска на бабушкином телевизоре и папином ноутбуке простой переборкой.
>А ещё лучше статью где придумывают правдоподобные причины почему эти советы полезные.
В оппосте: Современное проектирование на C++. Таки да, юзай, но C++ тебе не D, и такой код на код-ревью не поймут, так что знай меру.
Чому в longjmp, а не far jump?
> Win32-консоль вообще не поддерживает управляющие последовательности ANSI. Программное обеспечение может управлять консолью посредством ioctl[en]-подобных системных вызовов консольных API, чередующимся с текстовым выводом.
Мда. Чому у винды все не как у людей?
Clang под osx, GCC под Linux.
Ловим иногда забавные баги, но не критично. Используем версии на 1-2 ниже.
Под разные компиляторы разные реализации. У Майкрософт как обычно свои велосипеды везде.
Исторические причины. И клиенты есть на гцц, проще сразу чего использовать чем потом искать.
Была проблема с бустовым ренжем, когда пустой ренж схлопывался в нечего на одной версии гцц, а на другой был пустой объект. Из-за ошибки в коде очень весело падало.
В сланге была проблема с очень закрученным шаблоном полное имя инстанцированного шаблона около 4Ксимволов, 7 гигов оперативки компилятору нужно чтобы раскурииь, пофиксили у себя, потом и сланг сам пофиксился.
>полное имя инстанцированного шаблона около 4Ксимволов
Это тоже что и имя переменой или функции? Тогда почему не сделать поменьше? Хотя компилятор и с функциями имена которых 10к символов нормально работает.
Это имя инстанцированного шаблона со всеми параметрами. Там такой уровень вложенности, что сопьешься пока найдешь параметр
Мета-программировние оно такое.
Но вся эта магия генерирует очень компактный и быстрый парсер. И очень легко конфигурируется и расширяется
Каждый раз когда ты компилируешь что-то вроде Хуй<Пизда<Джигурда>> компилятору приходится для каждого инстанцированного шаблона создавать новое внутреннее имя. Если злоупотреблять метапрограммированием на темплейтах, эти имена могут быть ОЧЕНЬ длинными.
Я так делаю чтобы писать c++ в циклах. Почему компилятор не оптимизирует эту штуку если в ней нет знака равно?
Для встроенных типов оптимизирует, для всяких итераторов это нужно быть очень умным компилятором. Поэтому пиши ++с всегда.
Потому что время жизни возвращаемого объекта только на первый взгляд нулевое. Например, в деструкторе возвращаемого значения может быть перебор галактики, поэтому оптимизация здесь это нарушение семантики кода.
1. Называй перменные и функции транслитом mamku_ebal, perdoli.
2. Используй c-type cast operator на классах, но не чаще, чем reinterpret_cast.
3. Помни! Препроцессор лучше шаблнов.
4. Оставляй две пустые строчки между строками кода, но после каждой четырнадцатой оставляй четырнадцать пустых, а после восемьдесят восьмой - восемдесят восем пустых.
Будь современным, иммутабельным и ссылочным - используй const и & в шаблонных параметрах.
Все переменные должны быть глобальными - никогда не знашеь, что может понадобиться.
Нет. По видео лекциям и упражнениям Петрова, аудио лекциям Пимслера, подкастам Хога и книге Мёрфи.
Я нихуя не пойму.
Я хотел сказать, что новые библиотечные фичи не используем. Потому что до сих пор сидим на stlport. Честно скажу, лично я не знаю какие проблемы возникали при использовании разных стандартных библиотек на разных платформах. Но ходят легенды, что раньше возникали, поэтому сидим и ждем новую кроссплатформенную либу. Вроде как libstdc++ к этому стремится, но пока еще не оче.
Щито поделать
Type traits и SFINAE мимо вас проехали, рачьо?
Это совет для опытных метапрограммистов.
Охуительные истории.
http://ideone.com/ZRXhnP
Манька не знает как выводится тип?
А "auto&" тебе ни о чем не говорит?
Фишка в том, что <const Class&> и даже с виду безобидный <const char*> таит в себе неиссякаемый источник приключений. Попробуй как-нибудь на своем шаблонном коде, который ты считаешь bullet proof
Например? Все приключения ты находишь, потому что не знаешь правила вывода типа. У меня таких проблем никогда не было.
Попробуй написать коллекцию, которая будет корректно работать с ссылками и константными типами в темплейте такое под силу только суперчеловекам из комитета, никогда не пытайся использовать такие типы в сторонних библиотеках.
С ними все в порядке, пока ты не пытаешься их использовать в параметрах темплейтов. Можно, например, сделать vector<const Myclass&>. И он может быть будет работать. Но заранее не скажешь.
Почитай требования к типу вектора. Там все четко описано. Если твой константный тип выполняет их, все работает.
Короче, иди читай cppreference до просветления.
пока серьёзные дядьки творят мета магию на шаблонах
Это обычная уличная магия темплейтов.
> кроссплатформенную это под разные компиляторы?
Сам недавно вынужден был на msvc2015 портировать код, потомучто внезапно в mingw словил дикий баг обработки исключений под шиндошс сервер 2012. Проект на C++11.
У тебя, судя по всему, легаси какой-то?
не, легаси нет. Компиляторы и boost регулярно обновляем. Просто так исторически сложилось с stlport. Пару раз поднимали вопрос, в ответ - какие-то проблемы, если использовать разные либы. Ну и похуй в общем-то. Только строки по факту юзаем
А ты с выводом типа не дружишь. Лучше Маерса свежего почитай, кажись и проблема будет снята
>ты с выводом типа не дружишь
Чтобы дружить с выводом типа, надо для каждого темплейтного класса писать потроха на 2к строк как в STL. А с C++11 уже на 20к.
Достаточно писал.
Еще раз - к элементу вектора предъявляются строгие требования.
must meet the requirements of CopyAssignable and CopyConstructible..
Если твой const T& может в копирование и присваивание - все будет работать.
Вся stl написана по строгим правилам. Все контейнеры, итераторы и алгоритмы определяют требования к типам.
> А с C++11 уже на 20к.
Надо же. Порядок угадал.
$ echo "#include <vector>" | gcc -x c++ -std=c++14 -E - | wc -l
11229
Ты же понимаешь, что эти требования применяются ко всем включенным типам. Если ты где-то слажал, и не сделал rule of 5, все рассыпается, и приходится исследовать все <<<<<<<<<<<
Поэтому мы любим хаскель и не любим C++.
Кроме rule of 5 надо еще прописать все ::intricate_mostly_unknown_trait и прочую хуйню, и телепатически угадать, что от тебя хотел автор либы в данном конкретном случае.
>>692160
>умение читать вывод компилятора об ошибках в шаблонах приходит с опытом
Опыт говорит: не использовать сторонние либы, не использовать STL и boost, держаться ближе к няшной.
А с чего его отменять?
Короче, окончательная инфа: вектор начинается на строке 7900 и заканчивается на 8839. (это без специализации под bool). Итого, контейнер в C++14, в противоречие стонам истерички про 20к строк, можно написать менее чем в 1000 строк.
А если учесть, что там дофига пикрелейтед, то реальных строк там 500 и менее.
> подебил
Как у тебя припекло от того, что можно дружить с выводом типов и писать не в 20к строк, а в 500. :3
Это же библиотечная реализация. Это норма.
В MSVC на обычный вектор ушло 1700 на bool - 1100
>не в 20к строк, а в 500
500 строк - это наивная реализация (у меня свой вектор - 400, из которых 250 - обертка над сишной либой). В GCC - около 3000.
20к и даже 100к у тебя будет, если ты для каждого типа будешь выписывать всю бюрократию.
> В GCC - около 3000.
Да що ви такое говоrите?
Я тут >>692180 разбирал по частям вектор из gcc. Там менее 1к строк.
А зойчем ви-таки хотите rуками виписывать всю бюrокrатию? Ви-таки не знаете, что темплейты сами умеют виписываться?
>692182
>20к и даже 100к у тебя будет, если ты для каждого типа будешь выписывать всю бюрократию.
Ты ошибаешься. Нет там никакой бюрократии относительно const/не const.
Короче, ты не шаришь, как выводится тип. Там ничего сложного нет. Тебе нужно прочитать из нового маерса всего 2 главы: собственно "вывод типа" и move-семантика
пгепгоцессог гежет комментагии :(
комментагии не особо стоит считать.
В clang libc++ там вообще rилейтед куски стандагта копипастятся в комментагии пегед геализацией каждого контейнера.
Тоже никогда не мог понять такой хуйни
help
В двоичном файле записана сплошняком информация, мне нужно удалить отдельные элементы из файла, отвечающие условиям которые вас ебать не должны. Яснее?
Ищи Community version \ edition
Раньше было лучше
лямбды — сложна
Эксепшны наше всьо
true
сделал std::vector<Wheel&> и std::vector<const Wheel&>
TDM 4.8 выдаёт ошибку
error: forming pointer to reference type 'const {anonymous}::Wheel&'
И вообще, зачем иметь вектор ссылок? Бред же.
Всегда возвращай значения вычислений в исключениях. Так ты можешь получить результат выполнения функции из самых глубин стека.
Йоба отклеилась.
темплейты сложны, а когда ещё и с тремя точками так это вообще трындец
Цитата из книги (стр. 60):
>В частности, люди, утверждающие, что их интересуют только компьютеры и программирование, обычно просто не в состоянии общаться с коллегами-не программистами. Такие люди не только лишены роскоши человеческого общения (собственно, самой жизни), но и, как правило, разрабатывают плохое программное обеспечение.
Лол.
Ок
Linux.org.ru раздел форума development. Там шарят в gtk некоторые.
Как можно уменьшить вес ехе'шника? Есть какие-нибудь хаки? Сразу говорю динамическая линковка идет нахуй.
Что угодно, что сделало бы вес проги меньше чем если юзать статик линковку+кучу флагов+upx. Спасибо.
Хочу вкатиться в игрострой. Это лучший для этого язык?
Да.
На крестах пишут движки для создания игр. Сами игры, с 80% вероятностью, скриптуются на каком-нибудь другом языке.
Вы видите копию треда, сохраненную 8 апреля 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.