НАДОЕЛИ JAVA-БЛЯДИ? ТОШНИТ ОТ WEB-МАКАК? ХОЧЕТСЯ ПИСАТЬ КОД, КОТОРЫЙ ДЕЛАЕТ СИРИУС ШИТ? ДОБРО ПОЖАЛОВАТЬ В C++ ТРЕД, MOTHERFUCKER!
1. Почему стоит использовать именно C++: - C++ действительно быстрый - по скорости уделывают любой язык, часто - с большим отрывом. Замедление относительно C находится в районе 0-20%. Замедление зависит от вас - девиз языка: "Платишь только за фичи, которые используешь". - C++ - очень выразительный язык. В него заимствованы большинство существующих парадигм из всех популярных языков. - У C++ очень большое и, самое главное, профессиональное комьюнити. Это так из-за высокого порога вхождения.
Однако, C++ очень сложный. Прямая работа с памятью и тысяча способов выстрелить себе в ногу - это про него. Не стоит его использовать всегда: нужно понимать, что используемый язык должен соответствовать поставленной задаче. Да, анон, не стоит писать на C++ скрипты или веб-фронтенд, а потом жаловаться, что C++ говно. Плохому танцору и ноги мешают, как говорится.
2. Литература для начинающих: Все примерно одинаковой годноты, читать имеет смысл только какой-нибудь один, который больше приглянется. - Стэнли Липпман, Жози Лажойе и Барбара Му - Язык программирования C++ (2014) - https://goo.gl/kVaela - Стивен Прата - Язык программирования C++ (2012) - https://goo.gl/z7kA8u - Бьерн Страуструп - Программирование. Принципы и практика использования C++ (2011) - https://goo.gl/nAFUXa
3. Литература для тех, кто осилил предыдущий пункт: Книги про основные подводные камни. Следует пролистать все. - Скотт Мейерс - Наиболее эффективное использование C++ (1996) - https://goo.gl/tHa0tO - Скотт Мейерс - Эффективное использование STL (2002) - https://goo.gl/QtS8Dc - Скотт Мейерс - Эффективное использование C++ (2005) - https://goo.gl/wsDXGz - Герб Саттер и Андрей Александреску - Стандарты программирования на языке C++ (2005) - https://goo.gl/Cpk4YR - Скотт Мейерс - Эффективный и современный C++ (2015) - https://goo.gl/Im8VYQ
5. Ньюансы проектирования на C++: Следует пролистать все перед переходом от лаб к написанию настоящего софта. - Ален Голуб - Веревка достаточной длины, чтобы выстрелить себе в ногу (2001) - https://goo.gl/fBmuxp - Андрей Александреску - Современное проектирование на C++ (2002) - https://goo.gl/e1V5BCэто - квинтэссенция ГИБКОСТИ, поэтому стоит прочитать в любом случае, чтобы охуеть от того, как можно делать. - Джеймс Коплиен - Программирование на C++ (2005) - https://goo.gl/Y1WGdU
6. Тонкости языка (для гурманов): - Герб Саттер - Решение сложных задач на C++ (2002) - https://goo.gl/iWaa6S - Герб Саттер - Новые сложные задачи на C++ (2004) - https://goo.gl/4nn512
9. Куда писать код: - Кроссплатформенные IDE: QtCreator, Eclipse CDT, CLion (Платно, но зато энтерпрайз. Легко сбрасывать пробный период, также можно купить на торрентах) - Только на Windows: Microsoft™ Visual Studio® - Только *nix: Компилим через консольку с помощью clang или, в крайнем случае, gcc (если хочется смотреть на охуительные мессаги) - Для тех, кто капчует с домофона: http://ideone.com
10. Code Quality: - CppCheck. Статический анализатор, который умеет находить в коде ошибки и неоптимальные места. Швабодный. Есть плагин для Visual Studio. - http://cppcheck.sourceforge.net - Clang Static Analyzer. То же самое, но встроено в одноименный компилятор. Активно пилится Google и Apple. - http://clang-analyzer.llvm.org - PVS-Studio. То же самое, но энтерпрайз. Для пиара пишут годные статьи. - http://www.viva64.com/ru/pvs-studio/ - Visual Leak Detector. Детектор утечек для Visual Studio. Предельно прост в прикручивании - https://vld.codeplex.com - Google Sanitizers. Гугловские утилиты для поиска утечек, дедлоков, гонок, неинициализированной памяти и некорректного доступа - https://github.com/google/sanitizers - Valgrind. То же самое, но медленно.(Очень. По сути, это - виртуальная машина) http://valgrind.org
11. Годные библиотеки: - Standard Library. С недавнего времени(С++11) стала годнотой. Например, теперь можно писать кроссплатформенный распределенный код, не подключая boost. Что очень хорошо. Кстати о бусте. - Boost (http://www.boost.org) - бесспорно, самый популярный набор C++-библиотек. Воистину всеобъемлющий, boost способен удовлетворить твои самые скотские фантазии. В нем есть практически все - от математических функций до сетевых компонент, от инструментов тестирования до динамических типов. Функции для работы с твоей мамашей там тоже есть. Разумеется, все это швабодное и работает на любых платформах. Boost является своеобразным инкубатором хороших библиотек, поэтому наиболее удачные из них с большой вероятностью можно будет увидеть после принятия очередного стандарта уже как часть стандартной библиотеки. Недостатком boost можно считать его размер - более 300 мегабайт. Большинство компонентов boost не являются независимыми, и попытка использовать один единственный контейнер обернется фактическим подключением 2/3 всего присутствующего в комплекте. Таким образом, если boost не будет использоваться на полную, лучше юзать другие, более специализированные библиотеки. - Qt (http://www.qt.io/) - свободный кроссплатформенный фреймворк-надмножество C++ под названием Qt. Он содержит довольно большое количество компонентов (для работы с сетью, базами данных, для юнит-тестирования и др.), но киллер-фичей и основным полем его применения являются возможности по разработке графических интерфейсов. Qt сам по себе, как расширение языка, предоставляет для этого более удобные средства, чем обычные библиотеки, а использование специализированных IDE наподобие Qt Creator позволяет в буквальном смысле собирать интерфейсы мышкой, а код писать только по существу. Тем не менее, использование Qt нельзя однозначно назвать хорошей практикой. Во многом это уже не C++, а другой язык, со своими концепциями и паттернами. Qt-код требует дополнительного препроцессинга при помощи встроенных в Qt утилит (т.н. метаобъектная компиляция), поэтому не получится просто подключить Qt как обычную библиотеку и использовать свой любимый компилятор без дополнительного софта. Нельзя сказать, что это существенное препятствие, но есть мнение, что использование Qt нарушает дух C++, раздувает машинный код и порождает макак-любителей кодогенерации. В настоящее время основные версии Qt - 4.8 и 5.х, полной обратной совместимости между ними нет как в пистоне, ага. - И еще куча библиотек на любой вкус - http://en.cppreference.com/w/cpp/links/libs
Итого: Вопросу по синтаксису идут на хуй. Лабы идут на хуй. "Как мне сделать Х на чистых крестах без библиотек" идут на хуй. Все идут на хуй. Хейтер сосет члены на пару со своей мамашей.
Аноны, подскажите идею проекта с использованием Boost, C++, WinAPI(набор может отличаться, главное чтобы какая-нибудь системная хуйня) чтобы было реально сделать новичку и чтобы результат понравился работадателю при собеседовании на Junior'а(Сам нихуя не знаю кроме плюсов)
>>644804 Убери winapi, возьми qt. Если работодатель что-то делает на чистом winapi, поверь, ты и сам не захочешь там работать. Но, winapi все равно надо знать, чтобы понимать как оно внутри устроено.
>>644807 Если в вакансии WinAPI - никогда не иди туда работать т.к. с вероятностью 99% придется поддерживаться старый-старый код, который никто не хочет переделывать.
>>644814 на хуй win api. Тебе это самому не выгодно, лучше выучить QT и linux, хочет работодатель win api, ищешь другого. На многих местах работы ты сам сможешь диктовать работодателю на чем делать проект. Вот смотри у тебя есть год времени, ты можешь потратить его на 1. Изучение win api 2. Изучение QT Через год изучения QT, пусть глубокого ты сможешь с высокой скоростью выполнять сложные кроссплатформенные проекты, а после года win api тебя возьмут в говнопарашу поддерживать легаси. Я исхожу из того, что все мы стремимся к звездам.
>>644817 ликвидность и польза этих знаний минимальна java - windows, android, linux можно начать все с нуля с новой командой и выйти в люди winapi - работа с командой>40, где ты хуй продвинешься
не, слушай этого пидора. Если тебе там будут нормально платить, то и в нормальных местах платить будут хорошо. Зачем же себе жизнь гробить, используя платформо-зависимый gui фреймворк 98 года выпуска, в котором даже ООП нет? К слову, если захочется попробовать MFC - отбрось эту идею, это то же говно, но слегка обернутое в ООП. Учи лучше сразу Qt
>>644839 Я про это и говорил, стагнация-с. Платформозависимый код потихоньку уходит из плюсов (потоки теперь в std есть, в с++17 хотят добавить работу с сетью и IPC, файловую систему ту же, а то, чего нет в std, есть в boost). >>644840 Платить-то будут, только развития как разработчика не будет.
И снова здравствуйте. Это вчерашний хуй с CTF. Я так и не решил задание. В данный момент код работает верно, но остаётся 3 уязвимостей с утечкой памяти. Есть предположение что дело в GetCommandLine и printf. Вот сам код - http://pastebin.com/s0GSq1sC
Помогите пожалуйста. Я дико извиняюсь, но пойти с этим некуда больше.
>>644918 Циклы while (2 штуки) могут за буфер выйти. В 35 строке UB - указатель указывающий на массив значений в памяти нельзя (UB) перемещать на позицию влево от этого массива. Указатель можно перемещать только по массиву и на одну позицию справа от массива.
>>644937 >Указатель можно перемещать только по массиву и на одну позицию справа от массива Что хочу, то и делаю. Если хочу исследовать окружающее адресной пространство, где потерялась твоя мамка, то мне ничто не помешает это сделать.
Так, господа. Есть ли свежая литра по STL? в шапке гниль за 2002-й год И есть ли вообще в природе лит-ра по бусту? Кроме той книжки про графы, разумеется.
«Сбей самолет». По экрану летят вражеские самолеты. Цель – сбить их. Пусковая установка находится на нижней строке экрана. Пусковую установку можно перемещать влево или вправо.
>>644946 Проиграл с борцуна. Жалко только что когда ты перемещаешь указатель за пределы буфера (включая один элемент прямо после него) то разработчик компилятора может всунуть выполнение любых действий, к примеру начать майнить битки - и это будет 100% соответствовать стандарту.
>>644918 Этот твой цтф, сука, он меня бесит. Нахуя он зануляет аргумент в конце? Без этого не проходит. atoi генерирует УБ если repeat выйдет за пределы инта. Какие еще уязвимости остались?
>>644983 > Ты пиздатый хакер > Нашёл уязвимость на серверах гугла > Ожидаешь падение всех серверов гугла > Указатель вышел за границы буфера > Все датацентры гугла массово майнят бетки > Гугл богатейшая компания мира > Забивает на все свои проекты и продолжает лихорадочно майнить битки
>>644947 Внимательней смотри. >- Николаи Джоссатис - C++. Стандартная библиотека (2012) - https://goo.gl/PEyiMH >И есть ли вообще в природе лит-ра по бусту? Я думаю её дохуя, например, Antony Polukhin - Boost C++ Application Development Cookbook, но буст НЕНУЖЕН.
>>645017 А ну тогда пойдёт. Нверно с какой-то другой книгой перепутал где про STL обещали и целую главу дэбагеру посветили. Если что я мимо проходил, а не тот кто книгу реквестил.
>>644979 >Код на С++ написан вообще-то. Если честно, то в каком месте? Не вижу ни одной особенности с++. >>645013 >Содержание посмотри. Про STL только 1 глова.
>>645032 Да молодец, откуда оно? И в каком формате книга? Блядский Вильямс как всегда не продает электронные копии, поэтому приходится довольствоваться либо самописным оглавлением в djvu, либо никаким оглавлением в pdf после конвертации.
>>645037 Спасибо, но ебал я в рот этот djvu. На mac нет нормального вьювера для djvu. Поэтому я всегда конверчу в pdf, но при этом теряется оглавление.
>>645097 Зато случатся ошибки с шаблончиками на 100500 страниц, ошибки с кокозателями, вылеты за массивы, утечки памяти и еще овер9000 всякого говна и ебли.
>>645101 >шаблончиками >кокозателями >вычисления У тебя проблемы с восприятием реальности если видишь связь. >вылеты за массивы, утечки памяти Сказал будто жява от них полностью освобождена. Ну а когда у тебя GC начнёт останавливать мир, и система пойдёт свопы - забудь про поспевание за GPU.
>>645109 >Неужели с прыщей ничего не портнули под мак? А зачем? djvu это же сканированные книжки. Зачем на макакоси позволять такие? Пущай рабы в хуйсторе покупают.
>>645111 >>645106 Вполне возможно, что хочет заставить студента понять основы взаимодействия пользователя и интерфейса. И где можно использовать псевдографику из символов с банальным выводом в консоль.
>>645117 >переусложнённость крестов Зато в си почти вся серьезная разработка так и пестрит макросами, которые раскрываются в другин макросы, которые содержат макроподстановки и т.п. Не особо проще, если честно. Хотя, с другой стороны, меньше оверхеда.
>>645123 А как комьюнити? Есть свои мануалы \ сайты например? Просто по крестам постоянно вижу кучу справочников\учебников\семинаров\выступлений и прочего. С - как будто вообще забыли в 91 году.
>>645129 Да я про те же исключения, сейчас на работе адаптируем тесты под совсем маленький SoC и там всего 256кб памяти, так приходится переопределять исключения базовые чтобы уменьшить размер бинарника. иначе не влезает.
>>645149 Мне даже интересно где ты живёшь, что тыщи в месяц хватает. >>645135 Тогда твоё прошлое сообщение можно сформировать как "в C просто нечем сделать себе оверхед в анусе".
>>645083 CUDA редко нужна сама по себе, часто можно сделать параллельную работу на CPU, по окончательному приведению данных в удобоваримый вид и т. п. Ну и плюс ты можешь легко шарить CPU и GPU код с C++ (см. thrust), с Java такого не будет.
Поясните, на хуй нужен спецификатор const? Если программа будет пытаться изменить значение переменной, которое не предполагается, что она будет менять, то это лютый фейл в коде независимо от того, получится это у неё или нет, на хуй нужно ебать мозг этим спецификатором, увеличивать код программы, вспоминать, что в методах он в конце и так далее?
Поясните, почему индексация элементов массива не запилена безопасным способом, и её обязательно нужно перегружать для этого. Вы что, охуели? Зачем переполнение массива?
Поясните, на хуй нужны указатели? Почему нельзя было запилить язык так, чтобы он не создавал копии, а работал с адресом изначально через индексацию.
Поясните, нахуя нужно определять методы за пределами класса? Есть же private, есть public, есть protected, инкапсуляция, рыцари.
>>645320 >Поясните, на хуй нужен спецификатор const? На самом деле по-хорошему нужен, наоборот, модификатор val, а константными значения должны быть по умолчанию. Потому что 2016, декларативность, все дела. >Поясните, почему индексация элементов массива не запилена безопасным способом, и её обязательно нужно перегружать для этого. Потому что оверхед. Сишные массивы вообще НЕЛЬЗЯ использовать. Используй STL, а там компилируй с D_GLIBCXX_DEBUG, будут тебе проверки. >Поясните, на хуй нужны указатели? Потому что на адресной арифметике можно эффективно сделать некоторые вещи. >Почему нельзя было запилить язык так, чтобы он не создавал копии, а работал с адресом изначально через индексацию. Такой язык запилен, Java называется. Почему в С++ не так - потому что эффективнее работать со значениями. >Поясните, нахуя нужно определять методы за пределами класса? Потому что в С++ нет модулей и это позволяет в хедере не делать лишние #include которые нужны только для имплементации, а не интерфейса.
>На самом деле по-хорошему нужен, наоборот, модификатор val, а константными значения должны быть по умолчанию. Потому что 2016, декларативность, все дела. Константность - это хорошо потому что компилятор может оптимизировать код (например, закешировать значения функций).
>Потому что оверхед. Который выражается в лишней проверки на выход за границы, например: int getValue(int index) { return data[index]; }
int getValue(int index) { if(index >= 0 && index < size) { return data[index]; } else { //error } }
>Потому что на адресной арифметике можно эффективно сделать некоторые вещи. Например, есть указатель на член структуры, используя адресную арифметику можно получить адрес начала структуры.
>Потому что в С++ нет модулей и это позволяет в хедере не делать лишние #include которые нужны только для имплементации, а не интерфейса. Вообще, это достаточно большой недостаток плюсов (и сей), настолько большой, что хотят даже ввести модули в с++17, больше исторический факт.
Поясните, я немного не разобрался: 1. extern int i; 2. int j; В 1 случае я объявил переменную, но не определил её, т.е. i неопределена, так? А как во 2 случае? Я её объявил и определил, но она всё равно неопределена. Или я не до понял что-то?
>>645341 В первом случае, это указание компоновщику, что переменная определена в другой единице трансляции и при компоновке компоновщик все специальным образом настроит.
Во втором случае ты объявляешь переменную на стеке или в сегменте данных, в которой будет мусор.
>>645349 >undefined behavior Откуда оно взялось? Указатель и ссылка разных типов? Оба 8 байт. Типа 1 знаковый, а другой нет? В памяти выглядят одинаковыми.
>>645422 Компилятор должен генерировать код согласно стандарту языка, а не твоим представлениям о компиляции. Это сделано для того, что, чтобы с оптимизациями проблем не было.
>>644722 >>644727 >>645048 Посоны, ну правда в последние дни был очень занят я. Собирался этой ночью перекатить, но раз такое дело, то пусть висит этот только жалко, что товарищ проебал юбилейный двадцатый номер. Стихи тогда на следующий тред пойдут. настоящий ОП
>>645431 >А ты о чём? Хочешь сказать можно сделать память не редактируемой? Почему ты не загуглил ".rodata"? Это секция сегмента данных, которую специально генерирует компилятор. Я не помню точных критериев, по которым туда попадают переменные, помню, что туда точно попадают глобальные константные переменные с тривиальным конструктором.
>>645428 Алсо, что за пиздец в шапке, лол? Все перемешал нахуй в кучу, джве трети выкинул, натащил какого-то говна. IDE вообще структурировал, блядь, от души. "Ньюансы", "однако, ", охуеть. Как дети малые, честное слово, на неделю не оставишь без присмотра.
Вот примерно по такому принципу делаются форки языков. Приходит уася, половину выкидывает, а остальное перепиливает ЕДИНСТВЕННО ВЕРНЫМ СПОСОБОМ. А потом удивляется, почему никто не перекатывается.
>>645441 >Вот примерно по такому принципу делаются форки языков. Приходит уася, половину выкидывает, а остальное перепиливает ЕДИНСТВЕННО ВЕРНЫМ СПОСОБОМ. А потом удивляется, почему никто не перекатывается. И кто же таким занимается?
>>645455 Ох бля. Спасибо за сладкий хлебушек, братишка.
>>645441 Я, конечно, проебался моментами, но, чья бы корова мычала - твое говно вообще было полностью нечитаемо. Ебался с иерархической структурой подачи информации, а вышла полная хуйня с полностью подчеркнутыми предложениями(!!!). Сука, никогда так больше не делай - это выглядит вырвиглазно, нахуй.
Про 2/3 выкинутого - не пизди. Убрал совсем объебосную наркоманию типа "C++ устарел", "С++ сосет" и подробный гайд, как создать проект в Visual Studio. Сюда не заходят мимокрокодилы. Вот скажи нахуя ты это капитанство писал тогда?
Алсо, когда редактировал тулы, проигрывал с того, как ты CppCheck не забыл указать, а Clang Static Analyzer с Valgrind'ом забыл. Серьезно, блять?
>>645482 Так надо вырабатывать наилучший вариант, а не по принципу "здесь убрали одно говно, тут добавили другое". Я полностью согласен, что стоит модифицировать форматирование, но вот с содержимым ты переборщил, конечно. Valgrind'а не было по аж трем очевидным причинам: он и так известен и распиарен, он не относится непосредственно к крестам давайте еще про гит напишем, будет охуенная шапка на сотню страниц, он сложен для ньюфага. "C++ устарел" было важнейшей частью шапки, возможно даже важнее книг. Ты погляди, какие вопросы задают в треде: "чем C++ отличается от C#?", "анон что лучше цепепе или питон?", "почему нет вакансий?", ну ты понел. Нам надо привлекать людей, показывать хорошие стороны крестов, чтобы скроллящий нулевую человек увидел шапку и проникся. А алтфаки и так знают 95% ее содержимого же.
>>645324 >> Потому что на адресной арифметике можно эффективно сделать некоторые вещи. Например какие, кроме примера с адресом структуры? Сколько не писал, всё ХУЖЕ. Сортировка кучей, лексикографическое сравнение, тысячи их. >> Потому что в С++ нет модулей и это позволяет в хедере не делать лишние #include которые нужны только для имплементации, а не интерфейса. Нихуя не понял, даже с уточнениями из следующего поста. Можно на простом языке, для неопытных программистов?
За остальные пункты заебца пояснил, хоть я бы и поспорил.
>>645512 Я против гуглодоков, с публичным доступом на запись там гарантированно наступает пиздец. Если уж такой вариант будем делать, то давайте на гитхабе. Но, честно говоря, мне вариант с шапкой на другом ресурсе не нравится. Не лампово как-то.
>>645505 >Нихуя не понял, даже с уточнениями из следующего поста. Можно на простом языке, для неопытных программистов? Без выебонов: это ёбаное говнолегаси из 80-х. Страуструп ещё в 2006 (или раньше, я хз было ли это в издании 98 года) писал о них, но и как с выводом типов какого-то хуя тянет.
>Например какие, кроме примера с адресом структуры? Сколько не писал, всё ХУЖЕ. Сортировка кучей, лексикографическое сравнение, тысячи их. Арифметика обычная, кек. Оставлено для гибкости, видимо.
>>645498 >Нам надо привлекать людей, показывать хорошие стороны крестов Все скролят нулевую программача. Не знаешь что выбрать? Спроси у двача! Ни что так сильно не влияет на выбор будущего языка программирования ньюфага чем шапка треда. Надо воспользоваться статусом самого посещаемого сайта интернета и разместить здесь рекламу крестов. Обучим их всех советами лучших специалистов двача. Привлечём к крестам столько лёдей сколько ни одни ЯП раньше не видел! Даёшь пятилетку за 4 года! Каждому крестовику по компилятору!
>>645505 >Например какие, кроме примера с адресом структуры? Например, аллокаторы. >Нихуя не понял, даже с уточнениями из следующего поста. Можно на простом языке, для неопытных программистов? В C++ нет модулей. Хедеры - это просто копипаста которая с помощью #include вставляется препроцессором в .cpp файл, а компилятор уже имеет дело с длинной колбасой, и он рожает объектный файл с расширением ".o". Дальше объектные файлы соединяет между собой линкер. Соответственно, если ты делаешь #include <yoba.hpp> в хедере, то он будет парситься в каждом .cpp файле. Это замедлит компиляцию.
>>645538 Другие языки не юзаю, про модули не понимаю, это обычные cppшники? Ну и что, как они связаны с определением методов за пределами класса и инклюдами? Вообще, почему не определить методы сразу внутри класса без всяких операция получения доступа ::, и искать не нужно — все методы рядышком, почему не так?
>>645554 С модулями препроцессор не нужен, а компилятор уже после того, как распарсил исходники, знает, что и куда можно запихнуть. Это позволяет много хорошего - от более быстрой компиляции (в том числе и с кешированием), до более простой структуры компилятора, которому не нужно будет ебаться с оптимизацией после линковки.
>>645505 >Например какие, кроме примера с адресом структуры? Запись в регистры по их адресам. Маппирование файлов в память и вообще работа с виртуальными файлами. Упрощенная бинарная сериализация.
Фактически первое, что в голову пришло. >Нихуя не понял, даже с уточнениями из следующего поста. Можно на простом языке, для неопытных программистов? Во-первых, как уже говорил, это собираются менять отчасти т.к. действительно легаси, но расскажу зачем это делать сейчас: 1) Ускорение компиляции и линковки (т.к. компилятор не будет учитывать файлы в хидере при компиляции других объектников) 2) Скрытие реализации (т.к. в файле заголовочном указываешь только необходимые данные).
>>645577 Не наступило. Пытаюсь вспомнить схему компиляции, но нет. Окей, хэдеры компилятор игнорит, где логика дальше?
Давай сначала. В хэдере объявляем класс с методами. В соответствующем cpp определяем. Компилятор собирает в объекты все cpp, включая определенные методы, игнорируя объявление класса в .h? Или вслед за хэдерами игнорирует и cpp с определением класса? В чём смысл?
>>645621 Он их не игнорит. Препроцессор вставляет содержимое хедера в .cpp файл. И компилятор работает уже с результатом. О хедерах компилятор ничего не знает.
>>645621 после того как препроцессор видит инклюд он в цпп фал вставляет содержимое хедера а компилятор потом компилирует цпп файл и понятия не имеет что там был инклюд
>>645621 Они подставляются препроцессором. Конкретно компилятору на них похуй - он компилирует и всё, подставляя только интерфейсы функций и тд, потом линкер всё это соеденяет.
>>645645 >>645632 >>645629 Да, я это понимаю. Но в чём скрытость реализации в этих процессах? Я так понимаю, компилятор код ВИДИТ, программист ТОЖЕ. Непанимать(((
>>645659 1) Можно интерпретировать это как фактическое сокрытие - можно скомпилировать проект в .lib/.a и распространять только бинарник+хидер в комплекте; 2) Можно интерпретировать это как скрытие реализаций друг от друга (чтобы компилятор не лепил всё в одну кучу и можно было перекомпилировать каждый раз только изменённую часть, а не все 4 гб зависимостей).
char ☆f1(...) { char ☆s = new ... / тут формируется строка s / return s; }
void f2(...) { // в этой функции результат функции f1 присваивается char'овским полям в некой структуре mystruct=f1(...); mystruct=f1(...); ... }
Итак, сначала я вызываю f1, структура заполняется, а потом соответственно f2. Потом мне нужно удалить то, что я выделил для дальнейшей работы со структурой, но тут вылезает HEAP CORRUPTION DETECTED. Я уверен, что ранее нигде не удалял эту память до вызова этой функции.
Может ли это быть из-за того, что освобождаю память из-под строк размером 1 или 0? Хотя эта ошибка вылезает и при бОльших размерах строки.
Для выделения и удаления памяти использую new/delete, MS Visual studio express 2012
Вопрос к гуру linux и плюсов: когда есть смысл отгружать удаленные блоки памяти процесса обратно в физическую память компьютера (mallopt/trim threshold), это как-то влияет на фрагментацию? пробовал ставить нулевой трешолд, процесс задыхается под нагрузкой. Аллоцируются и удаляются блоки по 1-2 мегабайта, очень частно, в секунду в процессе проходит траффик около 9-10 гигабит. Велика ли вероятность при таком потоке данных поймать эффекты фрагментации памяти (и как их вообще ловить)? Если запилить собственный аллокатор который держит часто используемые блоки памяти в кэше, то вероятность фрагментации понижается?
Не очень понимаю о какой фрагментации ты говоришь. О фрагментации внутри виртуального адресного пространства? Вроде нет - у тебя всего 1gb данных по 2mb. О фрагментации физической памяти из-за больших страниц? Тут ты ничего не изменишь.
>>646699 Сори, сразу не въехал. А в чем проблема выделить заранее памяти на максимальный трафик и разбить его на участки размером с максимальный блок, раз у тебя минимальный блок 1MB? Потом запилить кастомный аллокатор в котором растасовываешь эти блоки куда надо. Правда, тут есть оверхед по памяти, в твоем случае, где-то 600МБ в худшем случае.
В эмбеддеде незаменим, ибо крестокомпиляторы ввиду своей сложности есть далеко не везде, в серьезном матане незаменим, почти все либы, вроде fftw, на нем написаны (хотя fftw транслирована на сишку из окамла), ну и зачастую гораздо продуктивнее (с точки зрения затрат по времени, деньгам и производительности кода) писать на связке с+высокоуровневый язык (с+python, c+java, c+ocaml), ибо ошибок меньше, писать проще, а реально оптимизировать достаточно только ограниченное количество узких мест.
Сам на работе переписывал проект с с++ на с+python, работать стало гораздо быстрее, кода меньше, ошибок и багов меньше. Правда там был лютый говнокод, но в любом случае сишка еще очень популярна и нужна, а быстрый с++ это все равно фактически обычный си, ибо контейнеры с переаллокацией и никакого raii.
>>646671 Ну так выдели себе чанк и пиши в него, ты бы хоть расписал, какие у тебя данные приходят. Редко когда на десктопе нужно заботиться о таких вещах, это должно быть что-то ну очень высоконагруженное.
Ну щас. Для огромного количества железа нет llvm, есть только компилятор, часто закрытый от вендора, который частенько не умеет в кресты. Это касается, например, большинства 8-битных контроллеров, всяких dsp и прочей экзотики. Для какого-нибудь арма или авр оно, конечно, может и есть. Хотя уже для 80196 я ллвм не видел.
>>646717 Вот в этом треде кто-то их путает и даёт не правильные советы. Сначала ассемблер, а потом про оптимизацию читал чтобы разобраться кто из анонов врёт.
>>646831 Можно делать глобальные переменные, но ограничивать их область видимости? Например в новом пространстве имён, а в функции писать int& a = ns::a; Чтобы их в функцию не передавать и при этом не засорять глобальное пространство имён? Не сильно на скорость повлияет?
>>646721 Данные идут с видеокамер (bayer), общий поток данных сетевой в секунду - 2,2 гигабита, потом этот поток преобразуется в bgr, т.е. 6,6 гигабит, по три канала на каждый входящий байт. Потом эти данные закачиваются на видеокарту и с видеокарты уже скачивается 2 гигабита. После скачивания данные прогоняются еще через один поток уже на cpu. За линуксовый сетевой стек опасений нет (он как мне кажется расчитан на куда большие нагрузки), но в своем коде я не очень понимаю стоит ли опасаться за гипотетическую фрагментацию виртуальной памяти при частом дерганье new/delete с блоками нескольких одинаковых размеров . Сейчас вроде бы решил вопрос собственным аллокатором который кэширует создание/удаление часто используемых блоков, но интерес остается - как вообще проявляется и отлаживается фрагментация виртуальной памяти в 64 битных процессах работающих 24/7.
Я всё правильно понимаю? Первая строка создается на стеке. Она удалится сама, когда уже не будет в области. Вторая строка. Указатель хранится на стеке, а сам объект string в куче. Нужно удалять самому, а потом присваивать nullptr на случай если случайно ещё раз удалю.
>>647337 >как вообще проявляется и отлаживается фрагментация виртуальной памяти в 64 битных процессах работающих 24/7.
Никак до того момента, пока виртуальная память перестанет влазить в физическую. Тогда начнутся постоянные page fault'ы или bad_alloc, когда своп закончится.
>>646720 Тормозить может на чем угодно же. На крестах тормоза часто бывают у перекатившихся с декларативных языков, которые не заботятся о мелочах и хуярят все в списках с десятками полномасштабных копирований за метод. Но тут и обратный эффект, на каком-нибудь хачкеле после крестов НЕКОМФОРТНО из-за того, что приходится душить в себе хорошую привычку не пессимизировать.
>>647491 Нет же. Класс строки автоматически её в куче размещает. Как и вектор. str это объект класс string созданный на стэке, а Hello записано в куче. А str2 это указатель созданный на стэки на элемент класса string созданный на куче.
>>647502 То есть если мы создаем объект первым способом, то у нас всё хранится на стеке (кроме того, что изначально в классе создается в куче), а во втором у нас вообще всё создается в куче кроме указателя?
>>647573 Ну написал хохол/бульбаш/шпрот/чурка не проверив вопросом, ну чо ты как дебил из соседнего треда, который руками все -t'sya -tsya зекача проверяет.
>>644656 (OP) ПРИВЕТ ЗК C++ умеет передавать реализацию интерфейсов в виде параметра в функцию? Например, как в джаве? Вот тут я набросал пример, и хотел бы провернуть то же самое в C++: http://pastebin.com/qdPW4dqb
>>647659 Ну вот допустим я хочу, чтобы при вызове метода askForWork() у меня какая-нибудь переменная увеличивалась на 1. Через лямбду этого сделать не получится, потому что когда она вызывается - все переменные создаются заново.
>>647672 Как это не пересоздаются? Я вызываю метод askForWork в бесконечном цикле. С каждой итерацией у первого рабочего должна увеличиваться некая переменная X на единицу. Если я буду писать int X = 0; X++ в лямбде, которая вызывается каждую итерацию, то переменная всегда будет равна единице.
В общем, вопрос снят. Насколько я понял, C++ не умеет как джава, да и создавать вложенный класс до вызова функции не слишком затратнее создания его прямо в вызове функции. Остановлюсь на этом.
Итак, зеканы, есть алгоритмическая задачка. не лаба, свой спортивный интерес Есть иерархия: город (всегда один), улица (много), номер дома (много), квартира (много). У номера дома есть почтовый индекс, а у квартиры есть тип (комуналка, однушка, и тд). Каждый элемент обязательно имеет имя и численный индекс. Нужно создавать некий направленный граф, чтобы потом получать полный адрес (обход в глубину). Как всегда, минимум памяти и максимум быстро.
Решение у меня есть. Но хочется услышать разные мнения.
>>647747 1. Нужно строить такой граф Добавить улицу, к ней добавить дома, потом квартиры. 2. По набору индексов нужно получать полный адрес улицы или дома или квартиры
>>647784 Сука, блядь. Опять приплыли строители алгоритмов. Сделайте себе отдельный загон и поритесь в очко там, пидорасы. Выебал бы всех вас в жопу, алгоритмщики ёбаные, пиздец!
>>647792 Когда-то Струструп выступал на конференции, посвященной C++. Речь в его выступлении шла о разных контейнерах в STL и о том, насколько важно использовать структуры данных, подходящие под конкретную задачу. В какой-то момент в аудитории начал возмущаться один разработчик, мол нахуя так сложно сделали и какого хуя он вообще должен думать об таких вещах. Страуструп ему в ответ: "Конкретно вы можете использовать просто std::vector".
Кутешнички есть? Вот как такого типа контекстное меню всплывающее нужно, в котором можно напихать два лайн-эдита. QToolTip подойдет для этих целей? Было бы круто, если бы она сама подгонялась под границы экрана и не выходила за них.
Я знаю, что вы устали от моих глупых вопросов, но всё же напишу. Когда мы передаем указатель в метод он копируется? Указывать он будет на ту же область в памяти, но будет ли это тот же указатель?
>>648178 Ты не понял вопрос. Данные мы можем передавать по адресу и по значению. Когда мы передаем по значению у нас данные копируются на стек. А что происходит, когда передаем по адресу?
>>648198 Адрес закидывается в регистр процессора и поток выполнения смещается на адрес вызванной функции. Короче, скачай книжку по ассемблеру и ковыряй свои хэловорды в отладчике, если хочешь что-то понять.
>>648208 > ковыряй свои хэловорды в отладчике У меня от этого манямирок рухнул. Всё оказалось совсем не так как я представлял. А потом ещё и память посмотрел. Оно там совсем всё криво хранит. Для оптимизации наверно это сделано.
>>648260 Это не говно. Непонимание того, как работает компьютер - признак говнокодера, такие, увы, встречаются и среди крестовиков. Конкретно понимание ассемблера дает возможности отладки и фикса багов, от которых говнокодер упадет в обмарок и не очнется. Это дает возможность взламывать софт самостоятельно. Это дает возможность самому построить защиту софта.
Я считаю, что любой нормальный программист на крестах должен неизбежно к этому прийти сам.
В самом общем случае, это будет зависеть от архитектуры процессора, компилятора и calling convention.
Для x86 аргумент функции (т.е. в данном случае указатель размером 4 байта), как правило, будет загружен в стек инструкцией push перед вызовом функции, что в можно считать копированием, потому что стек является отдельной областью памяти, только особым образом организованной. Вызванная функция может достать этот самый указатель при такой организации только из этой самой области, куда он был скопирован.
Если в силу каких-то причин используются calling convention fastcall (явное указание программиста, оптимизация компилятора, один из первых трех аргументов функции на x64), то передача будет осуществляться через регистр. Можно ли это считать копированием? И да и нет, потому что формально копирование идет из памяти в регистр (временную рабочую ячейку), а не из памяти в память, но с другой стороны, функция опять видит копию.
На уровне языка можно считать, что указатель является именно копией, потому что при передаче указателя в эту функцию, изменений его как переменной не поменяет указатель, доступный из вызывающей функции.
>>648314 Потому что чтобы "я хочу, чтобы у каждого рабочего был свой набор переменных." нужно переменную скопировать в лямбду, то есть сделать [=]+mutable. А тут одновременно, вопрос, типа, а почему не [&] и это требование. Автор двух постов один и тот же, потому что написал "алсо" во втором.
>>648304 Учти еще, вышенаписанное мною применимо только в передаче указателя в функцию по значению. Можно передать указатель по ссылке или указатель на указатель. Тогда те же самые действия будут производиться не с самим указателем, а его адресом. Это дает вызываемой функции возможность изменить САМ указатель так, чтобы результат этого изменения был виден в вызывающей функции.
>>648353 Ну смотри, в компиляторе очень мощный синтаксический анализатор же. Он сумел уловить, что ты в треде путаешь -тся и -ться, и теперь включил режим защиты от даунов. Попробуй переустановить систему, тогда его кэш сбросится, и он снова будет считать тебя грамотным.
Господа, добрых суток. Qt-макака отчасти не по своей воли с недодипломом вновь врывается в тред. Вопрос вот в чем - нужно вывести 4 поля таблицы БД (их на самом деле больше, но нужны только 4). База со связами. Гугл говорит о разных вариациях (о всяких Item`ах рассуждений много, а также в выборе QTableWidget и QTableView), но я уже среди них успел запутаться и на данный момент имею такую кашу: http://pastebin.com/sD19pv7y (вырезано, ибо все держится пока в main, т.к. долбоеб)
(initialization вызывается в конструкторе)
База подключается, но ничего в QTableView не выводится. Просьба - подскажите, пожалуйста, годный вариант и/или где конкретно копнуть чтобы получить адекватное отображение/обновление.
Примеры документации видел, хочу пощупать на выходных, пока ищу альтернативные источники
>>648443 Если я правильно понимаю, база подключается (там на 30ой строке начинается if, ошибок не показывается, в статусбаре виджет цвет меняет). В базу самолично вписал пару строк, она точно не пустая. Но там и колонки не показываются.
Попробую вывести lastError и на момент подключения к сожалению, у меня проблемы с доступом к компу, поэтому до выходных набираю инфы
>>649022 У тебя будет ссылка на а из rect. Но если ты создашь ещё одну функцию похожую int& rect2() { int a = 10; return &a; }
но просто её вызовешь (не присваивая b), то у тебя значение в b станет равным десяти. Получается в b хранится адрес значения на стеке, но это значение может изменится при новых записях на стек.
>>649032 Я понимаю после выхода из rect система помечает память которую занимали объекты функции rect как свободную и при необходимости перезаписывает ее. При этом в ссылке b будет содержаться значение возвращенное rect до тех пор пока что-то другое не перезапишет ее
>>649051 Ну он не помечает ее как свободную. Просто stack pointer указывает на другую область в стеке. > При этом в ссылке b будет содержаться значение возвращенное rect до тех пор пока что-то другое не перезапишет ее Да. При компиляции у тебя должен быть warning возвращения адреса локальной переменной.
>>649133 >Да, UB. Но, в принципе, всё так и будет происходить на x86. Еблан штоле? Дальше ты ее передашь куда-нибудь, на место переменной залезет адрес возврата и привет remote code execution, йуху!
Напрягает одна вещь. В Widget'е находится QToolButton. При нажатии на тулбаттон срабатывает QEvent::FocusOut в филтере, я не мог понять, почему так происходит, но мне кажется я нашел хотя бы источник бед. А заключается в следующем: на каждое нажатие мышью по баттону вызывается сразу несколько QMousePressEvent (проверил через qDebug() в фильтре). Почему так может происходить с нажатиями и как с этим бороться? Код не мой, пытаюсь разобраться.
>>651023 Во-первых, тулбатон не чайлд, он просто находится внутри лайаута тултипа. Во-вторых, нужно как раз таки исключить срабатывание нажатия мышью по тултипу когда жмем тулбаттон. Или ты меня не понял, или я тебя, но пока не вяжется.
Я тот ньюфаг, что недавно начал учить С++. Такой вопрос, я иногда листаю вакансии, и там где указан С++, как правило, кроме знания ++ стоит еще понимание ООП. Я слышал что объектно-ориентированное программирование - это основная фишка ++ или я что-то не понял?
И еще, поясните что делает эта программа? Особенно в строчке: pl = pl pl; Я вывод сделал, оно выводит одинаковый адрес. Т.е. сама программа в этой строчке ничег не делает?
>>651243 Делает, но производит действия над значемнием по адресу а не адресом. Во второй строчке ты присваиваешь p1 адрес по которому лежит 42, после возводишь 42 в квадрат в следующей строчке.
>>651250 Cпасибо. Я, просто, недавно всё это изучаю. Пока мало что понимаю. Как я понял указатель - указывает на адрес объекта, но с ним можно производить операции. А ссылка - ссылается на значения объекта, и так же можно прободить операции.
>>651851 Согласен. Почитал повнимательнее об этой хуйне и всё понял. Кроме ссылков. Нахуя нужны эти ебаные ссылки, блджад? Они же только место занимают.
>>651851 Двачую милорда. Что ж ты делал, когда когда надо было ебашить std::unordered_map<LocationInfo, std::pair<std::vector<MyStruct1>, MyFuckingData*>> map() ? А ссылки - это всего лишь гарантия, что указатель будет не нулевой.
>>651928 x >> (sizeof (x) + ... 8 раз ... + sizeof (x) - 1). Получаешь знаковый бит как s. Дальше (x << 1) >> 1 - приводишь к модулю не помню точно деталей реализации >>, но если он сохраняет знак, то описанной тобой проблемы вообще нет, и можно сразу перейти к финалу. Дальше делишь сдвигами и складываешь с s << назад на то же расстояние.
Само беззнаковое деление не так тривиально как, скажем, умножение на 5, но там тоже можно зделать одним выражением без условий, ибо мы знаем размер инта, и можно просто явно написать все члены вплоть до момента, когда гарантированно делимое кончится. Будет в конце складывать с нулями, но зато все по условию. Алсо, подобная ебала очень неплохо описана в байтоебской библии за авторством Уоррена-младшего.
>>651980 Если быть совсем точным, 1/5 = 1/4-(1/16-(1/64-...)...) или сорта. Ну вот, отрезаем от этого ряда тот кусок, в котором знаменатели меньше sizeof(int), каждый член представляем битовым сдвигом и без задней мысли вычитаем. Получится длинное некрасивое выражение, но всего с тремя командами.
>>651892 >Поделите int на 5, используя только +, - и битовые сдвиги Хуй знает, башка болит и лень думать. mov eax, chislo xor edx, edx ; тут будет остаток shr eax, 1 ;делим на 2 adc edx, 0 ; сохранили остаток shr eax, 1 ; поделили на 2^2 adc edx, 0 ; прибавили остаток к сохраненному остатку sub edx, 5
Захожу, значится, я в цпп тред, посмотреть чем мещане живут, обсуждают ли преимущества C++11/14, ведь убогим наконец-то выдали обобщённые лямбды, вывод типов, замыкания и прочие крохи со стола элиты. Интересно было понаблюдать как сии говнари на них отреагируют. Так вот, захожу и... батюшки, вместо этого, быдло пригласило к себе на ужин измазанных в говне байтобомжей и после совместного распития портвешка стало с ними совокупляться, выкрикивая ассемблерные команды. Стыд и срам, господа.
Какая забавная картина. Борщехлебы собрались небольшой группкой за помойкой и пытаются выкладывать говном на снегу кусочки господских паст. В остальном же - ничего необычного, повсюду разбросаны пустые кастрюли из-под борща, а между мусорными бачками, обнимая треснувшую гитару, прикорнул совсем ещё юный говнарёк, по-видимому, немного перебравший для первого раза. К счастью, данное безобразие недолго оставалось незамеченным. Проезжавший мимо кучеp, спешивший на ярмарку лошадей, заметил подозрительное копошение и доложил о виденном ближайшему антиговнарскому патрулю. В считанные минуты все петордии были утилизованы эколочически чистым способом (без выделения парникоборщового эффекта), за исключением упоминавшегося юнца, который был отправлен в хлев в качестве известного эксперимента. Результаты и на сей раз превзошли ожидания. После воспитательного курса подопытный начал слушать IDM и даже записался в штат прислуги господского дома грузчиком ящиков с элитными напитками. Единственная замеченная странность - частые неконтролируемые движения головой (возможно, имитация сотрясания патл), но это уже детали.
>>652286 просто твое т.н. "по-настоящему благородное" хуйня для аутистов и шизоидов, без смысла и профита - занятие для больных людей, ошибок природы, которые без мамки даже в туалет сходить не могут понятно, что такая штука как жизнь для них слишком неподъёмна, они в ней не имеют никаких скиллов, вечно проигрывают, поэтому вместо неё они эскапируют во всякую асбтрактную шизофреничную парашу
Шо ета за хуйня? Надо получить содержимое веб-страницы, нашёл примерчик на rsdn с wininet, сервер (вертиго, ёба) включил на компе, и делаю запрос к .txt файлу - всё ок (пускай будет abc123), меняю содержимое файла(на 321cba), делаю опять запрос - текст старый (т.е abc123) а в файле 321cba.
>>652568 Учитывая что код гуя на Qt на любом языке будет аналогичен, а ебаться с привязой одного к другому надо – хуйня идея.
>>652573 > но похоже для цпп это слишком сложная задача. Нельзя просто взять и воспользоваться готовым. Ты интерпритаторы скриптовых языков тоже сам пишешь?
>>652581 >>652583 Это все равно ещё один уровень абстракции и только увеличит работу. Так же тебе кроме обычного Qt (на 20-30+ мб в зависимости от потребностей) придется тащить ещё буст (с 3-х часовым билдом и наслаждаться отладкой этого чудища) и интерпретатор питона.
А выиграешь ты от этого всего нихуя – синтаксис UI кода заменится на питон, с сохранением всего остального.
Хз нахуй нужен промежуточный склеивающий язык между C++ фреймворком и C++ кодом.
>>652657 Ты ж дебилоид. Криптоалгоритмы в конце разработки должны быть вообще реализованы на железе, а там уже vhdl и ассемблер, нахуй. Ты тупое животное, бугуртящее от своей невостребованности, пытаешься просунуть свой говнохаскель даже туда, где он нахуй не нужен.
>>652658 Теперь прочитал код. Все числа положительные и маленькие, значит можно писать unsigned short. За каким хуем ты дублируешь переменные в функции? Деление на 8 можно заменить битовым сдвигом, потому что см. пункт 1. И вообще. Абсолютно охуительного кода не существует нигде. Кроме Мелкомягкой компании.
Хачкельмрази лучше бы алгебраическую теорию чисел в рашке поднимали. Сейчас в стране победившего петросяна такая обстановка в науке, что на защите диссера маразматичные деды тебя хуесосят, потому что считают, что размерности дивизоров и границы Серра - это какая-то хуета. Картошку ж гомологиями не пожаришь, а вот в СССР только так высчитывали при помощи рядов нагрузки на балки! Этих мразей надо задавить алгеброй, чтобы они порвались от вездесущих категорий и модулярных кривых.
>>652610 >Тебе не сделать лучше чем есть. посмотри на куклочан
>>652614 >Но у этого господина свои шизо-закидоны в теории, ядро портабельно и можно не только клиент делать, а и какую-нибудь статистику-хуистику-лингвоанализ
>>652678 Лол, до того убогая страна, что проектировщики реактивных двигателей получают 11 000, а продаваны дорогих автомобилей обвариваются в бабле как свиньи.
>>652671 >значит можно писать unsigned short. >Деление на 8 можно заменить битовым сдвигом, потому что см. пункт 1. блять, разработчики процессоров суют тебе в ебло div, а ты говоришь -"НИТ Я ХАЧУ ЖРАТЬ ГАВНО))" Если конпилятор с каким нибудь -O3 уже не сделал это за него. >Кроме Мелкомягкой компании. Ты совсем поехавший?
>>652683 >Если конпилятор с каким нибудь -O3 уже не сделал это за него. Вот за это и не люблю кресты. В си и хаскеле хоть понимаешь во что код компилируется.
Еще Карл Маркс говорил, что не должно быть такого, когда продажники и рекламщики зарабатывают больше, чем создатели. Но нет, забили хуй на Маркса, и теперь гниды с талантом убеждения и впаривания живут лучше ученых и инженеров.
Посоветуйте развернутое чтиво о том, на что влияет memory ordering из нового стандарта на уровне оптимизаций, проводимых как конпелятором, так и вычислительным блоком на лету. Читал concurrency in action, но метафоры о чуваке с блокнотом, который отвечает по телефону меня не удовлетворили.
>>652699 Марксизм не подразумевает собой уравниловку. Можешь иметь какие угодно доходы за счет продажи результатов своего труда. Нельзя продавать результаты чужого труда (практически всегда подневольного за счет экономического принуждения к труду под страхом безработицы), забирая разницу себе
>>652687 В си оптимизатор работает так же с математическими операциями, лел. >и хаскеле Удачи. Прям пишешь и видишь во что твои монадки разворачиваются, как gc себя поведёт. >>652736 >В чем это выражается? В том что старый оп по неделе забивал на перекаты?
>>652752 Руководитель — управляющий, такой же наемный работник, чей доход при фиксированном окладе тоже является трудовым и определяется рынком труда. Инвестор — тут надо определиться с тем, что обозначено под этим понятием. Если это управляющий, который распоряжается чужим капиталом, принимая решения и, занимаясь тем самым трудом управленца — см. руководитель. Если ты имеешь в виду самого владельца капитала — это грабитель.
>>652765 Ты втираешь какую-то дичь. Вот допустим собрал я народ, придумал идею, трачусь на остальные расходы и тд. И теперь главное - если я получаю больше уборщика - я грабитель.
>>652774 У государства. Решения принимает все равно наемный управляющий, так, как минимум, не один ли хуй тебе, поидет прибыль владельцу капитала или в бюджет
>>652772 Распространенная ошибка, связанная с тем, что в "малом бизнесе" одно лицо является как и управляющим, так и владельцем капитала. В таком случае его доход складывается, соответственно, из трудовой и нетрудовой частей.
>>652778 Действительно, какая разница - ты будешь строить дачу где нибудь в Шотландии, или какой нибудь Аркадий Акакич работающий бухгалтером в мухосранской госконторе. Именно поэтому социализм и отсосал капитализму.
>>652791 В манямирке и текущие депутаты и судьи с домами на рублёвке не получают ничего кроме фиксированного оклада. И в совке получали разве что при Сталине давали тащить только самой илите вроде Берии.
>>652794 Государственная власть есть институт для обеспечения господства правящего класса. Текущие депутаты и судьи несут службу капиталу и сами являются тесно сращенными с капиталом. Это и есть капитализм не в манямирке.
>>652796 >Государственная власть есть институт для обеспечения господства правящего класса
В твоем охуительном сценарии правящий класс и будет государственной властью. Собственно, и в капитализме, и в социализме это так и есть на практике. Только в социализме утрачивается даже мизерный шанс того, что некий умный человек начнет накапливать капитал и делать то, что хочет он сам. По сути, идеи марксизма разбиваются о простую данность - конкуренция между существами является механизмом эволюции и у людей эта конкуренция вылилась в обладание деньгами или властью.
>>652823 1) У тебя, помимо этого, при капитализме несравнимо больше шансов на то, чтобы лишиться здоровья (это сразу пиздец), жилья или сразу жизни, поскольку ты представляешь собой раба и пушечное мясо капитала. >>652823 >>652829 2) Это так. Поэтому социализма быть не может, поскольку он представляет собой положение неустойчивого равновесия.
>>652859 Попробуй, поржем. Накопишь ты в лучшем случае на сраную пиццерию или мини-бодишоп, а жизнь мелкого капиталиста сурова. >>652863 Тут я ничего не могу сказать. Классики марксизма великолепно описывали законы, по которым действует капиталистическое общество, но никто не описывал, как строить иное. У большевиков для теоретических метаний не было ни времени, ни ресурсов, они решали ситуационные задачи форсированной индустриализации и построения автаркии для выживания во враждебном окружении и вытягивания населения из совсем уж африканского говна. После создания ядерной бомбы, и, тем самым, решения задачи обороны, был шанс на демилитаризацию и либерализацию, но усатый умер, а его наследники сразу же устроили грызню и начали путь к реставрации капитализма.
>>652897 У тебя же вообще сплошная неграмотность, как ты собираешься быть капиталистом, если ты не понимаешь принципов работы капиталистического уклада и, тем самым, своих классовых интересов?
Анон, куда на крестах можно вывести результаты SQL запроса? Требуется некая таблица. Пробую делать такое this->dataGridView1.Rows->Add(row); а мне выдаёт ошибку 'int System::Windows::Forms::DataGridViewRowCollection::Add(...cli::array<Type,dimension> ^)' : cannot convert parameter 1 from 'MYSQL_ROW' to 'System::Object ^' 1> with 1> [ 1> Type=System::Object ^, 1> dimension=1 1> ] 1> No user-defined-conversion operator available, or 1> Cannot convert a native type to a managed type.
ДОБРО ПОЖАЛОВАТЬ В C++ ТРЕД, MOTHERFUCKER!
1. Почему стоит использовать именно C++:
- C++ действительно быстрый - по скорости уделывают любой язык, часто - с большим отрывом. Замедление относительно C находится в районе 0-20%. Замедление зависит от вас - девиз языка: "Платишь только за фичи, которые используешь".
- C++ - очень выразительный язык. В него заимствованы большинство существующих парадигм из всех популярных языков.
- У C++ очень большое и, самое главное, профессиональное комьюнити. Это так из-за высокого порога вхождения.
Однако, C++ очень сложный. Прямая работа с памятью и тысяча способов выстрелить себе в ногу - это про него. Не стоит его использовать всегда: нужно понимать, что используемый язык должен соответствовать поставленной задаче. Да, анон, не стоит писать на C++ скрипты или веб-фронтенд, а потом жаловаться, что C++ говно. Плохому танцору и ноги мешают, как говорится.
2. Литература для начинающих:
Все примерно одинаковой годноты, читать имеет смысл только какой-нибудь один, который больше приглянется.
- Стэнли Липпман, Жози Лажойе и Барбара Му - Язык программирования C++ (2014) - https://goo.gl/kVaela
- Стивен Прата - Язык программирования C++ (2012) - https://goo.gl/z7kA8u
- Бьерн Страуструп - Программирование. Принципы и практика использования C++ (2011) - https://goo.gl/nAFUXa
3. Литература для тех, кто осилил предыдущий пункт:
Книги про основные подводные камни. Следует пролистать все.
- Скотт Мейерс - Наиболее эффективное использование C++ (1996) - https://goo.gl/tHa0tO
- Скотт Мейерс - Эффективное использование STL (2002) - https://goo.gl/QtS8Dc
- Скотт Мейерс - Эффективное использование C++ (2005) - https://goo.gl/wsDXGz
- Герб Саттер и Андрей Александреску - Стандарты программирования на языке C++ (2005) - https://goo.gl/Cpk4YR
- Скотт Мейерс - Эффективный и современный C++ (2015) - https://goo.gl/Im8VYQ
4. Наиболее детальные описания языка:
- Бьерн Страуструп - Язык программирования C++ (на ангельском) (2013) - https://goo.gl/XkAiOX
- Николаи Джоссатис - C++. Стандартная библиотека (2012) - https://goo.gl/PEyiMH
- Стандарт 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/n4567.pdf (черновик)
5. Ньюансы проектирования на C++:
Следует пролистать все перед переходом от лаб к написанию настоящего софта.
- Ален Голуб - Веревка достаточной длины, чтобы выстрелить себе в ногу (2001) - https://goo.gl/fBmuxp
- Андрей Александреску - Современное проектирование на C++ (2002) - https://goo.gl/e1V5BC это - квинтэссенция ГИБКОСТИ, поэтому стоит прочитать в любом случае, чтобы охуеть от того, как можно делать.
- Джеймс Коплиен - Программирование на C++ (2005) - https://goo.gl/Y1WGdU
6. Тонкости языка (для гурманов):
- Герб Саттер - Решение сложных задач на C++ (2002) - https://goo.gl/iWaa6S
- Герб Саттер - Новые сложные задачи на C++ (2004) - https://goo.gl/4nn512
7. Годные ресурсы по C++:
- Годный блог, в котором все просто и понятно тян не нужны кококок борщ - http://alenacpp.blogspot.ru
- Блог с хорошо расписанными фичами новых стандартов - http://scrutator.me
- Краткие описания библиотечных функций и контейнеров - http://ru.cppreference.com/w/ или более подробно на ангельском http://en.cppreference.com/w
- Блог Герба Саттера (на ангельском) - http://herbsutter.com
- Блог Скотта Мейерса (на ангельском) - http://scottmeyers.blogspot.ru
- Блог еще одной тянки, много о Qt и оптимизации (на ангельском) - https://katecpp.wordpress.com
- Куча других блогов (на ангельском) - https://www.quora.com/What-are-the-best-blogs-on-C++
- Большой FAQ по C++ (на ангельском) - https://isocpp.org/wiki/faq
8.Видеоуроки: (для совсем уж ленивых пидорасов)
- Видеокурс на тытрубе - https://www.youtube.com/watch?v=atVgLRzl3rI
- Еще один - https://youtube.com/watch?v=MOpF5lk3cLY
- Среди прочих есть несколько курсов по C++ - https://stepic.org
- Видео с CppCon (на ангельском) - https://youtube.com/user/CppCon/videos
9. Куда писать код:
- Кроссплатформенные IDE: QtCreator, Eclipse CDT, CLion (Платно, но зато энтерпрайз. Легко сбрасывать пробный период, также можно купить на торрентах)
- Только на Windows: Microsoft™ Visual Studio®
- Только *nix: Компилим через консольку с помощью clang или, в крайнем случае, gcc (если хочется смотреть на охуительные мессаги)
- Для тех, кто капчует с домофона: http://ideone.com
10. Code Quality:
- CppCheck. Статический анализатор, который умеет находить в коде ошибки и неоптимальные места. Швабодный. Есть плагин для Visual Studio. - http://cppcheck.sourceforge.net
- Clang Static Analyzer. То же самое, но встроено в одноименный компилятор. Активно пилится Google и Apple. - http://clang-analyzer.llvm.org
- PVS-Studio. То же самое, но энтерпрайз. Для пиара пишут годные статьи. - http://www.viva64.com/ru/pvs-studio/
- Visual Leak Detector. Детектор утечек для Visual Studio. Предельно прост в прикручивании - https://vld.codeplex.com
- Google Sanitizers. Гугловские утилиты для поиска утечек, дедлоков, гонок, неинициализированной памяти и некорректного доступа - https://github.com/google/sanitizers
- Valgrind. То же самое, но медленно.(Очень. По сути, это - виртуальная машина) http://valgrind.org
11. Годные библиотеки:
- Standard Library. С недавнего времени(С++11) стала годнотой. Например, теперь можно писать кроссплатформенный распределенный код, не подключая boost. Что очень хорошо. Кстати о бусте.
- Boost (http://www.boost.org) - бесспорно, самый популярный набор C++-библиотек. Воистину всеобъемлющий, boost способен удовлетворить твои самые скотские фантазии. В нем есть практически все - от математических функций до сетевых компонент, от инструментов тестирования до динамических типов. Функции для работы с твоей мамашей там тоже есть. Разумеется, все это швабодное и работает на любых платформах. Boost является своеобразным инкубатором хороших библиотек, поэтому наиболее удачные из них с большой вероятностью можно будет увидеть после принятия очередного стандарта уже как часть стандартной библиотеки.
Недостатком boost можно считать его размер - более 300 мегабайт. Большинство компонентов boost не являются независимыми, и попытка использовать один единственный контейнер обернется фактическим подключением 2/3 всего присутствующего в комплекте. Таким образом, если boost не будет использоваться на полную, лучше юзать другие, более специализированные библиотеки.
- Qt (http://www.qt.io/) - свободный кроссплатформенный фреймворк-надмножество C++ под названием Qt. Он содержит довольно большое количество компонентов (для работы с сетью, базами данных, для юнит-тестирования и др.), но киллер-фичей и основным полем его применения являются возможности по разработке графических интерфейсов. Qt сам по себе, как расширение языка, предоставляет для этого более удобные средства, чем обычные библиотеки, а использование специализированных IDE наподобие Qt Creator позволяет в буквальном смысле собирать интерфейсы мышкой, а код писать только по существу.
Тем не менее, использование Qt нельзя однозначно назвать хорошей практикой. Во многом это уже не C++, а другой язык, со своими концепциями и паттернами. Qt-код требует дополнительного препроцессинга при помощи встроенных в Qt утилит (т.н. метаобъектная компиляция), поэтому не получится просто подключить Qt как обычную библиотеку и использовать свой любимый компилятор без дополнительного софта. Нельзя сказать, что это существенное препятствие, но есть мнение, что использование Qt нарушает дух C++, раздувает машинный код и порождает макак-любителей кодогенерации.
В настоящее время основные версии Qt - 4.8 и 5.х, полной обратной совместимости между ними нет как в пистоне, ага.
- И еще куча библиотек на любой вкус - http://en.cppreference.com/w/cpp/links/libs
Итого:
Вопросу по синтаксису идут на хуй.
Лабы идут на хуй.
"Как мне сделать Х на чистых крестах без библиотек" идут на хуй.
Все идут на хуй.
Хейтер сосет члены на пару со своей мамашей.
Старший брат:
Предыдущий: