"Здесь заточен народ неблагородный, Рождающий позорный говнокод, С дедами в диком байтоебстве сходный.
Весь сахар оверхедом он сочтет: Среди худой рябины не пристало Смоковнице растить свой нежный плод.
В невежестве порочный изначала, Ничтожный и до тактов жадный люд! Писать для них тебя бы запятнало:
Здесь, лишь увидев твой high-level труд, Отладчиком начнут в нем ковыряться, Которым байты каждый день ебут.
Пусть впредь в своем навозе копошатся. Пойдем же дальше - нас монады ждут".
TL;DR Читаешь https://goo.gl/kVaela, делаешь примеры и суешь в http://ideone.com, ошибки копипастишь в гугл, непонятное ищешь в предыдущих тредах, спрашиваешь в этом треде, если не нашел. Если тебя послали на хуй или не ответили, то ты спросил платину, читай предыдущие треды внимательнее. И прочитай FAQ, расположенный в следующих постах, в нем много полезного.
Унаследованная памятка:
Вопросу по синтаксису идут на хуй. Лабы идут на хуй. "Как мне сделать Х на чистых крестах без библиотек" идут на хуй. Все идут на хуй. Хейтер сосет члены на пару со своей мамашей.
Q:Почему стоит использовать именно C++? A: Ни один язык не идеален, но по совокупности киллер-фич C++ оставляет все остальные языки позади. Вот основные три: + C++ действительно быстрый - по скорости они вместе с C с большим отрывом уделывают любой другой язык. Замедление относительно C находится в районе 0-20% а в ряде случаев C++ оказывается даже быстрее, причем проявляется только при использовании высокоуровневых конструкций (в крестах ты никогда не платишь за то, чего не используешь). + C++ один из наиболее выразительных и мощных языков, позволяющий использовать большинство существующих парадигм. Его философия построена на минимальном ограничении программиста в выборе методов и инструментов простреливания ноги решения задачи. + C++ по-настоящему популярен. На нем написаны десятки тысяч приложений и миллиарды строк кода, о нем написаны сотни книг, он до мельчайших подробностей документирован и стандартизован. Используя C++, ты никогда не останешься без работы или поддержки комьюнити.
Q:Но он же давно устарел! A: Современный C++ весьма далек от языка, которым он был в 1998 году. В настоящее время кресты живее всех живых, их развитие движется семимильными шагами, а новые стандарты принимаются каждые три года, сохраняя при этом полную обратную совместимость с предыдущими. К сожалению, из-за обилия некачественной литературы по крестам, в которой игнорируются новые средства языка, бытует мнение о его "несовременности".
Q:Сейчас все пишут на %languagename, а кресты сосут у него! A: Нужно понимать, что используемый язык должен соответствовать поставленной задаче. Никому не придет в голову писать на C++ скрипты или веб-фронтенд, но лишь немногие языки могут соперничать с ним по разнообразию решаемых задач.
Q:Окей, я решил вкатиться. Какие же книги мне читать? A: Специально для тебя аноны /pr собрали уникальную коллекцию отборной литературы по крестам. Только лучшие книги, последние издания, без хуев! Выбирай категорию и обмазывайся:
Для нюфань: Учебники для начинающих. Все примерно одинаковой годноты, читать имеет смысл только какой-нибудь один, который больше приглянется. Стэнли Липпман, Жози Лажойе и Барбара Му - Язык программирования C++ (2014) - https://goo.gl/kVaela Стивен Прата - Язык программирования C++ (2012) - https://goo.gl/z7kA8u Бьерн Страуструп - Программирование. Принципы и практика использования C++ (2011) - https://goo.gl/nAFUXa
<устарело> Герберт Шилдт - C++. Базовый курс (2010) - https://goo.gl/qMLAFl <устарело> Роберт Лафоре - Объектно-ориентированное программирование в C++ (2004) - https://goo.gl/QvjR6x
Учимся не писать говнокод: Книги про основные подводные камни для тех, кто осилил предыдущий пункт. Следует пролистать все. Скотт Мейерс - Эффективное использование C++ (2005) - https://goo.gl/wsDXGz Скотт Мейерс - Наиболее эффективное использование C++ (1996) - https://goo.gl/tHa0tO Скотт Мейерс - Effective Modern C++ (на ангельском) (2015) - https://goo.gl/uImH0J Скотт Мейерс - Эффективное использование STL (2002) - https://goo.gl/QtS8Dc Герб Саттер и Андрей Александреску - Стандарты программирования на языке C++ (2005) - https://goo.gl/Cpk4YR
Тонкости языка (для гурманов): Андрей Александреску - Современное проектирование на C++ (2002) - https://goo.gl/e1V5BC Герб Саттер - Решение сложных задач на C++ (2002) - https://goo.gl/iWaa6S Герб Саттер - Новые сложные задачи на C++ (2004) - https://goo.gl/4nn512
Также для легкого чтения подойдет книжка c историей создания C++: Бьерн Страуструп - Дизайн и эволюция C++ (1994) - https://goo.gl/FqbPwo
Отдельные аспекты: Читать по необходимости. Энтони Уильямс - Параллельное программирование на C++ в действии (2012) - https://goo.gl/qJfBkD Николаи Джоссатис - C++. Стандартная библиотека (2012) - https://goo.gl/PEyiMH Дэвид Вандевурд, Николаи Джоссатис - Шаблоны C++. Справочник разработчика (2003) - https://goo.gl/0M4NpG Роберт Седжвик - Фундаментальные алгоритмы на C++ (2001) - https://goo.gl/4jwxSl (части 1-4), https://goo.gl/yDuQgG (часть 5)
Q:Хуле тут так сложно? Я открыл учебник, там какой-то ад! A: Попробуй учебники, изданные после 2011 года. Фичи последних стандартов не только добавили выразительности, но и серьезно упростили жизнь разработчиков. Теперь программировать на C++ стало проще, чем когда-либо! Это не отменяет необходимости прочитать несколько серьезных книжек, чтобы написать на нем что-то годное. Тем не менее, да, C++ это по-настоящему сложный язык. Его никак не получится выучить за 21 день, ну вот совсем никак. Более того, крайне нежелательно пытаться изучить его первым, если ты раньше вообще не программировал. С большой вероятностью это приведет к разочарованию и потере времени. Гораздо лучше будет начать с другого языка и базовых вещей алгоритмы, архитектура пека, операционные системы, а уже потом вернуться к крестам.
Q:Ты охуел? В этих книгах по тысяче страниц! Хочу коротких статей. A: Вот тебе блоги, факи, референсы и всякое такое:
Q:Я готов начать погроммировать! Куда мне писать код? A: Под шиндошс удобно использовать IDE Microsoft™ Visual Studio®. Базовую версию (2015 Community) можно бесплатно скачать отсюда: https://goo.gl/qgAAc6 (русская версия) или https://goo.gl/WIPW9L (ангельская версия). Чтобы начать писать код, нужно запустить Visual Studio, кликнуть "Файл - Создать - Проект - Пустой проект", после создания кликнуть слева правой кнопкой мыши по пункту "Файлы исходного кода", выбрать "Добавить - Создать элемент - Файл C++". Свои хэллоуворлды писать в этот файл, в дальнейшем можно добавить другие файлы и хедеры. Чтобы скомпилировать и запустить проект, нужно нажать "Сборка - Собрать решение", а затем "Отладка - Запуск без отладки".
Под *nix, как правило, уже предустановлен компилятор gcc (если нет, используй sudo aptitude install gcc), так что достаточно сохранить хэллоуворлд, набранный в текстовом редакторе, и выполнить g++ helloworld.cpp и ./a.out. Но удобнее установить какую-нибудь IDE, например, Code::Blocks (sudo aptitude install codeblocks) и работать в ней.
Еще у нас есть IDE, призванная похоронить Visual Studio пока не особо получается. Она стоит денег, но можно украсть почти не протухшую версию на торрентах или получить бесплатную лицензию по скану студбилета, если ты студент. Удобные свистелки и перделки присутствуют. Тормоза и баги присутствуют. Кросплатформенность присутствует - https://www.jetbrains.com/clion
Можно также не устанавливать ничего, а запускать свои хэллоуворлды на http://ideone.com, выбрав в левом нижнем углу язык C++14.
Q:Не буду я все делать сам! Подавайте сюда софт, который все сделает за меня и подотрет мне жопу! A: Без проблем:
Q:Мне надоело писать велосипеды, какие у вас тут популярные либы? Q:Нужно зделать %монструозная_хуйня_нейм, но я обосрался от одной мысли о написании ее с нуля, что же делать? A: Гляди сюда:
boost
Бесспорно, это самый популярный набор C++-библиотек. Не будет лукавством сказать, что C++ во многом обязан популярностью именно ему. Воистину всеобъемлющий, boost способен удовлетворить твои самые скотские фантазии. В нем есть практически все - от математических функций до сетевых компонент, от инструментов тестирования до динамических типов. Функции для работы с твоей мамашей там тоже есть. Разумеется, все это швабодное и работает на любых платформах. И да, boost является своеобразным инкубатором хороших библиотек, поэтому наиболее удачные из них с большой вероятностью можно будет увидеть после принятия очередного стандарта уже как часть стандартной библиотеки.
Недостатком boost можно считать его размер - более 300 мегабайт. Большинство компонент boost не являются независимыми, и попытка использовать один единственный контейнер обернется фактическим подключением 2/3 всего присутствующего в комплекте. Таким образом, если boost не будет использоваться на полную, лучше юзать другие, более специализированные библиотеки.
Литература: Ариндам Мукерджи - Learning Boost C++ Libraries (на ангельском) (2015) - https://goo.gl/b0gPN1
Qt
Существует швабодный кроссплатформенный фреймворк-надмножество C++ под названием Qt. Он содержит довольно большое количество компонент (для работы с сетью, базами данных, для юнит-тестирования и др.), но киллер-фичей и основным полем его применения являются возможности по разработке графических интерфейсов. Qt сам по себе, как расширение языка, предоставляет для этого более удобные средства, чем обычные библиотеки, а использование специализированных IDE наподобие Qt Creator позволяет в буквальном смысле собирать интерфейсы мышкой, а код писать только по существу.
Тем не менее, использование Qt нельзя однозначно назвать хорошей практикой. Во многом это уже не C++, а другой язык, со своими концепциями и паттернами. Qt-код требует дополнительного препроцессинга при помощи встроенных в Qt утилит (т.н. метаобъектная компиляция), поэтому не получится просто подключить Qt как обычную библиотеку и использовать свой любимый компилятор без дополнительного софта. Нельзя сказать, что это существенное препятствие, но есть мнение, что использование Qt нарушает дух C++, раздувает машинный код и порождает макак-любителей кодогенерации.
В настоящее время основные версии Qt - 4.8 и 5.х, полной обратной совместимости между ними нет как в пистоне, ага.
Несколько специализированных библиотек для часто встречающихся задач. Все маленькие, быстрые и простые в освоении: libcurl - сишная библиотека для работы с сетью (существует также curlpp - крестовая обертка для нее, но использовать ее не стоит, ибо разработка заброшена еще в 2009 году) - http://curl.haxx.se SFML - работа с графикой и аудио - http://www.sfml-dev.org FLTK - графические интерфейсы - http://fltk.org
Структура шапки переработана. Основной материал перенесен в FAQ, который был отделен от шапки. В самой шапке размещены краткие указания по вкатыванию для тех, кто не читает FAQ. Информация о boost расширена до отдельного подраздела. Добавлен подраздел о Qt. Добавлены видеокурсы. Новая структура подраздела о специализированных либах (теперь только простые и легковесные, остальные в каталоге по ссылке). FLTK добавлена. Casablanca убрана как слишком тяжелая.
>>587839 (OP) > >TL;DR Читаешь https://goo.gl/kVaela, делаешь примеры и суешь в http://ideone.com, ошибки копипастишь в гугл, непонятное ищешь в предыдущих тредах, спрашиваешь в этом треде, если не нашел. Если тебя послали на хуй или не ответили, то ты спросил платину, читай предыдущие треды внимательнее. И прочитай FAQ, расположенный в следующих постах, в нем много полезного. Слишком коротко всё в кучу и бесполезно. И вообще что ты наделал? Нельзя раскидать шапку по 3ём постам. Я в ахуе от таких изменений. #раньшебылолучше
В моей игре в классе GameState есть unique_ptr на World(который собсна за саму игру отвечает без ничего лишнего). В гуе GameState есть кнопка перезапуска игры, следовательно было бы неплохо просто переинициализоровать World. Вопрос в том, как корректно? world.reset(); world = std::make_unique<World>(args..) Вот так будет без UB?
У вас нет виртуальных функций в шаблонных классах? Пососите! Теперь я передаю лямбда-выражение в конструктор этого класса и всё работает! Как здорово я всех наебал!
>>587890 Там внезапно обнаружился лимит в 15000 символов. В прошлой шапке было 14 с лишним тысяч, так что куте бы не влезло уже. Да и анон просил убрать стену текста, так что мне показалось это разумным компромиссом между полнотой и удобством чтения.
tl;dr набросал на скорую руку, если кто допилит, буду рад поправить.
>>587941 Ахах))) Ты жалок и убог) Скобочки используют только русские, чтобы поставить смайл) Значит пошел нахуй, бендера))
(Автор этого поста был предупрежден.)
>>587928 Плюсы шапки в том что всё в одном месте. и не нужно среди двух сообщений искать нужный фрагмент пролистываюя их. Тогда может не сильно пока важную часть вынести только не на пастебин, а туда где можно 1 кликом по ссылки проходить вроде списка кнтг или блогов. Он же не меняется.
>>588022 >Когда стоит юзать inline? когда у тебя маленькая функция. Всего пару строк и жедательно без ветвлений. Но это рекомендация поэтому компилятор может скомпилировать твою функцию как обычную.
>>588024 Что? А в array или vector нельзя двухмерный сделать?
>>588022 инлайнить ли функцию компилятор решает сам. inline в c++ это директива для линкера, которая указывает что функция может быть определена в нескольких объектных файлах - по умолчанию попытка слинковать два файла с одной функцией вызовет ошибку, а с inline одно из определений будет выкинуто. так что inline надо использовать на всех функциях в заголовочных файлах.
АНОНЫ, МОЛЮ ПОМОЩИ! Осталось подправить всего одну функцию, уже который день ебусь с этими сортировками и структурами, все никак не доебусь.
Объясняю: Есть матрица структур (каждый элемент матрицы - структура включающая в себя 3 поля), пользователь вручную задает размер матрицы и забивает поля, в моем случае это фамилия, год рождения и стаж работы.
Задача программы отсортировать полученные данные ПО СТОЛБЦАМ и вывести отсортированную матрицу. Врывался в прошлый тред с этой задачей и меня успешно послали нахуй, ибо я вообще ничего не сделал. Сейчас же уже все готово, кроме ЕБУЧЕЙ СОРТИРОВКИ.
>>588074 >ешно послали нахуй, ибо я вообще ничего не сделал. Сейчас же уже все го В циклах i и j поменяй местами (в первом j во втором i). В std::swap убери .age
>>588074 >swap Ну сделай swap(arrWithDigits[j], arrWithDigits[j+gap]), без .age, в чем проблема? Это шаблонный метод, он будет работать, если твоя структура имеет конструктор копирования (а она имеет).
В циклах у тебя какой-то ад, надо делать вот так:
[code lang="cpp"] void sortShell (Worker data, size_t size, int delta = 1) //в delta передаем длину строки матрицы //в data передаем указатель на первый элемент очередного столбца //в size передаем высоту столбца { for (auto dd = (size / 2)delta; dd != 0; dd /= 2) for (Worker i = data + dd; i != data + deltasize; ++i ) for (Worker j = i; j - data >= dd && comp( j, ( j - dd)); j -= dd) swap (j, *( j - dd)); } [/code]
И вызвать эту функцию по очереди для указателей на элементы нулевого столбца твоей матрицы.
>>588128 Не обязательно, если определение не найдено в текущей единице трансляции, то компилятор просто проигнорирует директиву inline и вставит вызов.
>>588086 >Но он же давно устарел! Почему стоит использовать именно C++? Сейчас все пишут на %languagename, а кресты сосут у него! Читай это Вместо спойлера ссылка на пастебин с копипастой или список каких-нибудь популярных статей на эту тему
>Окей, я решил вкатиться. Что мне делать? Тут не только список кнги, а программу обучения расписать типа читай книги пиши код или как обычно советуют. А потом ссылки на книги/блоги/видеоуроки вынесеные на пастебин.
>>588126 блин дружище, вроде пояснил по-умному, но все равно не пойму как в твой код запихать мою матрицу структур. особенно непонятно что в функцию передаю, хоть и расписал, но оче тяжело. объяснишь подробнее на примере моего кода?
>>588131 Мне кажется, если убрать куски фака с заманухой и развенчанием мифов на пастебин, то они не будут выполнять свою функцию по привлечению ньюфагов, не?
>>588137 Ты в своем варианте пихаешь двумерный массив в алгоритм для одномерного и пытаешься сортировать строки в нем. Такое хуй перепилишь под сортировку столбцов, потому что элементы столбца не расположены последовательно. Я предложил представить всю твою матрицу как большой одномерный массив из последовательно записанных строк, а сортировку по столбцам обеспечивать тем, что шаг алгоритма будет не 1, а браться из delta равным длине строки. Таким образом, из всего большого массива будут браться элементы, кратные delta, которые и образуют один столбец. И алгоритм сортировки одномерного массива, который ты, подлец, стырил из википедии, будет работать практически без изменений.
>>588143 >выполнять свою функцию по привлечению ньюфагов А разве их функция не в том чтобы не спамили однотипными вопрсами? Много ньюфагов не привлечёшь, но и не надо. Сами захотят придут. Надо просто помочь и сделать удобную шапку.
>>588150 Ксати стишками самое место в начале шапке т.к. если бы там были не сташки, то из-за оп-пика текст бы чуть смещался и было бы не так удобно как теперь.
>>588146 Не, однотипные вопросы же обычно не про это, а по самому языку, где хранятся объекты и вот это все. От них нужно избавляться чем-то вроде пунктов в памятке, наверное. А пункты про место крестов среди других языков как раз, чтобы перебить хейтеров и не позволить им отпугнуть нюфаню до того, как он попробует. По крайней мере, я исходил из таких соображений.
>>588179 Нет. Тебе не надо ничего создавать, твоя исходная матрица, по сути, это тот же одномерный массив из последовательно записанных строк. Только у тебя тип Worker * [], а нужно просто указатель на Worker. Для этого достаточно взять указатель на самый первый элемент первого столбца и впихнуть его в предложенную мной функцию, это отсортирует все элементы первого столбца в твоей матрице, а остальные не тронет. Потом делаешь то же самое для указателя на первый элемент второго столбца, и так далее.
>>588191 Инапсуляция же. s из main виден только в main. Ты можешь объявить второй s внутри circle, не связанный с первым, как сказал тот анон. Или сразу возвращать значение выражения, как на твоем втором скрине. Или вынести объявление s из main в глобальную область видимости, тогда к ней будет доступ отовсюду.
Как сделать юнит-тест для Qt-говнокода, использующего сигналы, слоты и вообще EventLoop? Пробовал весь тест в новый QThread перемещать, а тот в stdout жалуется, что нельзя использовать EventLoop без QApplication.
>>588193 Спасибо, понятно расписал. Я сразу подумал, что использование одной переменной s не лучшая идея. Вот пример, который я пытался модифицировать под себя. Поправь, если не правильно понимаю, 11 строчка посылает значение lbs в функцию, а возвращаются уже оттуда kilograms, вроде ясно. Но откуда известно, что kilograms = kgs?
>>588203 Да я не тролю, серьезно пытаюсь вникнуть. Можешь не верить. Вот эта глава у лафоре мне сложной показалась, особенно вторая ее часть, так что буду перечитывать, пока не врублюсь!
>>588198 Из 11 строчки. У тебя видимо серьезные проблемы с пониманием синтаксиса функций и возвращаемых ими значений. Читай литературу из фака и не выебуйся.
>>588217 Да. А ещё тут ты потом будешь передавать в функцию структуры или указатели, а в паскале только с базовыми типами научишься работать. Это проще.
>>588218 Спасибо за доброту, анон! Про структуры и указатели я в курсе, они есть в этой главе, и вот там я очееень очееень поверхностно все понял, буду читать дальше. На паскаль не хочу.
>>587929 >>587929 Я думал об этом варианте. Набросал в деструкторах логгер, присваиваю новое значение указателю - все ненужные данные удаляются, прекрасно.
>>588024 Не, ты не понял суть его вопроса. Нужен контейнер для произвольно-мерной матрицы.
Да проще тебе ебало набить^W^W^W самому написать класс с выделением памяти и рекурсивным алгоритмом обращения по compile-time неизвестному количеству индексов количества такого-то.
>>588051 >инлайнить ли функцию компилятор решает сам. inline в c++ это директива для линкера, которая указывает что функция может быть определена в нескольких объектных файлах - по умолчанию попытка слинковать два файла с одной функцией вызовет ошибку, а с inline одно из определений будет выкинуто. так что inline надо использовать на всех функциях в заголовочных файлах.
Охуеть. Я думал инлайн это подстановка кода из функции в любое место, чтобы не тратиться на вызов функции.
>>587839 (OP) http://pastebin.com/ameqBHY9 анон помоги пожалуйста. не корректно работает программа, хотя код вроде бы правильный мне нужно создать массив, в котором находятся элементы, которые содержатся в двух множествах если общий элемент один, то всё верно, а если их несколько, то программа не работает, что не так?
>>588253 >для произвольно-мерной матрицы Возьми вектор, да добавляй туда что-хочешь. Потом обращайся по индексам, умножая на размерность. >самому написать класс с выделением памяти и рекурсивным алгоритмом обращения Иди в социальные сети хвастать знаниями баззвордов.
>>588131 >ать? >Тут не только список кнги, а программу обучения расписать типа читай книги пиши код или как обычно советуют. А потом ссылки на книги/блоги/видеоуроки вынесеные на пастебин.
Я вообще предлагал всю шапку на пастбины расхуячить, и даже не я один, но ОП-хуй, ценителем стихотворчества которого я являюсь, не хочет так.
>>588266 >Возьми вектор Можно вектор, можно std::unique_ptr Я бы лучше сделал std::unique_ptr , чтобы подчеркнуть, что вот мы создаём объект kXmXn например и никак не меняем его никакие размеры (а как ресайзить? По какой размерности?)
>Иди в социальные сети хвастать знаниями баззвордов. Я может много выпил, но если на этапе компиляции размерность матрицы неизвестна, как без рекурсии ты вообще реализуешь обращение к элементу матрицы? Уж просвети дурака.
>>588198 Ты указал, что переменной kgs надо присвоить возвращаемое значение функции lbstokg. Отсюда и получается, что kilograms == kgs, потому что функция как раз возаращает переменную kilograms.
>>588280 через 5 дней мы этот тред в бамплимите унисём и оп сделает. Но не на пастебин. Надо туда где можно быстро одним ликом пройтись по ссылке. Может на гитхаб? только не на свой. оп заведи фейковый гитхаб лол
>>588279 >pointer Я не понял, что тебе нужно. При чём тут пойнтер? Это даже не контейнер. >а как ресайзить? По какой размерности? Опять же зависит от задачи. Можно вставлять в вектор в конец строки. Можно какой-нибудь костыль написать. >как без рекурсии ты вообще реализуешь обращение к элементу матрицы Какая нахуй рекурсия для обращения к элементу?
>>588291 Ты вообще дурак, блядь? Я говорю, что надо сделать велосипедный контейнер, в котором на этапе компиляции не известен не только размер по количеству элементов, но и сама размерность матрицы.
>>588332 >>588019 >Нет в stl контейнера для матриц? Где это прочитал? мимо тот пидор который не дождался ответа и написал программу с массивами в си стиле
>>588338 По-моему, если это именно матрица(все элементы заполнены), то можно юзать vector и при добавлении "нового" элемента, добавлять не один элемент, а целый пласт (одной размерносью меньше, чем максимальная). То-есть, например, если добавляем новую размерность в 2D, то при добавлении одного элемента, нужно добавлять целый 2D слой и заполнять его нулями. Если новый элемент меньше доступных, то опять добавляем целый слой. А в векторе это будет просто insert в конец вектора при добавлении в последнюю размерность / insert в конец каждого пласта при добавлении в предпоследнюю размерность / insert в конец каждой строки при добавлении в предпредпоследнюю размерность и так далее. Ну, то-есть, просто в предыдующий цикл при переборе элементов.
Ну, а если это не матрица, а просто многомерная какая-то хуйня, то тогда надо ебаться с указателями на указатели и всё-такое.
>>588051 7.1.2.2 A function declaration (8.3.5, 9.3, 11.3) with an inline specifier declares an inline function. The inline specifier indicates to the implementation that inline substitution of the function body at the point of call is to be preferred to the usual function call mechanism. An implementation is not required to perform this inline substitution at the point of call; however, even if this inline substitution is omitted, the other rules for inline functions defined by 7.1.2 shall still be respected.
>>588371 Поставь QtCreator, не надо ебаться с этой студией. Алсо, майкрософтовский компилятор даже не соответствует стандартам C++11. Какого хуя его используют вместо gcc или clang?
Блять, как же я заебался. Что нужно: Накатить нормальную IDE (под Windows 8 всё) с нормальным компилятором, поддерживающим c++11 и подключить какую-нибудь либу для unit-тестирования. Что происходит: Устанавливаю Eclipse, устанавливаю minGW, Cygwin (разные сборки), устанавливаю GoogleTest либу, пишу хелло ворлд. Далее несколько сценариев: 1) Не компилится GoogleTest. 2) Не компилится вообще ничего. 3) Не поддерживается c++11.
Я уже второй день читаю stackoverflow, но так и не сумел наладить всё вместе. В этом сраном GoogleTest какой-то сишный код есть и нихуя блять не работает. Перепробовал разные компиляторы. Попробовал накатить другой релиз эклипса. Всё без толку. В сраном эклипсе еще ошибки какие-то вообще не информативные. Пиздец просто.
>>588410 Сейчас еще какой-то краш происходит из-за дебага. Просто запускаю - всё нормально. Запускаю дебаг - ошибка. Запускаю опять просто Run - ошибка. Хотя пол минуты назад работало.
>>588442 Завезли future, async, promise и move из важного. Все. Еще по слухам asio могут в c++17 завезти, но стандартная библиотека плюсов все равно бомжеватой будет.
>>588379 Там отладчик хуевый, блядь, платиновый спор итт, лол. >>588371 Ты скачиваешь инсталлятор, он должен сам все необходимое поставить, не? Он же не говорит ",net мне запили быстраблядь", он берет и ставит его сам.
По поводу шапки на гитхабе/вики и тому подобного. Я, конечно, могу так сделать, но вангую, что на порядок уменьшится количество прочитавших шапку. Серьезно, сравни количество прочитанных постов и количество переходов по ссылкам, когда ты скроллишь треды. Многие я, например читают только длинные посты, когда устал и лениво читать все подряд, ссылка тогда банально может затеряться. У питонистов, например, гляньте шапку на гитхабе, она мертвая вообще. Всего десять вотчеров, никаких действий и обновлений за последний месяц нет вообще.
И я таки не вполне понял, чем плох вариант с факом в верхних постах. Если проблема только в том, что посты с факом сжались и приходится скроллить по ним, то давайте я попробую перепилить так, чтобы они не сжимались, как с оппостом было, например. Или еще что-то придумаем давайте. Ну срсли, товарищи, я же не из тщеславия копротивляюсь, а хочу, чтобы максимальная польза анону была.
>>588520 Вынести не шапку надо, а фрагменты которые менять не планируются наример и которые короткий ответ на вопрос. И желательно без такхт долгий вступлений >Специально для тебя аноны /pr собрали уникальную коллекцию отборной литературы по крестам. Только лучшие книги, последние издания, без хуев! Выбирай категорию и обмазывайся:
К примеру >посоветуйте книг >выкбирай по этой ссылке >где используют кресты >вот тут всё давно пояснили и тут желательно ссылка на хабр или другую популярную статью, а не самописную пасту Так она вся в 15к постов влезет и остаётся полной.
Как называется это вид отношения? На примере, у меня есть класс Car, и в силу определенных обстоятельств, при создании Wheel, Engine, Pipe и т.п. мне нужно указывать на родителя(то бишь Car). Так вот, это аггрегация или как? И что еще более важно, Car существует в виде умного указателя, его же в конструктор других объектов и передавать, либо пытаться передать ссылку на объект, который стоит за указателем?
>>588338 А вот мой вариант! Сделать std::map, ключи которого будут std::tuple<int, int>, а значения - int, float или чего там ещё захотите. И ведь будет работать!
>>588608 Указываю тебе пройти нахуй. Возвращайся, как освоишь ссылки. Умные указатели, охуеть! Тебе лень написать delete? Те же ссылки - это умные укзаатели, которые удаляются при выходе из области видимости. Соси хуй.
>>588520 >Если проблема только в том, что посты с факом сжались и приходится скроллить по ним, то давайте я попробую перепилить так, чтобы они не сжимались, как с оппостом было, например.
This. Перепили чтоб без скроллинга. Скроллинг это хуже всего.
>>588673 >>588700 Вы чего, ёбу дали? Открываем документацию и читаем: A reference, like a pointer, stores the address of an object that is located elsewhere in memory. Ссылки удаляются вместе с объектом, то есть всё так, как я написал. Пиздец, кому я это объясняю.
>>588700 Хм, а если передать смартпойнтер - так вообще получится хуйня какая-то, Car владеет указателем на Wheel, а Wheel - на родительский Car, и если не удалить Car вручную, о ни один из этих объектов не освободится, ибо use_count обоих больше единицы будет всегда.
>>588723 Ты тред не попутал? Джава в соседнем, если что. Или давай конкретный пункт стандарта, где сказано про удаление вместе с объектом, или пиздуй туда, клоун, блядь.
>>588741 Еще как. Например, функция принимает указатель, первым делом проверяет его на nullptr, если все норм, то разыменовывает в ссылку и работает с ней, чтобы не писать лишних символов и случайно не изменить указатель в теле функции.
>>588741 > идиоматично? Ну а зачем тогда нужны указатели, если ты ссышь их разименовать? Почему по твоему шаред_птр может выдать указатель на объект, но не выдает ссылку? Дурачки библиотеку проэктировали? Просто ссылку в любой момент можно разименовать. Передавай в конструктор шаред_птр, в нем вытаскивай указатель и храни в ссылке. Можно даже просто указатель хранить. Это если твои части не имеют никакого отношения к управлению временем жизни Car.
>>588761 Cобственно ты повторил то, что я сказал. Или ты имеешь ввиду не увеличение use_count, а создание второго контрол блока(что происходит лишь в случае инициализации сырым указателем, или я чего-то не знаю?). В остальных случаях просто увеличивается use_count, насколько мне известно. >>588768 Вот такая реализация со ссылкой хуже, чем она могла бы быть с weak_ptr'ом? Я weak_ptr почти не юзал, не вижу преимуществ, они есть в данном случае?
>>588776 Если ты передашь wheel'у shared_ptr, то в конструкторе копирования увеличивается use count и еще вроде бы происходит синхронизация ибо это все вроде бы thread safe.
Оверхед на самом деле небольшой, ты же не будешь тысячи раз это делать в цикле, но все равно лучше обычными указателями делать там, где не нужна вся эта синхронизация и совместное владение, а то не ровен час у тебя такое и в каком-нибудь горячем коде появится.
>>588532 >И что еще более важно, Car существует в виде умного указателя, его же в конструктор других объектов и передавать, либо пытаться передать ссылку на объект, который стоит за указателем? Так ты 90% создаешь циклическую ссылку. Судя по всему, у тебя авто владеет двигателем и колесами. Значит при уничтожении Car должен уничтожаться двигатель, но не наоборот. Значит, в конструктор двигателя ты должен передавать или weak_ptr, или тупой указатель, или ссылку. Лучше всего weak_ptr конечно. А вот в Car должен лежать unique_ptr на двигатель и или колеса (вряд ли один двигатель будет шариться между разными машинами). Ну или shared_ptr, если шариться оно может.
>>588844 Ссылка МОЖЕТ быть nullptr. Поэтому когда в коде не видно, что что-то может быть nullptr - это очень вредно. Пишешь такой ., а там на самом деле ->, и пизда. Будешь хамить дальше, я ваш школотред покину - и ебитесь тут сами с собой, школьники.
>>588831 Такс такс. С ссылкой я уже выше сделал, чем лучше с weak_ptr? По сути, в таком виде отношений, как ты и сказал, Car переживет всех своих членов, следовательно проверка expired Car'a излишняя, тащемта можно остановиться на ссылках. Не так?
-Ты не можешь съесть булыжник -Нет, смотри, могу. откусывает ломает зубы булыжник цел Видишь, булыжник можно съесть! -Но ты же его не съел. -Будешь хамить дальше, я ваш школотред покину - и ебитесь тут сами с собой, школьники.
>>588870 Это С++, детка. Основное know how тут не магические заклинания для аутистов (int v[10]; v[10000]=1000; мааам, он UB сделал), а опыт. Если ты еще и написал, что "ссылки сами удаляются", то просто иди нахуй.
>>588849 Я подумал, почитал SO и понял, что weak_ptr здесь никаких преимуществ не дает. Поэтому лично я за тупой указатель. Почему не за ссылку - миллион раз случалось так, что объект, который не может быть null, внезапно оказывается, что может. Типа двигателя, существующего без машины. В случае со ссылками, нужно всегда запихивать инициализацию в initializer list конструктора, что тоже не всегда хорошо. Ссылки я сейчас стараюсь использовать в основном для мелочей типа ostream& operator<<, а не в классах.
>>588847 >>588844 >>588804 МОЛЧАТЬ! ЧТО ЗА ХУЙНЯ У ВАС ТУТ? ОП ПОЯСНЯЕТ Можно сделать любой грязный хак и погрузиться в UB по ноздри, с этим никто не спорит. Речь идет о том, что правила хорошего тона заставляют программиста обеспечивать существование объекта, пока существует ссылка, а для указателей такого нет из-за легального значения nullptr. Если тебе дали ссылку, то ты имеешь полное право работать с ней как с корректным объектом, а все проблемы с его существованием/неравенством адреса nullptr - это проблема того, кто тебе ее дал. ЕМНИП даже сам факт видимости ссылки на некорректный объект является UB, поэтому все остается на совести создателя ссылки, он просто не имеет права ее никому отдавать, если там нет корректного объекта.
С указателями никаких гарантий нет. Если тебе дали указатель, ты обязан сам перед разыменованием гарантировать, что там корректный объект - проверить его на nullptr, использовать умные указатели и тому подобное.
В остальном (кроме вопросов корректности и разыменования) ссылки эквивалентны константным raw-указателям, никакой сборки мусора там нет и быть не может, тот, кто утверждал это - зеленый. Такие дела.
>>588889 Просто ссылка - это синтаксический сахар над указателями и, фактически, ссылка работает так же, как и указатель, но ее надо инициализировать при объявлении и нельзя переназначать. Даже код компилируется такой же.
>>588947 Слишком много кода, мне лень читать. Энивей тебе стоит переписать свой велосипед с использованием std::set, если ошибка не пропадет, то я гляну.
>>588967 Зачем джва раза size увеличиваешь? Алсо, "не работает" - очень туманное понятие, которое в сумме с лютой содомией в твоем коде далеко не помогают разобраться, в чем проблема.
>>588988 ну то есть когда в двух множествах содержится больше одного одинакового элемента, то всё равно в третьем множестве массив состоит только из одного элемента
>>589030 Вообще, в разных простейших примерах, когда хочется быстро скомпилировать код и объяснить суть, это вполне нормально, для того возможность включать целые пространства имен и пилилась. Проблема в том, что если ньюфагу об этом не сказали, то он запомнит МАГИЧЕСКУЮ ФРАЗУ в начале примера и будет так делать везде, а это неприемлемо.
>>589150 И да, печально, что практически нигде нет информации про best practices работы с пространствами имен, единицами трансляции, что можно писать в хэдере, а что нельзя, как вообще разбить по каталогам свой ебучий проект, когда он стал больше, чем laba2, ну и всякое такое. Приходится всем постигать это самим, набивая шишки.
>>589135 Откомпилировал на MinGW это http://ideone.com/x8AllP работает нормально, по сравнению с твоим изменено несколько строчек, из важных только 191 и 203. Проблема в твоей системе (компиляторе) наверное.
https://ideone.com/hWWZW5 Помогите пожалуйста разобраться. Мои тесты проходят, а на сервере нет. Результат чуть меньше чем надо выдаёт. программу пояснять или и так понятно?
>>589234 Нихуя не понял в твоём коде. Очевидное решение за N M (N + M): Проводим линию из (0, 0) в (x, y), подсчитываем профит за N+M. Всего нужно перебрать 1600 вариантов (x, y), вроде бы не так много.
>>589259 >Всего нужно перебрать 1600 вариантов (x, y) При любом размере n и m?
>Если у тебя что-то умнее, то объясни. line принимает размер поля и шаг. Шаг на пике 3 красным. if(l==k) то рисует зелёные точки иначе красные. Линия делается пока не дойдёт до края и сначала сверху вниз потом с лева на право. Поэтому 2 вайла. И в main фор перебирает длину шага. Пробовал длину шага от 1 до максимальной из сторон перебирать, но тоже не работает. И в отрисовки где-то ошибка т.к. ответ занижен.
>>589280 Поясни мысль. Каждый угол наклона имеет примерно уникальный набор квадратиков, которые прямая пересекает. Как ты предлагаешь кешировать? (в моём понимании динамическое программирование = рекурсия + кеширование)
>>589282 Ну, ты понял, что тебе нужна функция line(0, 0, x, y) которая выдаст тебе сколько очков соберёт линия, которая проходит через две точки (0, 0) и (х, у), и в качестве (x, y) перебрать все узлы сетки, а не только те, что снизу.
>>589287 > и в качестве (x, y) перебрать все узлы сетки, а не только те, что снизу. А понял. Но это не оптимально т.к. прямые из 0;0 в 1;1 и 2;2 одинаковые. Из 0;0 1;3 и 2;6 тоже одинаковы.
>>589294 Нет, тут можно обойтись целыми числами. Представим, что у нас линия идёт не вниз, а вверх. Уравнение прямой, проходящей через 0 0 и (a, b) такое: y = (b / a)x. Клетка (k, l) пересекается прямой с тангенсом (b / a) если l/(k + 1) <= b / a <= (l + 1) / k Значит, в каждой строчке нам нужно найти все клетки у которых это неравенство выполняется. Идём в первую строчку, находим группу стобиков, для которых это неравенство выполняется. После этого идём во вторую строчку. Мы можем начать перебор уже не с нуля, а с первого столбика с предыдущей строчки, для которого неравенство выполнялось. (потому что линия не может изогнуться налево уже) Как-то так. В неравенстве умножь просто обе стороны и не будет дробей.
>>589314 О, я придумал быстрее алгоритм. Пускай каждому тангенсу соответствует ячейка в массиве в 1600 элементов. Причём, этот массив отсортирован по значению тангенса. Потом бежим по каждой ячейке поля, видим: клетка (k, l) столько-то очков. Нужно прибавить всем тангенсам, которые между l / (k + 1) и (l + 1) / k это количество очков. Это делается деревом отрезков, например. После этого тупо бежим по дереву и находим тангенс с максимальным значением и выводим его.
>>589324 >l / (k + 1) и (l + 1) / k Почему туда? Не совсем понял алгоритм? Если тангенс меняется, то и какие-то клетки нужно отнять, а не только прибавить.
>>589335 Ещё немножко упростил алгоритм: нам нужно уметь быстро отвечать на вопрос: сколько профита между таким-то и таким-то тангенсом. Для этого заведём массив, в которм будет сказано: сколько профита под таким-то тангенсом (<=). Его можно посчитать за NM log(NM) (частичные суммы), пускай он будет зваться under Ещё возьмём массив, где будет ответ на то сколько профита с таким-то тангенсом (==) пускай будет equal После этого нам просто нужно найти такой индекс i, что under - under[i - 1] + equal[i - 1] максимально. Это делается за NM. Собственно, это и будет ответ. Искомый тангенс x: under <= x <= under[i - 1].
>>589353 Каждая клетка на карте имеет два тангенса: [l, r] Если некоторая прямая имеет тангенс x такой, что l <= x <= r, то прямая получает профит. Имеем прямую с тангесом x. Суммируем профит всех клеток, у которых x <= r. После этого отнимаем профит всех клеток, у которых x < l. Для этого нужно посчитать массив, в котором будет говориться сколько профита у клеток с r <= t_i где t_i - итый тангенс. После этого нужно посчитать массив, в котором будет говориться сколько профита у клеток с l < t_i, где t_i - итый тангенс. Дальше понятно?
Всё, я придумал самое понятное объяснение решения этой задачи. Представь, что каждая клетка это магазинчик. У магазинчика есть время работы. Например, магазинчик (k, l) открывается в l / (k + 1), а закрывается в (l + 1) / k. У каждого магазинчика есть количество денег в кассе (профит клетки). Теперь задача перефразируется так: вам даны расписания кучи магазинчиков. Вы можете остановить время в некоторый момент и пойти обворовать все кассы открытых магазинчиков. Найти самый удобный момент для ограбления. То есть тангенс это время, а линия, идущая через клетки - это мы остановили время и бежим грабим все открытые магазинчики. Как решать задачу про магазинчики - сортируем события типа (открылся магазинчик) и (закрылся магазинчик) по времени, а потом идём и держим в памяти текущий профит. Если магазинчик открылся, прибавляем его профит. Если закрылся, отнимаем. Максимальный профит, который мы держали в памяти - ответ. Всё.
Допустим, у меня есть класс GeometryManager. Он нужен для того, чтобы хранить в себе все модели, и если мне понадобится загрузить 1 модель 10 раз, то я просто буду доставать её из кеша. Метод get(const std::string &name) даёт мне ссылку на нужный объект. Так что мне приходится создавать ссылку на эту модель в классе Object. И тут вопрос: что лучше, использовать ссылку или указатель? Я имею ввиду объявление в классе.
>>589451 Смотря как ты управляешь жизнью модели. Если выбирать между ссылкой и указателем то лучше ссылка, так как она безопасней, смысла в указателе нет. Возможно тебе стоит умные указатели использовать.
>>589451 Используй указатель если нужно что-бы модель отцеплять можно было. Если есть гарантия что объект по указателю не умрёт раньше чем объект его содержащий, то используй простой указатель, если такой гарантии нет, то std::shared_ptr.
>>589455 А почему у меня отваливается дефолтный оператор присваивания, если я завожу ссылку в классе? Или это из-за чего-то другого? Алсо, не хочу мусорить в коде умными указателями. Очень уж плохо они выглядят, как по мне.
>>589388 Сообщение, на которое ты ответил, и есть пруф этого факта.
С вертикальными, ты хотел сказать. Ну да, некоторые магазинчики закрываются в моментль (l+1) / 0, ну значит будет inf, больше всех остальных, после сортировки они в конец уйдут.
Ах, да. Ссылке нельзя ничего присвоить. Жалко, я думал обойтись без указателей. Может быть, есть способ отсортировать вектор объектов, у которых в классе есть ссылка? Или обязательно нужно менять её на указатель?
>>589473 Я не оче понял твой вопрос, но контейнеров ссылочных типов не бывает. Если тебе нужен контейнер и его сортировка, то используй либо указатели, либо std::reference_wrapper.
Вот тут в Object.hpp определена ссылка-член класса geometry. И когда я сортирую массив таких объектов в ObjectManager.cpp, у меня не компилируется и пишет, что удалён оператор присваивания. И я, кажется, понял, что нужно всё-таки использовать указатель. Может есть какой-нибудь умный указатель, который не даст очистить память, на которую он указывает?
>>589481 >>589487 Ды нет, он скорее всего имел ввиду отсортировать контейнер объектов по значению ссылочного объекта внутри. Хотя в таком случае вообще хуй знает, что непонятно.
>>589510 Он как раз создавался затем, чтобы пихать его в контейнеры, так что можешь. Проблема только в том, что operator. не перегружаемый, поэтому не получится юзать врапперы как сами ссылки, с точкой для доступа к членам. Придется писать & или get, получать из враппера хранящуюся в нем ссылку, а уже для нее ставить точку.
Еслы ты всё знаешь то текст по ссылке не читай - сразу отвечай. Если не знаешь нихуя, то не отвечай. Если хочешь, можешь ответить, только пасту прочти тогда Если не в курсе об auto, перегрузках, шаблонах, SFINAE, Concepts, то читай соотв. раздел: http://pastebin.com/hmVPBrBh
Поясните ньюфагу, необходимость наличия фреймворков и visual с++ yf на целевой машине обусловлена студией же? Или языковой платформой в целом? Какого хуя в общем? Поставил студию 15, наделал пробных проектов, на другой машине их не запустил, пока visual c++ 2015 не установил там.
>>589564 Мне не нравится вся эта движуха. Без олдовых SFINAE-концептов слишком упадет уровень магичности, а я обожаю писать чудовищные вещи на шаблнах, чтобы все охуели, как я могу. Ажтрисет. Раньше были норм метафункции на структурах, теперь ввели constexpr'ы и убили всю сладость метапрограммирования. Даже школьник теперь сможет сидеть и хуярить как на хаскелле. Ладно, я с этим смирился, constexpr'ы таки хорошая штука, но теперь эта хуйня, блядь. Охуевшие комитетские пидарасы хотят сделать из языка джаву, вообще пушка.
>>589610 Хотя если будет возможность не только проверять наличие метода, который можно вызвать с твоим набором параметров, а запилят полноценную проверку по сигнатуре и возвращаемому типу, то это стоит того, наверное.
>>589564 То есть, эта хуйня фактически просто расширит SFINAE с проверки сигнатур шаблонных функций на ошибки до проверки произвольного кода в requires? Тогда это сахарок, теоретически при помощи sizeof и т.п. можно впихнуть в сигнатуру что угодно без фактического вычисления. Другое дело, что впихнутое часто не работает из-за кривости компиляторов, но ведь и концепты завезут лет через десять в лучшем случае, лол.
>>589585 Вот этот >>589594 кун дело говорит. Еще ты можешь кинуть нужные дллки, которые установились вместе с redistr, в паку с экзешником на другом компе, все заработает. И еще можно пошаманить с файлом проекта и статически их линковать, тогда запускаться будет где угодно, но размер экзешника вырастет.
>>588368 ключевые слова: >implementation is not required to perform this inline substitution компиляторам абсолютно похуй, inline или нет. точно так же они игнорируют register в си. компилятору лучше знать, что надо поместить в регистр или заинлайнить, чтобы быстрее работало. >other rules for inline functions defined by 7.1.2 как раз про линковку.
>>588092 >>588264 >>588256 хотите еще охуительной инфы? вызов функции стоит абсолютно нихуя. предиктор в процессоре на первом вызове запомнит куда прыгнет call и на всех последующих вызовах инструкции оттуда сразу начнут подгружаться. польза подстановки кода в том, что компилятор может специализировать код функции под передаваемые аргументы (например, удалить ветки, которые 100% не выполнятся).
>>589649 Есть объект. У него есть массив контроллеровназовём их так. Контроллер может контролировать объекти правда. В методе update() объект запускает for_each по массиву контроллеров, в котором вызывает метод process(), принадлежащий классу контроллера. Вообще, контроллер - это интерфейс. Метод process() должен как-то работать с объектом(перемещать его, крутить, вот это всё). Как исправить эту архитектуру? Или всё в порядке и нужно пилить forward declaration?
>>589615 NVI же. Вот такое набросал, тут дохуя всего можно улучшить (засунуть прелюдию в макрос, придумать, как сделать несколько виртуальных методов в одном шаблонном классе и так далее), но идея понятна.
>>589641 Охуенно. >>589648 Шел бы ты отсюда, неосилятор. Здесь господа волшебники двухсотого лвла обсуждают важнейшие способы слепить троллейбус из хлеба.
Объясните!!! Эта фича только для бэкенд-разработчиков? Чтобы фронтэндщики могли использовать их библиотеку так, чтобы ничего не сломалось? Или нахуя оно нужно, если в своём коде я и так ориентируюсь? Для чего мне проверять, есть ли такой-то метод с такой-то сигнатурой, если я сам могу открыть код и посмотреть?
>>589713 >Что-то сложнее инкремента можно зделоть? Сейчас на http://b.atch.se есть три статьи, в которых нигра-швед дошел до контейнера метатипов времени компиляции. В сентябре он говорил, что скоро продолжение будет, но чота глухо пока. На русском есть перевод первой статьи http://habrahabr.ru/post/268141, плюс у меня есть пара идей, как сделать полноценные переменные, а не только инкрементируемые. Но я их пока ни во что не оформил, никак руки не дойдут. И еще автор говорил что-то про полноценную интроспекцию, но это было оче туманно, и я не понял, как он предлагает это делать.
Блядь, зашёл в тред - как говна поел. Какие концепты, какие SFINAE? Что ещё за новый, блядь, способ ебать байты? Какие функции времени компиляции? Вы ёбнулись? Пишите, блядь, код, и не выёбывайтесь. Нахуя вам экономить 20 микросекунд на вызов функции при старте программы? Да я ваш рот ебал в жопу, сука, как у меня ГОРИТ пиздец! Съёбнули с треда все блядь быстро!
>>589803 Ты просто слишком тупой для языка, на котором господь написал вселенную. За чистым байтоебством иди в си-тред, а тут мы отыскиваем новейшие возможности для самого извращенного и сложного кодинга эвер.
>>589713 Тащемта, я, наверное, неправильно выразился. Возвращаемый тип тоже можно без лишних костылей проверить через std::is_same, но проблема в том, что все эти инструменты, которые основаны на проверке корректности выражений, не дают точных сигнатур. Т.е. если foo (1) корректна, то мы не знаем, foo (int) там, или foo (double). То же самое с const и прочей хуйней. Хочется же проверить декларацию в точности, вплоть до const, virtual, constexpr и всякого такого.
>>589817 >>589817 Что плохого в constexpr? Не то чтобы я понимал SFINAE (вообще первый раз об этой хуйне слышу), но constexpr это охуенная вещь из 11 стандарта, не путай, пожалста, сечку с гречкой, а хуй с трамвайной ручкой.
>>589859 Никогда не сталкивался с ошибками при неправильном использовании шаблонной хуиты? Обычно в таких случая компилер тебе тонны текста высрет о том что где то в глубинных ебенях какой-то тип не совпал. И попробуй пойми что не так.
Что б такого говна небыло, пейсатель шаблона пишет ограничения на тип. И тогда вместо тонн текста, ты получаешь пару строк, с указанием где и что не так.
>>589857 Вот я и говорю, что вроде новый синтаксис концептов позволяет проверять даже Аллаха, поэтому перспетивы весьма вкусные. А в 14 стандарте такого никак не сделать афаик.
>>589887 Я уже хотел тебе накидать блогов по метапрограммированию, но теперь не буду. Нахамил уважаемому человеку, моему коллеге по анальным пляскам, нехорошо.
>>589894 В глаза долбишься? Первый ответ там про gcc, и я ебал читать стену текста без подсветки, даже если конкретный символ где-то в ней будет указан.
Призываю в тред адепта VS, который где-то выше был. Реквестирую пояснений за Azure и прочую облачную ебалу мелкомягких. В лицензионной VS Enterprise 2015 где-то мелькало что-то связанное с Azure. Значит ли это, что я смогу бесплатно прикрутить это дерьмо и, например, коннектиться к персональной *nix виртуалке на их сервере, чтобы компилить через gcc и clang? Или базы там хранить, например? Пользовался ли ты этими облаками? Если да, то не трясут ли за них дополнительное бабло по подписке?
>>589924 Среди бескрайних C++ просторов Ублюдки разыскали то, Что без задач лежало много лет. И имя этому говну - constexpr, concept, SFINAE. Сотни мух Слетелись бы на эту кучу кала, Была бы эта куча на полу. И как до них дойдёт, что мета - Это всего лишь выебон, Тогда они поймут, Что потеряли то, чего нельзя вернуть: Секунды жизни, что они могли потратить На пиво, паттерны, работу и жену. Увы и ах, жены у них не будет. Да и работы тоже. Почему? Ответ тут очень, очень прост: Они же метапрограммисты, это всё. Настолько C++ велик, что ложка дёгтя Не в силах изменить такой приятный вкус. Когда увидишь ты адепта меты - ты должен написать ему: "Ублюдок, мать твою, урод, Открой свой рот, сейчас я буду туда срать". И постепенно тред очистится от этих ненормальных, Кто жизнь свою и место в треде тратит На фичу без задач, не более того. И пролежит всё это дело столько, Сколько лежало до того, Как начали его все форсить. Вот сука, как горит очко.
>>589982 Как уже было сказано выше по треду, констекспр - это анти-метапетушение. Они делают элементарным то, ради чего раньше всякие александерски и последователи писали тайплевел списки с енумами-контейнерами значений, и прочие радости. Так что люби констекспр, это как раз для таких как ты запилено.
>>590190 Я в D видел такую штуку, только там функции менять не нужно было, а при вызове просто писать enum x = factorial(10). Можно в крестах так же сделать?
>>590190 Да за каким хуем это нужно? Ведь регулярные выражения применяются или к подгружаемому тексту, или вводятся пользователем, их не выполнить во время компиляции.
>>590202 А другой пример? Вот был у нас в армии командир-дагестанец. Всегда говорил нам, что мы свиньи. Один раз собрал нас всех, и говорит: Да ви же свиньи! Ви даже нэ понэмаете этого! Гразные жэвотные! Вот у нас на Родине, например, мы витераем жёпу рукой, а потом моем её водой из бутылки. Недолгое молчание... Ладно, согласэн, плахой примэр.
> Ведь регулярные выражения применяются или к подгружаемому тексту, или вводятся пользователем Ну вообще-то, довольно часто регулярки задаются константами в коде. В моей практике таких случаев этак 90%, а остальное - это всякие хитрые гуи, где можно было профильтровать список/таблицу по регулярке.
В общем, есть тестовая игра, которую я пилю, попутно разбираясь с языком. Игровое поле представляет собой матрица AxB, где каждая переменная обозначает ID чего-то, что будет там находиться. Большинство элементов активные, так что я просто проходилась по всей матрице. Потом всё немного изменилось, я понял, что это хуйня, сделал все активные элементы объектами, чтоб загонять все вновь созданные объекты в этот массив и прогонять поверку по элментам массива, а не по всей матрице целиком, чтоб не делать лишних проверок. В итоге, в момент возникновения каких-либо событий, у меня вызываются функции на создании соответствующих объектов и добавление их в вектор.
{ int generation = rand() % 4; zone[x][y] = 0; if ( generation == 0 ) Enemies.push_back(Enemy( x, y )); }
Enemies — вектор, Enemy — класс. Я вызываю конструктор класса и он становится одним из элементов вектора. Дальше происходит что-то странное. Я понимаю, что я что-то упускаю, но не могу понять, как это правильно должно быть реализовано. Короче, я сделал деструктор этому классу, который на выходе подчищает всё ненужное, если объект мне больше не нужен, но этот деструктор вызывается автоматически в момент выхода из вышенаписанной функции. В итоге мне пришлось отказаться от деструктора вообще, сделал свою функцию по выносу мусора. Где и почему я мудак?
>>590198 Они создаются на этапе компиляции. Регулярное выражение изнутри представляет собой не строку (ВНЕЗАПНО, да?), а конечный автомат, который создается из шаблона-описания (как раз таки строки)
>>590331 Не всегда жи, часто для игры пишется собственный движок, из-за нежелания отстегивать с продаж создателям какого-нибудь UE актуально для индюшатины, из-за лютых требований к производительности актуально для AAA-йоб с графеном, либо просто чтобы зделать по-своему, с преферансом и блудницами тот же xray в сталкере.
>>590272 У тебя создается временный объект класса Enemy, когда ты его кидаешь в вектор туда уходит его копия, при выходе из функции временный объект удаляется (вызывается его деструктор). У тебя три пути: 1) То что удаление временного объекта вызвало проблемы намекает на проблемы с конструкторомкопирования или проебы архитектуры - исправляешь, все остальное оставляешь как есть. Проблема в лишнем копировании. 2) Создаешь объект в куче (добавляешь new) - в векторе хранишь указатели на него. Прийдется озаботится утечками памяти. 3) Пердолинг с move семантикой и прочими rvalues - у тебя классический пример нахуя это нужно, можно избежать копирования. Это нужно выучить и использовать, но возможно для тебя еще рано - помоему лучше в общем язык подтянуть а потом погружаться в такую хуйню.
>>590366 В то время как джава и шарпомакак берут куда угодно без опыта. А программист на С++ должен знать ВСЕ чтобы иметь честь соснуть хуев в ООО "РОГА И КОПЫТА"
пасаны, довно мучает одна проблема- как организовать ситуацию, когда у тебя есть набор элементов, которые чем-то хранятся и обрабатываются униформально, но при этом являются разными сущностями?
грубо говоря есть вектор из базовых классов, в который запихиваются созданые фабрикой конкретные классы, а потом я хочу взять и изменить один из этих объектов.
конечно можно просто кастануть к нужному классу, но мне это нихуя не нравится.
простейший пример- есть у меня набор элементов гуя, из которого потом собираются кнопочки и всякое говно. соответственно мне могут понадобиться какие-то дополнительные данные внутри кнопочки, допустим для кнопочки со счётчиком интегер, для кнопочки с текстом строка. что делать? я решил данный вопрос так
GUIStorageObject* Clone() { return new GUIStorage<T>(m_value); }
private: T m_value; }; [/code]
и потом внутрь дженерик компонента добавляется вектор GUIStorageObject. теперь при написании логики можно засунуть внутрь кнопки хоть самого чёрта с дьяволом, не меняя кнопку, но меня напрягает то, что нужно указывать конкретный тип при обращении к одной из пазиций хранилища.
как это сделать лучше? при этом учтите что подогнать под один интерфейс все типы хранилищ нельзя, будем считать что у них совершенно разные методы.
>>590502 Вектор из unique_ptr на базовые классы, основные действия (добавление-удаление-присваивание, например) делаются над самими указателями без оверхеда, доступ по интерфейсу через виртуальные методы, доступ в обход интерфейса через static_cast <Derived *>, ну или dynamic_cast, если ты ссыкло и не жалко времени.
Вектор из самих объектов базового класса, без указателей, делать нельзя категорически, ибо тогда у тебя не будет работать виртуальность, а при первом же копировании (а вектор имеет право копировать элементы по своему усмотрению, не спрашивая тебя) ты получишь срезку объекта до базового класса и соснешь. По-хорошему, базовый класс вообще не должен позволять создание объектов, за счет чисто виртуальных методов и/или delete конструктора.
>будем считать что у них совершенно разные методы Это признак хуевой архитектуры в твоем случае. Сделай унифицированный доступ и вынеси в общий интерфейс через базовый класс, или вообще не юзай виртуальность, а перекатись на параметрический полиморфизм с неявными интерфейсами, энивей тебе вряд ли нужно будет менять в рантайме это все.
>>590502 > при этом учтите что подогнать под один интерфейс все типы хранилищ нельзя, будем считать что у них совершенно разные методы. Ты какую-то хуйню несешь. То у тебя "униформально", то - подогнать под один интерфейс нельзя. ООП подход тут - выделить интерфейс IGuiStorable, и хранить в твоем гетерогенном списке указатели на этот интерфейс. Сами классы при этом могут быть любыми и даже не принадлежать одной иерархии (множественное наследование интерфейсов), соответственно в одном классе сможешь хранить кнопки, в другом - что-то еще.
Основная твоя ошибка в том, что ты вместо того, чтобы написать пример использования кода, пишешь зачем-то какой-то странный класс с текущей памятью.
Второй вариант, хранить в гетерогенном списке boost::variant.
>Это признак хуевой архитектуры в твоем случае. ну вот гляди, у меня есть компоненты- квадратик, квадратик с шейдером, картинка, текст. все они сейчас служат для сборки элемента интерфейса, типа кнопки. у них у всех совершенно разные параметры- у квадратика размер, у текста например шрифт и строка.
кнопки хранятся будем считать внутри вектора всех элементов интерфейса. компоненты хранятся внутри вектора отдельного элемента. обрабатываются компоненты в случае интеракции с гуем, отрисовки и перемещения по экрану одинаково.
а теперь у нас добавляется логика элемента. допустим я хочу редактировать содержимое текстбокса, который состоит из квадратика и текста. я создаю логику отдельно от элемента, чтобы не хардкодить миллиард разновидностей текстбоксов с одинаковым поведением, и потому что у меня нет конкретных элементов, захардкожены только компоненты, а элемент собирается эдакой фабрикой. в конструктор логики я передаю номера нужных мне компонентов(например строка- второй компонент) и указатель на элемент, который их хранит, вот тут происходит то что мне не нравится, я беру из вектора компонентов второй элемент, кастую его в предполагаемый тип и провожу манипуляции- напимер добавляю нажатый юзером глиф в конец строки.
мне интересно в чём ты видешь хуёвы стороны такой архитектуры, и как их можно было бы усовершенствовать?
>>590388 >1) То что удаление временного объекта вызвало проблемы намекает на проблемы с конструкторомкопирования или проебы архитектуры - исправляешь, все остальное оставляешь как есть. Проблема в лишнем копировании. Мтак-с, ну да, я в деструкторе удалял некоторые вещи, не являющиеся полями объекта, но связанными с ним.
>2) Создаешь объект в куче (добавляешь new) - в векторе хранишь указатели на него. Прийдется озаботится утечками памяти. Это мне нравится, спасибо.
Аноны, а в крестах можно работать с 3д мешами? Пишу под уе программную часть, мне надо в определенных точках проводить булевы операции (считай, вставлять)
>>590552 ну, униформально то как отрисовывается хуитка на экран, неуниформально то как она изменяется. >IGuiStorable >>590556 у меня и так хранятся интерфейсы, но мне потом нужно как-то получить доступ к тому, что в интерфейс не поместилось. то есть было бы охуенно если бы можно было сделать в интерфейсе метод, который отдаёт указатель на конкретный объект, но это немношк невозможно, всё равно надо потом кастать. >boost::variant какой мне толк от варианта? он делает то же что и я- кастует в указанный тип и применяет визитор, но мне тут визитор нахуй не сдался.
>>590560 Если конкретно, то работаю со скелетной анимацией. Зачем нужно? Чтобы анимировать дыры от пуль, то, есть - стреляют в нашего персонажа и можно увидеть на нем дыру. Хочу написать уникальное, а не как в других проектах делают, где просто навешивают скрипт
>>590564 > Чтобы анимировать дыры от пуль, то, есть - стреляют в нашего персонажа и можно увидеть на нем дыру. Тебе, видимо, нужна библиотека CSG http://opencsg.org/
>>590564 >Чтобы анимировать дыры от пуль, то, есть - стреляют в нашего персонажа и можно увидеть на нем дыру. делай в скринспейс дырки, базарю. идея с модификацией меша- полная хуйня. было бы более реалистично текстуру модифицировать.
хранишь матрицу трансформации камеры до места дырки, матрицу локальной курвитуры поверхности и по ним накладываешь картинку дырки.
>>590558 Гейдев, эмбеддед, научные вычисления хотя прототипы обычно хуярят на пистоне, и только потом переводят в кресты для скорости, хайлоад бэкенд внезапно, даже макаба написана на крестах, иногда всякая финансовая хуйня и анализ данных, да дохуя всего.
Аноны, а как на крестах делают алгоритмы быстрее, чтобы все происходило, например, не за 5 секунд, а за 2? Оптимизация, читал, что здесь нет контроля памяти
>>590594 >Нахуй оптимизацию, ко-ко-ко Из-за таких пидоров как ты выходит Фаллаут 4, с системными требованиями охуеть какими, а графоном как в 3 фаллауте, в котором требовалось намного меньше
>>590588 Ну вот представь, что нужно вскипятить кофе. У Ерохина есть высокотехнологичная кухня. В ней он нажимает на кнопку, автоматика доставляет из подвала нераспечатанную бочку с водой, на плите зажигаются десять конфорок (с запасом, вдруг ты еще яичницу захочешь пожарить), из стены выезжает робот-сборщик, на месте собирает из деталей робота-курьера, который едет в магазин за чайником... Ну ты понел. А у Славик Сычев живет в хрущевке, он, блядь, идет на проперженную кухню ставит на плиту единственный чайник с треснувшей эмалью, и через пять минут кофе готов. А Ерохин будет ждать до утра, смекаешь? Алсо, у Славика есть мамка язык шаблонов, которую он может попросить заварить кофе, при этом по времени это будет лишь немного медленнее потому что мамка жирная, но зато ему, как и Ерохину ничего не нужно будет делать вообще. Различие в том, что Славик в это время будет сидеть в сычевальне и дрочить на поней, а Ерохин будет ебать Еотову, и оно довольно показательно.
>>590602 "алгоритмы" в лучшем случае помогут улучшить асимптотику, то есть количество выполняемых операций в сферическом случае получения примерно бесконечного количества входных данных. они вполне могут ухудшить производительность (если ты возьмешь какую-нибудь поебень с охуенной асимптотикой но пиздецовой константой). что более вероятно, ты скорее всего обнаружишь, что более эффективного алгоритма и не существует.
>>590561 >у меня и так хранятся интерфейсы, но мне потом нужно как-то получить доступ к тому, что в интерфейс не поместилось Изнутри интерфейса ты и так к этому доступ получишь. Снаружи - не нужно, это сломает систему типов.
>>590588 Вопреки мифам, дело не в отсутствии сборки мусора. Даже с полностью отключенной сборкой мусора управляемые языки будут медленнее. В крестах все cache-friendly.
>>590678 Ага. Чуть выше писал что он вдвое быстрее пхп треда. Если так всё и схорониться, то мы обгоним пхп тред по количеству тредов уже к лету. А у опа кончиться поэтический потенциал уже очень скоро лол.
>>590678 Потому что здесь один из немногих тредов, не являющихся филиалом stackoverflow для тупых, или просто полем для троллинга типа перезванивай@гитхабь.
Господа, поскольку близится бамплимит, а кто-то был недоволен нынешним tl;dr который теперь наверху шапки, предлагаю вам подумать над альтернативой/улучшением существующего варианта. Надо чтобы он кратко давал алгоритм действий тем ньюфагам, которые чукча не читатель, а также предостерегал их от платиновых вопросов. Если успеем сгенерить его до бамплимита, я впилю обновление в новый тренд.
>>590698 надо туда игровых обучалок типа эйлера для крестов впихнуть и что-то для олимпиадников.
уже предлогал начать с пункта для тех кто потерядся среди многобуковок. Сверху стих ниже ссылки на список книг/блогов/библиотек потом FAQ почти полностью переделанный и сокращённы. Ответ на вопрос давать 1-2 предложения и сылку на пасту. >хочу вкатиться что делать? Ищешь в списке книг для ньфань и читаешь ту что поновее. IDE настраивать вот так. тут ещё какие-нибудь советы >что нужно перед тем как вкатится изучить? не используй кресты как первый язык, а посмотри эту пасту тут ссылка на пасту с советом почитать таненбаума и типа того >как делать оптимизацию и не писать говонкод? Ищи такой-то раздел в списке литературы. >теперь пора учить библиотеки? Что посоветуете. Тут паста про библиотеки. Какие для чего и с чего начать. >всё теперь я знаю кресты и могу работать джуниором? тут я не знаю что писать ни разу не работал >Какой профит от крестов и зачем их учат? Тут немного из текущей шапке, но тоже на пастебине
тут ещё несколько пунктов которые я не могу придумать.
>>590720 когда я это писал наверно и половины треда не было.
Привет. Мне вообще стыдно такое спрашивать, но, прогуглить я не смог, и поэтому решился спросить тут: как обратиться к объекту класса, объявленного в другом методе другого класса?
Пиздос. Стоило вопрос сформулировать тут, и сразу же в голове решение появилось. Объект нужно в классе создавать, вот. Чтобы доступ к нему иметь в пределах всего класса, а не конкретного метода. Насру этим тут, может поможет какому-нибудь дурачку вроде меня.
>>590737 Ну и оно разрастется тогда, если даже давать ссылки на пастебины или на несколько книг из фака. Я хотел нечто буквально один абзац, чтобы вместо альтернатив решить все за ленивого ньюфага, типа "юзай Лафоре-ideone-cppreference" или что-то в этом роде. Всякие олимпиадники и продолжающие, наверное, осилят фак, а тут именно для петушков, которые не хотят ничего решать, а хотят быстро попробовать и решить, стоит ли вкатываться. Если сделать что-то среднее между факом и одним абзацем, то будет ни рыба ни мясо, вроде и читать лень, а если таки прочел, то нихуя не прояснилось до конца. Как-то так.
>>590802 бля, оставь лучше свой контач инбифо вк для быдла тут короче ебучее число этих сортировок наплыло, я в ахуе. Нужна твоя помощь, с меня материальная поддержка, ибо сроки поджимают
>>590807 Именно. Тогда просто советовали книгу, а теперь отвечаем на вопросы. Говорю же на пастебине никакого ограничения по размеру нет. Тот кому интересен ответ на конкретный вопрос тот пройдёт по ссылке и подробно его изучит, а тот кому не интересно просто пропустит 2-3 строчки. И никаких проблем со скролингом нет в отличи от того как теперь.
>>590809 Проблема в том, что надо использовать make_pair? Но задача слишком требовательна ко времени выполнения, а пары создаются долго. Нельзя ли как-то на более старом С++ написать то же самое, не используя создание пар? Без вот этого: {i, weight}
>>590817 >маты >сосач Я могу ошибаться, но у нас тут не пансион благородных девиц, лол, и анон не оценит. Алсо, ща я такие стихи в новую шапку ебну, что ты вообще позеленеешь, братюнь.
Есть хеш-таблица, которая содержит пары ключ-значение. Таблица моделирует электронного продавца кусков мяса ("All pieces are numbered from 0 to N-1 in order of weight increase"). Когда покупатель выбирает один кусок, из хранилища в контейнер подгружается еще один кусок наибольшего веса. Как сделать обновление контейнера? Думаю, я зря выбрал для контейнера хеш-таблицу (хотел немного ускорить выбор кусков покупателем), т.к. слишком долго искать максимум по номерам в хеш-таблице. Стоит использовать priority_queue?
>>590822 >т.к. слишком долго искать максимум по номерам в хеш-таблице Имею в виду, что если в контейнере уже есть куски с некоторыми номерами, то новый кусок должен иметь следующий номер в порядке возрастания.
Ананасы , молю о помощи . Как по изи вкатится в классы . Прочитал 100500 статей на тему : "Конструкторы\деструкторы\наследование " , до сих пор въехать не могу .
Хеллоуворлдщик на связи. Где-то давно читал, что байт-код это плохо и тормознуто. Решил таки в 30 лет начать изучать кресты и что я вижу в шапке? На винду оп-хуй рекомендует ставить Visual Studio! Но ведь это байткод! Верны ли мои опасения?
В тред призываются посоны, могущие в CUDA. Нужна ваша помощь. Вопрос: Есть какой-то способ брать картинку с экрана, обрабатывать её в CUDA и в RAM выгружать уже результат обработки? К примеру, мне нужно алгоритмом выделить три (x,y) точки на экране, исходя из цвета пикселей на нём. Стандартным подходом выглядит: 1) Сделать скрин. 2) Загрузить массив пикселей в память видеокарты через cudaMalloc. 3) Проанализировать их и вернуть результат. А может ли девайс Куды анализировать прямо то, что сейчас на экране, без промежуточных копирований картинки в оперативную память хоста?
помогите написать прогу (Первые 15 наиболее часто встречающихся символов коди руются четырехбитными кодами от 0000 до 1110. Код 1111 означа ет, что следующие за ним 8 битов кодируют один из остальных символов. Разработать функции упаковки и распаковки строки с определением наиболее часто встречающихся символов и коэффициента уплотнения.)
Сап, анон Нужна помощь в разборе моих ошибок в коде программы, которая должна была реализовать класс треугольник с операциями вычисления периметра, площади и проверки двух треугольников на равенство (в геометрическом смысле). http://pastebin.com/1x4Djik0 Вот, собственно, сам код. Надеюсь, что тут найдётся добрый человек, который поможет его обосрать и выявить все ошибки.
Сап, pr, помогите ньюфагу ебаному. Я использую Token_value get_token();, а мне говорит, что идентификатор Token_value не определен, препод сказал, что ничего не надо перед этим писать. Где я долбаеб? Что делать?
Сап, анон Собсна написан класс с одномерным массивом, надо перегрузить + и +=, все сделано, но когда возвращаю измененный массив в мейн, парочка значений просто обнуляются , хуй знает что делать. http://pastebin.com/HyCrkC1D Вывод в консоле: Input size=3 Elem[0]=1 Elem[1]=2 Elem[2]=3 Elementi= 3 1 2 3//вывод из функции Elementi= 0 0 2 3//вывод после возвращения Elementi= 1 2 3 3//вывод из функции Elementi= 1 2 3//вывод после возвращения
Решение дико платформозависимое, так как вообще стандарт и реализации крестов не предполагают такого рода интерактивного ввода. Под Linux запустится, но под Окнами не уверен. Можно попытаться использовать CreateFile/ReadFile/WriteFile из Win32 на стандартных потоках
>>605112 Спасибо. Да просто захотелось так. Я задачки из учебника делаю. Помню лет 10 назад на 1м курсе информатике на паскале я что-то подобное делал. И там вроде проблем не было.
Крестаны, нужны знатоки и не очень Qt и Qml. Суть проблемы: окно QML гуя просто перестало рендерится, хотя процесс работает, раньше всё ок было. Пробовал всё ребилдить как под релизом так и под дебагом, перезагружать пеку и тд. Что ещё может быть?
Рождающий позорный говнокод,
С дедами в диком байтоебстве сходный.
Весь сахар оверхедом он сочтет:
Среди худой рябины не пристало
Смоковнице растить свой нежный плод.
В невежестве порочный изначала,
Ничтожный и до тактов жадный люд!
Писать для них тебя бы запятнало:
Здесь, лишь увидев твой high-level труд,
Отладчиком начнут в нем ковыряться,
Которым байты каждый день ебут.
Пусть впредь в своем навозе копошатся.
Пойдем же дальше - нас монады ждут".
TL;DR Читаешь https://goo.gl/kVaela, делаешь примеры и суешь в http://ideone.com, ошибки копипастишь в гугл, непонятное ищешь в предыдущих тредах, спрашиваешь в этом треде, если не нашел. Если тебя послали на хуй или не ответили, то ты спросил платину, читай предыдущие треды внимательнее. И прочитай FAQ, расположенный в следующих постах, в нем много полезного.
Унаследованная памятка:
Вопросу по синтаксису идут на хуй.
Лабы идут на хуй.
"Как мне сделать Х на чистых крестах без библиотек" идут на хуй.
Все идут на хуй.
Хейтер сосет члены на пару со своей мамашей.
Тег [code] работает через жабаскрипт-костыль: https://github.com/ololoepepe/MakabaCode
Старший брат:
Предыдущий: