Это копия, сохраненная 3 февраля 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Что я подумал: "Это крестобляди
Ввязались в спор о фичах языков,
Набросив нечистот потехи ради.
Но, осознав, что их теснят всерьез,
Окуклились, укрывшись в байтов смраде,
Предвосхитив чудовищный отсос,
Что был для скалоблядка столь желанен.
И тот бы роковой удар нанес,
Не будь стремглав куратором забанен".
НОВОГОДНЕЕ ОБРАЩЕНИЕ ОПа
Братья-крестоаноны! Старый год подходит к концу, и я думаю, что сейчас самое время написать несколько слов о нашем треде, подвести итоги или вроде того. Уже шесть с лишним месяцев я с большим удовольствием исполняю обязанности ОПа. Не будет сильным лукавством сказать, что за это время мы с вами серьезно изменили тред к лучшему. Общими усилиями была выстроена неплохая шапка, найдено и структурировано большое количество годной литературы. Активность анонов увеличилась почти в два раза, а треды порой улетали в бамплимит с поистине космической скоростью.
На мой взгляд, общий экспириенс анонов также возрос. За прошедшие полгода я извлек из крестотредов огромное количество новой для меня информации и ценных советов анона, и очень рад, если и вы нашли здесь что-то полезное для себя. Надеюсь, что и впредь у нас получится не снижать планку, делая тред все лучше и лучше.
Пусть в 2016 году все мы еще дальше продвинемся в изучении темных закоулков крестов. Пусть неосиляторство и баги минуют нас. Пусть школьники сдадут свои лабы, а их старшие товарищи найдут годные вакансии. Пусть написание кода будет приносить нам только удовольствие, и ни капли бугурта. С наступающим Новым Годом вас, братишки!
P.S. Исходники кода с сюрпризом из оппика - https://goo.gl/kByKap
TL;DR Читаешь https://goo.gl/kVaela , делаешь примеры и суешь в http://ideone.com , ошибки копипастишь в гугл, непонятное ищешь в предыдущих тредах, спрашиваешь в этом треде, если не нашел. Если тебя послали на хуй или не ответили, то ты спросил платину, читай предыдущие треды внимательнее. И прочитай FAQ, расположенный ниже, в нем много полезного.
Унаследованная памятка:
Вопросу по синтаксису идут на хуй.
Лабы идут на хуй.
"Как мне сделать Х на чистых крестах без библиотек" идут на хуй.
Все идут на хуй.
Хейтер сосет члены на пару со своей мамашей.
Тег [code] работает через жабаскрипт-костыль: https://github.com/ololoepepe/MakabaCode
Старший брат: >>609376 (OP)
Предыдущий: >>607053 (OP)\r\n\r\n
\r\n\r\nFAQ:
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
Скотт Мейерс - Эффективный и современный C++ (2015) - https://goo.gl/Im8VYQ
Скотт Мейерс - Эффективное использование STL (2002) - https://goo.gl/QtS8Dc
Герб Саттер и Андрей Александреску - Стандарты программирования на языке C++ (2005) - https://goo.gl/Cpk4YR
Наиболее детальные описания языка:
Бьерн Страуструп - Язык программирования C++ (на ангельском) (2013) - https://goo.gl/XkAiOX
<устарело> Бьерн Страуструп - Язык программирования C++ (2010) - https://goo.gl/iZBDiV
Стандарт C++14 (на ангельском) - https://github.com/cplusplus/draft/raw/master/papers/n4140.pdf
Последняя на данный момент версия черновика стандарта C++17 (на ангельском) - http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4567.pdf
Тонкости языка (для гурманов):
Андрей Александреску - Современное проектирование на C++ (2002) - https://goo.gl/e1V5BC
Герб Саттер - Решение сложных задач на C++ (2002) - https://goo.gl/iWaa6S
Герб Саттер - Новые сложные задачи на C++ (2004) - https://goo.gl/4nn512
Также для легкого чтения подойдет книжка c историей создания C++:
Бьерн Страуструп - Дизайн и эволюция C++ (1994) - https://goo.gl/FqbPwo
Отдельные аспекты:
Читать по необходимости.
Энтони Уильямс - Параллельное программирование на C++ в действии (2012) - https://goo.gl/qJfBkD
Николаи Джоссатис - C++. Стандартная библиотека (2012) - https://goo.gl/PEyiMH
Дэвид Абрахамс, Алексей Гуртовой - Шаблонное метапрограммирование на C++ (2009) - https://goo.gl/isSt7j
Дэвид Вандевурд, Николаи Джоссатис - Шаблоны 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: Вот тебе блоги, факи, референсы и всякое такое:
Годный блог, в котором все просто и понятно тян не нужны кококок борщ - 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/about
Куча других блогов (на ангельском) - https://www.quora.com/What-are-the-best-blogs-on-C++
Большой FAQ по C++ (на ангельском) - https://isocpp.org/wiki/faq
Q: Я не умею читать.
A: Можешь посмотреть какой-нибудь онлайн-курс:
Видеокурс на тытрубе - https://www.youtube.com/watch?v=atVgLRzl3rI
Еще один - https://youtube.com/watch?v=MOpF5lk3cLY
Среди прочих есть несколько курсов по C++ - https://stepic.org
И еще есть вот такое, если проникся:
Видео с CppCon (на ангельском) - https://youtube.com/user/CppCon/videos\r\n\r\n
\r\n\r\nQ: Я готов начать погроммировать! Куда мне писать код?
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, например, весьма удобную CodeLite (sudo aptitude install codelite codelite-plugins), и работать в ней. Ее также можно использовать и в шиндошс, но тогда сперва придется установить MinGW (http://mingw.org).
Еще у нас есть IDE, призванная похоронить Visual Studio пока не особо получается. Она стоит денег, но можно украсть почти не протухшую версию на торрентах или получить бесплатную лицензию по скану студбилета, если ты студент. Удобные свистелки и перделки присутствуют. Тормоза и баги присутствуют. Кросплатформенность присутствует - https://www.jetbrains.com/clion
Можно также не устанавливать ничего, а запускать свои хэллоуворлды на http://ideone.com, выбрав в левом нижнем углу язык C++14.
Q: Не буду я все делать сам! Подавайте сюда софт, который все сделает за меня и подотрет мне жопу!
A: Без проблем:
Статический анализатор, который умеет находить в коде ошибки и неоптимальные места. Швабодный. Есть плагин для Visual Studio - http://cppcheck.sourceforge.net
Детектор утечек для Visual Studio. Предельно прост в прикручивании - https://vld.codeplex.com
Гугловские утилиты для контроля корректности кода - https://github.com/google/sanitizers
Гугловский фреймворк для автоматизации тестирования - https://code.google.com/p/googlemock
Q: Мне надоело писать велосипеды, какие у вас тут популярные либы?
Q: Нужно зделать %монструозная_хуйня_нейм, но я обосрался от одной мысли о написании ее с нуля, что же делать?
A: Гляди сюда:
boost
Бесспорно, это самый популярный набор C++-библиотек. Не будет лукавством сказать, что C++ во многом обязан популярностью именно ему. Воистину всеобъемлющий, boost способен удовлетворить твои самые скотские фантазии. В нем есть практически все - от математических функций до сетевых компонент, от инструментов тестирования до динамических типов. Функции для работы с твоей мамашей там тоже есть. Разумеется, все это швабодное и работает на любых платформах. И да, boost является своеобразным инкубатором хороших библиотек, поэтому наиболее удачные из них с большой вероятностью можно будет увидеть после принятия очередного стандарта уже как часть стандартной библиотеки.
Недостатком boost можно считать его размер - более 300 мегабайт. Большинство компонент boost не являются независимыми, и попытка использовать один единственный контейнер обернется фактическим подключением 2/3 всего присутствующего в комплекте. Таким образом, если boost не будет использоваться на полную, лучше юзать другие, более специализированные библиотеки.
http://www.boost.org - скачать бесплатно без смс.
http://www.solarix.ru/for_developers/cpp/boost/boost-library-list.shtml - краткие аннотации к большинству компонентов.
http://sindicollo.blogspot.ru/2008/09/boost.html - документация к некоторым компонентам.
http://www.boost.org/doc - документация (на ангельском).
Литература:
Ариндам Мукерджи - 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.х, полной обратной совместимости между ними нет как в пистоне, ага.
http://www.qt.io/ru - скачать бесплатно без смс.
http://doc.crossplatform.ru - документация к 4.8.
http://doc.qt.io - более полная документация к обеим версиям (на ангельском).
Литература:
Макс Шлее - Qt 5.3. Профессиональное программирование на C++ (2015) - https://goo.gl/aZ66gK
Макс Шлее - Qt 4.8. Профессиональное программирование на C++ (2012) - https://goo.gl/Slb1In (книга) + https://goo.gl/toUDWc (исходники примеров)
Марк Саммерфилд - Qt. Профессиональное программирование (только Qt 4.х) (2011) - https://goo.gl/qpkZFm (книга) + https://goo.gl/LIIECh (исходники примеров)
Другие хорошие библиотеки:
Несколько специализированных библиотек для часто встречающихся задач. Все маленькие, быстрые и простые в освоении:
libcurl - сишная библиотека для работы с сетью (существует также curlpp - крестовая обертка для нее, но использовать ее не стоит, ибо разработка заброшена еще в 2009 году) - http://curl.haxx.se
SFML - работа с графикой и аудио - http://www.sfml-dev.org
FLTK - графические интерфейсы - http://fltk.org
И еще куча библиотек на любой вкус - http://en.cppreference.com/w/cpp/links/libs
Добавлено моар русскоязычных доков по бусту.
Предыдущие треды на архиваче:
https://arhivach.org/thread/94971/
https://arhivach.org/thread/94972/
https://arhivach.org/thread/99414/
https://arhivach.org/thread/100995/
https://arhivach.org/thread/105148/
https://arhivach.org/thread/109335/
https://arhivach.org/thread/112797/
https://arhivach.org/thread/114519/
https://arhivach.org/thread/117109/
https://arhivach.org/thread/120019/
https://arhivach.org/thread/122683/
https://arhivach.org/thread/124637/
https://arhivach.org/thread/125532/
https://arhivach.org/thread/127327/
https://arhivach.org/thread/128133/
http://arhivach.org/thread/134437/
Старые ненумерованные треды:
https://arhivach.org/thread/45477/
https://arhivach.org/thread/48611/
https://arhivach.org/thread/60085/
https://arhivach.org/thread/66322/
https://arhivach.org/thread/69413/
https://arhivach.org/thread/73221/
https://arhivach.org/thread/77999/
https://arhivach.org/thread/79194/
https://arhivach.org/thread/82038/
https://goo.gl/vvs9GP
https://goo.gl/ZnBsYt
Отдельные Qt-треды:
https://arhivach.org/thread/15387/
https://arhivach.org/thread/65590/
Добавлено моар русскоязычных доков по бусту.
Предыдущие треды на архиваче:
https://arhivach.org/thread/94971/
https://arhivach.org/thread/94972/
https://arhivach.org/thread/99414/
https://arhivach.org/thread/100995/
https://arhivach.org/thread/105148/
https://arhivach.org/thread/109335/
https://arhivach.org/thread/112797/
https://arhivach.org/thread/114519/
https://arhivach.org/thread/117109/
https://arhivach.org/thread/120019/
https://arhivach.org/thread/122683/
https://arhivach.org/thread/124637/
https://arhivach.org/thread/125532/
https://arhivach.org/thread/127327/
https://arhivach.org/thread/128133/
http://arhivach.org/thread/134437/
Старые ненумерованные треды:
https://arhivach.org/thread/45477/
https://arhivach.org/thread/48611/
https://arhivach.org/thread/60085/
https://arhivach.org/thread/66322/
https://arhivach.org/thread/69413/
https://arhivach.org/thread/73221/
https://arhivach.org/thread/77999/
https://arhivach.org/thread/79194/
https://arhivach.org/thread/82038/
https://goo.gl/vvs9GP
https://goo.gl/ZnBsYt
Отдельные Qt-треды:
https://arhivach.org/thread/15387/
https://arhivach.org/thread/65590/
Как сделать ремап адресов в ida?
На первом скриншоте дебаггер с выделенной инструкцией jal.
Она расположена по адресу 800C5638, а сам джамп уводит нас на $800C50AC.
Всё понятно и никаких проблем нет, но это дебагер, в нём удобно код не покомментируешь, он тебя его не проанализирует и не поможет разобраться.
На втором скриншоте ида, где проведен дизасм файла, содержащего тот же самый код.
Только переход здесь на C50AC, а не на 800C50AC, в то время как на psx память замапплена 0x80000000. Ну и сама инструкция по другому адресу, ибо в ида отсчёт с нуля. Как можно заставить иду отображать данные так, как мне надо? Иначе метки никуда не ведут и анализировать код сложно.
Я, конечно, считаю всё ручками, но хотелось бы пользоваться автоматизацией. Много меток ручками исправлять оче долго.
В консоли появится физиономия Страуструпа и уничтожит твой комп.
Нету реутрна в функции которая должны возвращать int
Из-за лямбд штоле?
Ну вот, а я сначала хотел все это запихнуть во второй пост, но потом решил, что так лучше видно будет.
> треды порой улетали в бамплимит с поистине космической скоростью
Ага и перекаты даже не успевали делать. А однажды перед тем как перекатились тред успел на 7мую страницу утонуть.
Некоторые либы говно то еще, но есть и годнота же. Как до cpp11 без буста можно было жить вообще не представляю.
Boost::log и boost::config
Вопрос такого плана, имеется базовый класс для эксепшонов и его легендарный метод http://en.cppreference.com/w/cpp/error/exception/what
Так вот, какого хуя const char what() ? Блядь, серьезно?
Есть реально весомая прична ебаться с char* const? Почему не тот же стринг? Я что-то упускаю
> ебаться с char* const
Где там ебля-то? Если нужно что-то сложное сделать то в string кастишь и все. Так, небольшое неудобство.
Вообще, как я заметил, в крестах эксепшоны используются в основном при написании библиотек, да? Редко встречаю их, в той же джаве они на каждом шагу.
Не могу определиться, на чем писать - Qt или SFML оба тулкита юзал неодноразово
SFML естественнее для игор, но с другой стороны - SFML/Network имеет убогое API.
Qt вроде как никто не использует для такого, но с другой стороны - апи для работы с сокетами просто прекрасен.
Так и не понял, на чем остановиться.
В языках без сборки мусора эксепшоны достаточно опасная вещь, нужно хорошо понимать как с ними работать чтобы недопускать утечек памяти. Поэтому некоторые предпочитают их вообще не использовать.
для петов или на фрилунсе это подрубаю https://github.com/easylogging/easyloggingpp
в конторке велосипедим, конечно же
noexcept в c++11 is just for this?
Нельзя так просто. Если залезть в файловую систему то наверное можно кластера дропать - но обратно же уменьшать можно только целыми кластерами, в произвольном месте и на произвольное количество не уменьшишь.
в прошлом треде пытался разогнать аж двадцатью постами за то что юзать boost - это самое худшее что может случиться на проекте
был не понят, так чтож не пытайся даже
Как он в этот тред забрел
байт\t
Вписать EOF вместо 121 байта.
Да
man, unordered_map?
Закрепить пикрел в шапке надо, чтобы вас, тупней, еблом в говно тыкать.
Нет OCHE важного вопроса:
— Меньше тыщи элементов?
— Ога...
— Тогда зделойте пжлст char[] и memcpy()
Порядок элементов тебе важен или нет. Например, для std::lower_bound и std::upper_bound, бинарного поиска и т. п.
Ты из какого сишкотреда выполз?
Здесь имеется в виду очередность вставки/удаления.
Если вкратце, то нет.
Есть конечно костыли, которые каждая 10-я компания свое выкатывает - что-то там в анриал энджин, что-то там в бусте есть, в Qt тоже свое.
>Унаследованная памятка:
>
>Вопросу по синтаксису идут на хуй.
>Лабы идут на хуй.
>"Как мне сделать Х на чистых крестах без библиотек" идут на хуй.
>Все идут на хуй.
>Хейтер сосет члены на пару со своей мамашей.
>
>Тег [code] работает через жабаскрипт-костыль: https://github.com/ololoepepe/MakabaCode
когда уже это уберёшь?
А есть реальные примеры такого заражения, имею ввиду не примеры кода, а существующие угрозы?
tangro говно какое-то зделал, даже разложить на плоскости не смог. Вот как надо, блядь: http://goo.gl/5AIkZc
АААА ПИДОР БЛЯДЬ! МУДЕЛЬ СУКА! Как такое в png скидывать можно вообще, поехавший?
Вообще, когда нюфагочелик спрашивает какой контейнер позволит ему хранить хуитки по [имени]=значению, скидывать вот этот высер параноика немного неправильно, не находишь?
Использовал его, потом написал своё. Раскидывать по файлам там не очень удобно было -- слишком много кода клиентского выходило и внедрение зависимостей громоздким получалось.
Дело двух вечеров, зато всё как мне надо.
>Thankfully, the C++ Standard Library has a cure for this in the form of std::lock — a function that can lock two or more mutexes at once without risk of deadlock. The example in the next listing shows how to use this for a simple swap operation.
Оооокей, а доселе как с этим справлялись? Как это работает?
Писали велосипеды же. Ну типа делаешь общий управляющий мьютекс, который блокирует любые операции с остальными мьютексами. Но вообще это все довольно медленно, правильные посоны критичные места теперь проектируют сразу на атомарных операциях.
Почему вот при a = std::move(b) b обнуляется?
А что с b должно по-твоему произойти?
Вот например, здесь:
http://en.cppreference.com/w/cpp/language/move_constructor
Before move, b1.s = "test"
After move, b1.s = ""
Явного обнуления нет в конструкторе перемещения, ну разве что могу предположить, что оно происходит в самом string'e.
Таки я должен самостоятельно присваивать старым указателям nullptr при работе со своими типами?
Пока не дошёл до них.
Должен. Старое обнуляется только для классов из стандартной библиотеки, у которых это явно прописано в описании move (например, у умных указателей).
А если мне, блядь, производительность нужна до нескольких тысяч запросов за 1 миллисекунду? Что мне выбирать?
Слишком тупо заданный вопрос. Без инфы об окружении и модели обработки это как хуем в воздухе махать.
Ну смотри, допустим, мне нужен менеджер текстур для самописного движка. Задача - избежать загрузки одной и той же текстуры дважды, у каждой текстуры должен быть ID, на который будут ссылаться модели объектов. При этом есть функция Init(), которая, собственно, загружает текстуры в программу. До вызова этой функции отрисовку объектов с текстурами проводить нельзя. После вызова нельзя загружать текстуры.
Допустим, первая задача решается обычным unordered_map с ключом - адресом текстуры на диске. А что делать с ID, на который будет удобно ссылаться? Сейчас у меня это реализовано как двойной указатель на текстуру, в котором до вызова Init() лежит nullptr, а после - указатель на загруженную текстуру.
Я тебя помню. До сих пор не дописал движок и не начал делать игру, кееек.
Какую именно?
>Задача - избежать загрузки одной и той же текстуры дважды
Почему бы и не выделить это все в отдельный блок?
>>617009
Ты, блядь, вася. Каким вообще ебаным хуем контейнер в твоей задаче может стать боттлнеком, если ты читаешь текстуры с, сука, жёсткого диска? Какие, блядь, тысячи запросов в мс? Одну текстуру для каждого юнита 9000 раз загружать чтоле будешь? Коли хочешь прям повыёбываться милисекундами - можешь попробовать ещё dense_map_hash из гугловского sparsehash хотя чо там, как минимум до ляма элементов не намного быстрее любого джява хэшмэпа будет.
Второй части похоже нихуя не понял.
Можешь например пихать в значение хэшмэпа хуитку вида std::pair<адрес текстуры на жд, адрес текстуры в памяти> или просто указатель на структуру в которой будешь менять указатели на адрес. Ещё можешь по человечески попробовать описать проблему, если я таки нихуя не понял.
Так это ж любительский проект. Иногда открываю, дописываю какую-нибудь фичу. Я не работаю над ним 24/7.
>>617052
Ну смотри. Допустим, я загрузил все текстуры в память. Использую только map. Тогда каждый раз при отрисовке объекта я буду производить логарифмический поиск нужной текстуры в контейнере. Каждый раз, для каждого объекта! А если у меня в сцене 10000 объектов? Поэтому простой map использовать нельзя. Или приходить к ухищрениям, как я. Когда для загрузки текстур у меня один контейнер, а для их использования - другой.
Да дебил он странный, где он собрался избегать загрузки дважды?
Кстати, >>617009 можешь глянуть мой загрузчик взять, http://pastebin.com/ULLpfzKi
Так блядь, я избегаю загрузки дважды. Сначала у меня в map добавляются текстуры по ключу - имени файла. Текстуры не инициализируются! Т.е. по каждому ключу лежит нулевой указатель. Потом(после того, как они все добавлены) вызывается Init(), в котором уже через foreach происходит загрузка каждой текстуры из этого map. И только после этого их можно использовать.
Ну ты и даун.
Что тебе мешает проверять наличие данного ключа в контейнере и не загружать дважды? Сука, выколол бы глаз тебе.
Блядь, Я ТАК И ДЕЛАЮ.
Но что делать в рантайме уже при использовании текстур? Поиск по ключу - O(log N), и для рантайма это не подходит. Грузить в другой, более подходящий контейнер? Использовать ссылку на указатель или двойной указатель? Я использую последний вариант, но он не очень гибок. Думаю сделать всё-таки отдельный vector только для рантайма.
Мать твою, тогда ХЕШ
НУ ЧТО ТЫ ЗА УЕБОК ТАКОЙ, Я ТЕБЯ СПРАШИВАЮ?! ТЫ С ТАКИМ УМНЫМ ВИДОМ НАХУЙ ПОДНИМАЕШЬ ТАКИЕ ВАННАБИ УМНЫЕ ВОПРОСЫ, 10^-9 мс сэкономить, охуеть, оптимизатор хуев, даже линерифметическую сложность нагуглил, молодец НО ТЫ, БЛЯТЬ, ДАЖЕ ОСНОВ не понимаешь, деточка, пошел нахуй из этого треда с двойными указателями, ты оптимизирован по жизни, никто кроме нас твоих высеров не увидит.
>unordered_map не допускает дубликатов, даже проверять нихуя не недо;
map тоже, внезапно, да?
std::map<std::string id, std::unique_ptr<Texture>> прекрасно справятся с ебучей задачей этого игродела.
Каких нахуй основ? Я на графике специализируюсь, все эти хэши и сеты нужны только всяким писателям фабрик абстрактных фабрик. И да, у меня на отрисовку кадра есть только 16 мс. Шестнадцать миллисекунд, блядь, это тебе не твой энтерпрайз, когда минутные задержки при поиске - это нормально и вообще оптимизация для байтоёбов. Если я буду одни текстуры из контейнера получать 2-3 мс, то нахуй можно забыть о просчёте физики, постпроцессинге и нормальной анимации. Потому что так разбазариваться временем отрисовки кадра нельзя, это жёсткий рантайм.
Твой хэш тоже медленный, потому что есть коллизии. Чем больше объектов в твоём хэшмапе, тем дольше будет поиск. Один вектор с обращением по ID - куда более приоритетный вариант. Но не является ли это обращение слишком большим оверхедом?
>все эти хэши и сеты нужны только всяким писателям фабрик абстрактных фабрик
Еще один поехавший байтоеб.
Прости, я не знал про O(n)
Тут такой вопрос внезапно: а почему просто не запихать в вектор всё то, что должно быть в текущий момент на экране, и не ебать мозги?
>мой же аргумент
Какой? std::pair? Я код скинул хуй знает сколько постов назад, мог просто сразу сказать про O(n) в умапе, осталось бы десять символов добавить и задача решена.
Блядь, ну, начнем с того... Что если тебе нужно каждый кадр запрашивать текстуру - это уже хуйня какая-то, конечно если у тебя не имитация партиклов которые живут по 2-3 кадра.
У тебя же не одна текстура на всю сцену. А как ты будешь говорить GPU, какую текстуру использовать для конкретного объекта? Правильно, следующей конструкцией:
dc->PSSetShaderResourses(0, 1, mTexture);
Ну охуеть.
Не проще ли ПРОСТО в объекте хранить ссылку на объект текстуры? И искать ее в umap контейнере только при инициализации объекта.
Ебать, а запихнуть это в сам класс религия не позволяет?
А как ещё рисовать объекты? Текстурных слотов в GPU только 16, для каждого объекта ты волей-неволей будешь должен установить его текстуру в нужный слот, затерев то, что в этом слоте находилось.. Конечно, на самом деле ты используешь дескриптор, а GPU дальше сам всё сделает, но это уже мелочи реализации.
Но-но-но, не перекручивай, мы говорили о получении текстуры из контейнера текстур, все что происходит дальше - никого ИТТ не ебет.
Так у меня пока так и делается. Только в классе объекта хранится ссылка на объект текстуры. При вызове функции Init() таким образом инициализируются все текстуры во всех объектах. Довольно удобно.
Но по определенным причинам я всё равно порываюсь сделать запрос по ID.
Каковы причины? Все равно во время жизни объекта будет юзаться только она одна, я бы ее стащил единожды по айди и не морочил себе голову.
Вот, кстати, глянь http://pastebin.com/bzCicdUX
Сам таким пользуюсь, разве что нужно заменить на umap, как тот анончик подсказал.
Два в одном - и выгрузка, и загрузка, если такой текстуры нету еще в контейнере.
>16 мс
Это не жесткий рантайм, это так, детская песочница. Жесткий рантайм - это планировать работу ПО оптимально под политики планировщика системы. 16мс, охуеть вообще, дожили.
А вот надо будет тебе ВСЕГДА 16 мс иметь, и это будет самый что ни на есть обычный жесткий реалтайм.
> std::map<std::string, std::unique_ptr<T>> m_resources;
Почему бы не хранить хэш строки, а не саму строку, а?
В игорях так не бывает.
Конструкторе или операции присваивания.
Жесткий реалтайм - это QNX, и уж точно не игры. Если допустим дрифт в 100мкс это уже soft-realtime.
мимооп
У тебя какие-то странные термины. Жесткий реалтайм - это гарантированное время отклика. Хоть час, лишь бы гарантированное. Мягкий - это когда чаще всего время отклика равно предполагаемому, но иногда допустимо некоторое отклонение.
Не, я к тому, что если ты и сам в курсе, что так нужно - почему бы и нет?
Этот код я взял из курсовой работы годовой почти давности, и там было всего 25 текстурок.
Думаю потому, что сравнение строк и сравнение чисел различается по скорости.
> Этот код я взял из курсовой работы
Если текстуры не большие, то имеется смысл объединить их в одну большую текстуру и менять координаты при рисовании или создать массив текстур.
Я тогда не думал, что так можно было с хешем, лол.
А насчет кропалки - в моем случае и так текстуры резались на анимации, один большой файл был бы накладным в реализации, наверное.
Мне же не только текстуры выбирать из контейнера за это время, верно?
>>617154
Ну, например, дело в том, что в DirectX11 текстуры имеют тип ID3D11ShaderResourceView, в DirectX12 - ID3D12ShaderResourceView, в DirectX9 - IDirect3DTexture9, а в OpenGL вообще GLuint.
И есть три варианта решения возникающих проблем:
1. В абстрактных классах объектов сцены хранить двойной указатель на void, а в наследниках, специфичных для конкретного рендера, делать reinterpret_cast, благо оверхеда 0. Минусы - выглядит довольно некрасиво. Это то, как сейчас делаю я.
2. Написать класс-враппер Texture, в котором будут методы GetD3D11Tex(), GetD3D12Tex() и т.д. Хранить в нём несколько указателей(md3d9Tex, md3d11Tex и т.д.), только один из которых валиден. Т.е. допустим, если сейчас у нас режим рендера в D3D11, то функция GetD3D11Tex() будет возвращать нужный нам дескриптор, а при попытке вызова GetD3D12Tex() будет возвращаться nullptr. Минусы - оверхед по памяти и чуть-чуть по скорости. Этот метод мне нравится меньше всего.
3. В классах объектов сцены хранить ID текстуры. В классе менеджера текстур иметь методы GetD3D11Tex(UINT id), GetD3D12Tex(UINT id) и т.д. Минусы - небольшой оверхед по памяти(дополнительные контейнеры для разных типов в менеджере текстур) и большой по скорости(дополнительная операция чтения из памяти при каждом использовании текстуры). Над этим методом думаю.
Он наверно это написал чтобы отвлеч нас от гемдева и текстур. Теперь будет семёнить.
Да я часто этим говном пользуюсь, даже чаще гиста, а так бы запилил удобный интерфейс, синхронизацию паст с локальным хранилищем, это к примеру конечно.
Ноуп, не буду, зачем мне это нужно? Сритесь дальше, может и до моей охуительной задумки дойдет
К слову, термины "игры" и "геймдев" я считаю слишком зашкваренными. Я предпочитаю термин "графические приложения реального времени".
>графические приложения
А если игра без графики? Или она настольная? Тогда это нихуя не графическое или не приложении. Значит термины "игры" и "геймдев" убрать нельзя.
А зачем для этого делать что-то на Qt если такое можно и на простых скриптах провернуть?
Да, но я специализируюсь только на графических приложениях реального времени.
>захотелось мне наваять что-нибудь на Qt,
Мне кажется что он хочет потренироваться и ему похуй насколько полезно/конкурентно способно и популярно его приложение.
Есть класс Point. Он умеет пару полей, пару функций и не имеет конструктора копирования. Есть какая-то функция, которая имеет в параметрах объект Point.
Я создаю объект Point:
Point a;
Далее, вызываю функцию:
do_something(a);
Когда вызовется функция, то создастся побитовая копия "a" и будет указывать на него же. Когда функция закончит выполнение, то вызовется деструктор этого созданного объекта. И получается, наш оригинальный объект "a" тоже испортится деструктором?
Так а эта копия не будет указывать на оригинал? Как там скопируются значения, если конструктор копирования не определен?
> не будет указывать на оригинал
Покажи определение функции тогда.
> Как там скопируются значения, если конструктор копирования не определен?
Его сделает за тебя компилятор.
в оригинале объекта указатель на строку, а в деструкторе эта стока удаляется. После выхода из функции а повредиться?
Ну а зачем тогда вообще нужен конструктор копирования? Приведи какой-нибудь пример.
Вот да, я про это и спрашиваю.
Ну, то что создаётся дефолтный конструктор копирования, ничего не значит. Как он копирует ссылки/указатели?
Как написать так чтобы программа не ломалась, а выводила тру и фолс? После второго вызова пишет невалидный указатель и ломается.
А этот почему сначала 5 и 0 выводит, а потом ломается?
>If you are planning to use the DHT because you've heard that it is “faster” than the DFT (FFT), stop here. The DHT is not faster than the DFT. That story is an old but enduring misconception that was debunked in 1987.
Ядро быстрого преобразования Хартли — это
cos(x) + sin(x) == sqrt(2) * cos (-pi / 4 + x)
Как оно может не быть быстрее DFT? Нет, ну как?
В общем, когда твой объект удаляется в main это происходит уже второй раз (1ый раз в f).
Для таких случаев придумали shared_pointer.
Ну или передавай по ссылке в функцию.
Точнее при удалении происходит очищение памяти.
a: а linux'вская версия gcc может exe'шник выдать?
b: Может.
b: g++ file.c -o file.exe
b: ./file.exe — всё работает
Наверное.
Варианты навскидку:
1) У питуха mingw, он действительно конпелирует для венды и запускает через wine.
2) .exe по какой-то причине не является настоящим расшерением файла.
http://www.tinc-vpn.org/examples/cross-compiling-windows-binary/
Кстати, мне как фрилансеру тема охуенная, заказчики бывают на винде, но так влом ребутиться и менять полностью свое окружение.
Для этого и нужен конструктор копирования. Когда ты передаешь объект в функцию (таким образом каким ты его передаешь) создается его копия. Конструктор по умолчанию создает неглубокую копию - тоесть получается что у двух объектов указатель i указывает на одну и туже область памяти. Потом когда после завершения функции один из объектов (копия) автоматически удаляется - освобождается (в вызове деструктора) и память на которую указывает i. Указатель в изначальном объекте начинает указывать на уже освобожденную память что UB. Нужно или избежать копирования, или, что правильней - переопределить конструктор копирования - с глубоким копириванием или другими способами избежать преждевременного освобождения памяти на которую указывает i (к примеру i можно сделать умным указателем). Гугли "правило трех C++".
> В linux вообще нет понятия "расширение".
Схуяли нет? Просто там расширение не определяет исполняемый это файл или нет.
$ echo "#include <vector>" > aaa.cpp
$ gcc -shared aaa.cpp
$ mv aaa.cpp aaa.c
$ gcc -shared aaa.c
aaa.c:1:18: fatal error: vector: No such file or directory
#include <vector>
^
compilation terminated.
сделал всё как у тебя,всё равно
Ошибка\tC1083\tНе удается открыть файл включение: corecrt.h: No such file or directory\tConsoleApplication8\tc:\program files (x86)\microsoft visual studio 14.0\vc\include\crtdefs.
как я понял нужно изменить католог включения?или что,где найти этот файл ?
::function_name();
То-есть, без указания пространства имён. Просто два двоеточия.
Дебил тупой? Дебил тупой.
aaa.cpp и aaa.c разные названия, тебе не кажется? Extension тут при чем?
Спасибо. Я догадывался.
Почитал шапку. А к алгоритмам когда приступать? Что вообще читать чтобы пердолить программирование как бог?
1) Что из опенсурсных проектов можно почитать для усвоения хорошего стиля современного цпп?
2) Какие компиляторы сейчас поддерживают полностью с++11 и c++14 стандарт?
Есть спрайт прямоугольника rect. Есть окно window и его view.
Допустим, я хочу, чтобы при растягивании окна через
window.view = sf.View((0, 0, event.size[0], event.size[1]))
и изменении масштаба через
window.view.zoom(event.zoom)
абсолютный размер этого прямоугольника и его положение относительно границ окна не менялось.
Собственно, что уже пробовал:
1) присваивать windows.view кастомный sf.View(0, 0, 1.0, 1.0) - в таком случае меняется размер при ресайзе окна.
2) не присваивать кастомный view - тогда меняется размер при зуме.
Вопрос: что сделать, чтобы всё работало?
В шапке в разделе про IDE не хватает пары строк про божественный Xcode для макоёбов. Поправьте чтоли, а то нубасы же так и будут себе тормозной Clion втыкать.
1. Как избавиться от таких хитрожопых юзеров, которые смогут в клиентском коде вот так взять и подхачить мемсетом виртуальные методы?
Только начинающий, а уже ебанутый крестоеб.
Вот кому в голову может прийти так нахитрожопить? Это же непереносимо и поломается при любом обновлении.
Возвращать ошибки не кодами, а строками, блядь, это же надо додуматься, нахуй.
Почему? Да даже если и странный, то по крайней мере в нём всё досконально разобрано, так что он готов к применению.
То-есть, передать по ссылке значение в функцию. Значение, на которое указывает ссылка изменить и потом после завершения функции его использовать?
Ну да, проверил, всё норм. Просто наткнулся на гитхабе у чувака на метод, который использует указатели. Думал, может почему-то нельзя так сделать.
Современного же. То есть с 11+ стандартами. Я тут порылся нашел пару фейсбучных либ
https://github.com/facebook/wangle и https://github.com/facebook/folly/ вроде ок должно быть.
Я тебе открою тайну - ссылка это есть указатель, только очень ограниченный в своих телодвижениях и возможностях.
Обоснуй или иди нахуй, ньюфаг. Имя переменной, привязанное к адресу... Охуеть просто.
>работать с ним надо как с обычной переменной
Просто промолчу. Когда уже каникулы заканчиваются?
Ну ок, "name alias", у меня плохо с русским.
>И работать с ним
>с ней
фикс
int a = 1; // peremennaya
int& b = a; // ssylka
int* c = &a; // ukazatyel'
&a == &b; // true
>>работать с ним надо как с обычной переменной
>Просто промолчу. Когда уже каникулы заканчиваются?
То есть, b, по твоей логике - указатель? Может его разыменовывать можно, pointer arithmetics применять?
Анан, как заделать что-то вроде динамической (не уверен, что это можно так назвать) типизации в плюсах? На пример, есть json/xml/bencode файл/строка. Парсим это всё и выплёвываем объект/ноду, содержащий другие ноды. Эти ноды содержат значения (инты, флоаты, строки) либо словари/списки других нод. Если ты понял мой бред, как такое можно заделать? Через наследование или как? Пни позязя в нужном направлении. С меня как всегда.
Пиздос, полон тред дегенератов. Причем здесь auto, если ему надо в _рантайме_ генерировать ноды? Скажи мне, жертва инцеста.
https://gist.github.com/anonymous/4dc4c242c0975ed33065
так, получается вот так с юнионом. правда с геттером какая-то пизданога получается.
если делать как описано здесь http://stackoverflow.com/a/26163140
и потом кастовать внутри свободной функции к нужному типу (через свитч по типу). как по вашему, нормально будет?
>прочитал с++ за 21 день и кудахкает
Эти проекции. Вот этот бред:
>указатель, ограниченный в своих телодвижениях и возможностях
ты оттуда и вычитал, да?
>>618008
Ладно, допустим, это указатель. А что у нас является значением указателя? А что будет являться значением b? >>617967
И почему тогда &a == &b, если мы сравниваем указатель на a с указателем на указатель на a? Можешь сконпелировать и убедиться. Тебе не помешает.
Указатель -- переменная, содержащая адрес, указывающий на кусок памяти. Естественно у этой переменной есть адрес.
Мимопроходил
Адрес адреса? Что, блядь? Адрес указателя, может быть? Так схуяли адрес указателя на int равен адресу самого int? (полагая, что мы все еще в рамках манявселенной, в которой ссылка это указатель)
Ссылка - это простенький сахарок над указателем. Но нужно отдавать себе отчет в том, что это указатель, иначе можно выстрелить в ногу.
Ну тут уж хуй знает, если перенос на какие-нибудь ебнутые эмбедеды то может и полетит к хуям, а практика показала что во вменяемых компиляторах кланг джей-си-си и мсвс указатель идет вначале а потом поля. Твой ответ как пуканье в офисный стул - такой же бесполезный. Меня интересует секьюрный аспект, вот нахуячу я либу, с кококо архитектурой, а Васян в клиентском коде ебнет мемсет и нагнет меня раком. Вот собственно умных С++ господ я и спрашиваю, как такое ситуацию обойти секьюрно
1. Запускать код на собственном сервере.
2. Ебаться с шифрованием, виртуальной машиной и антиотладочными приемами.
Все. А твои йоба-хаки имеют мало смысла, если у человека будет доступ к бинарникам твоей либы (не говоря уже об исходниках), поменять он сможет что угодно и как угодно.
Это ПРОСТО, блядь, биндинг/алиас/привязка/whatever, они не занимают память сами по себе, в отличие от указателя. Ладно, "статический" (компайл тайм) указатель, если так хочется.
http://pastebin.com/nUF9DYzp
Вывод:
14 88 228
14 88 919
Если бы на ideone можно было легко вывести ассемблерный листинг, я бы это и там показал. http://stackoverflow.com/questions/2336230/difference-between-const-pointer-and-reference
И больше не неси чуши с такой агрессией.
Да, если бы это был указатель, то во второй строчке было бы 12 (предполагая x86_64)
https://ideone.com/Hk1gbP
Ладно, ладно, ты подебил. А что на это скажешь?
http://pastebin.com/ydMuxxtH
Если у вас не хватает серого вещества, чтобы думать и анализировать, можете продолжать за пределами этого треда.
Чемпион этого вечера - >>618113 который сам опроверг себя.
Никто, блядь, не говорил что ссылка = указатель.
Не нужно вырывать из контекста.
Windows: Visual Studio
Cкачать: https://goo.gl/qgAAc6
Инструкция: https://goo.gl/JMd57G
Linux: Code::Blocks
Cкачать: https://goo.gl/ZjrPgb
Инструкция: https://goo.gl/mFln8S
OS X: Xcode
Скачать: https://goo.gl/NEhJC4
Инструкция: https://goo.gl/TlN2QC
> Унаследованная памятка:
И пора её убрать
>>617955
https://stackoverflow.com/questions/57483/what-are-the-differences-between-a-pointer-variable-and-a-reference-variable-in/57492#57492
>Since a reference has the same address as the original variable itself, it is safe to think of a reference as another name for the same variable.
> This variable is on the stack. Since a reference has its own space on the stack, and since the address is the same as the variable it references.
> This implies that there is a real address of a reference that the compiler will not tell you.
в иде лучше не давать выбор т.к. будут вопросы про отличия и нужно много расписывать а среди нас вряд ли есть тот кто все иде пробовал.
Cледуя той же логике, можно сразу на завод идти.
>Почему стоит использовать именно C++?
- Очень быстрый
- Достаточно высокоуровневый
- Адаптируется под разные задачи
- Всегда останется популярным
> Но он же давно устарел!
С++ никогда не вымрет т.к. нужно поддерживать старые проекты и последнее время он стремительно развивается.
>Сейчас все пишут на %languagename, а кресты сосут у него!
тут вообще нужно переделать вопрос. типа нахуя нужны кресты и что на них пишут. потом над этим подумая и ты оп тоже попробуй
> Окей, я решил вкатиться. Какие же книги мне читать?
вот это нужно куда-то вынести где есть разметка и нет регистрации. Убрать устаревшее и добавить дейтла или как эта книга называется которыю какой-то анон из треда в тред в шапку реквестит
вынести надо т.к. её удобно использовать без треда и делает шапку трудно просматриваемой. долго листать и искать нужный пункт когда список книг отвлекает
кстати можно ещё ссылку на вот это кинуть http://www.cprogramming.com/c++book/jumping_into_c++_sample.pdf
> Хуле тут так сложно? Я открыл учебник, там какой-то ад!
Попробуй https://goo.gl/kVaela т.к. после выхода 11ого стандарта язык стал проще. Но С++ остался очень сложным языком поэтому лучше не учить его первым. Перед крестами почитай про алгоритмы, архитектуру компьютера операционные системы. тут наверно надо дать ссылок на краткий курс и думаю TL;DR не нужен
>Не буду я все делать сам! Подавайте сюда софт, который все сделает за меня и подотрет мне жопу!
Думаю можно так и оставить. Но может перефразировать вопрос? типа дайте список программ упрощающих жизнь. Может ещё от мата в шапке избавиться?
>Я не умею читать.
так и оставить. о чём и говорил раньше. из-за слишком большой шапки я перепутал порядок вопросов
>Ты охуел? В этих книгах по тысяче страниц! Хочу коротких статей.
а это снова перефразировать надо т.к. статьями книги не заменить. и там поясняют какой-то отдельный аспек но подробно.
>Q: Мне надоело писать велосипеды, какие у вас тут популярные либы?
>Q: Нужно зделать %монструозная_хуйня_нейм, но я обосрался от одной мысли о написании ее с нуля, что же делать?
это тоже мне нравиться. вопросы только объединить наверно надо как-то. как вариант вместо двух абзацев текста вставить ссылку на вики или ещё куда-то где так-же пояснили. и ещё можно литературу продублировать в библиотеке которая будет вынесена из шапки. зделать через с в следующий напиши
Flyweight
1. Что ты там прятать собрался от своих пользователей?
2. Экспортируй из длл, пряч детали за pimpl, не используй virtual
Делает побитовую копию? То-есть, мне следует его использовать, если хочу скопировать значения, но не указатели/ссылки?
Копирует область памяти на другую область. Предполагается, что области не пересекаются.
Часто применяют для копирования POD.
Если у тебя простые типы (числа), то =.
Если у тебя указатели на простые типы, то a = b
>Если у тебя простые типы (числа), то =.
>Если у тебя указатели на простые типы, то a = b
Не понял. Указатели будут указывать на оригинальные значения, верно?
>foo.cc(238): x called with y
>bar.cc(120): Starting up z
и т.д.
Но ведь язык компилируемый, откуда там какие-то номера строк? Не может же оно исходники хранить. Ладно там в при дебаге в вижуал студиях показываются, но в готовом продукте?
Если бы ещё на вопрос при этом ответил...
Впрочем, там что-то такое, наверное, – http://stackoverflow.com/questions/2849832/c-c-line-number
Спасибо.
Ты будешь загружать текстуры миллионы раз в секунду? Ёбнутый?
Загружаешь ты их в видеопамять один раз при загрузке уровня, и больше ты на них не ссылаешься.
Или ты софтверный рендер пишешь? Тогда загружай в вектор текстуры, в другой вектор имена, потом для каждой модели делай линейный поиск и храни прямой адрес на текстуру в векторе.
Какой-то даунский вопрос.
Если пользователя припрет, он и из-под вмпротекта код и секретные данные вытащит. Тру стори.
Да бляяяяяяяядь, как вы меня заебали.
Н_Е! З_А_Г_Р_У_Ж_А_Ю! Я! Т_Е_К_С_Т_У_Р_Ы! В! Р_А_Н_Т_А_Й_М_Е! ОНИ У МЕНЯ ЗАГРУЖАЮТСЯ ПРИ ИНИЦИАЛИЗАЦИИ! ЕЩЁ РАЗ: ПРИ ИНИЦИАЛИЗАЦИИ! И ЕЩЁ РАЗ: ПРИ ИНИЦИАЛИЗАЦИИ! В КОНТЕЙНЕР! ГЛАВНАЯ ПРОБЛЕМА - КАКОЙ КОНИЕЙНЕР ДЛЯ ЭТОГО ИСПОЛЬЗОВАТЬ!
Давай, скажи ещё раз, что я тупой и не понимаю, что трактором нужно пахать поле. А я, блядь, ещё раз взбешусь и отвечу, что я знаю, блядь, мне нужно узнать, трактор заправлять бензином или керосином. А ты ещё раз ответишь, что как можно быть таким тупым, чтобы не знать, что трактором вспаэивают почту.
Можно сделать наследование от базового класса, носить с собою тип конкретного и кастить обратно при необходимости. Но как-то это говнецом попахивает, придется часто дергать хип и вообще переплачивать за виртуальные функции.
Можно налепить несвязанных классов и используя тонну многослойного бойлерплейта проталкивать их к нужным адресатам.
Что лучше и есть ли еще варианты?
На мой взгляд, такая функция в 100% случаев должна подставляться. Потому что единственная причина, по которой код был вынесен в отдельную функцию, это избегание дублирования кода и/или повышение читаемости кода (если функция вызывается 1 раз).
Но что-то мне подсказывает, что функция не подставится.
>а конкретнее это всякая биржевая хуита. Нужно быстро преобразовать во что-то
Json какой-нибудь или xml.
Вот, смотри, это зависит чисто от оптимизации компилятора.
А поскольку компиляторы соответствуют стандартам(msvc, например, полностью поддерживает C++11 и наполовину - C++14), то и в любом другом компиляторе, поддерживающем те же стандарты, должен быть тот же результат.
Круто. А можешь на русский язык пересказать?
Inb4: O2 сделало подстановку, но всё же, вдруг какие-то тонкости/дополнительная информация.
>в любом другом компиляторе, поддерживающем те же стандарты, должен быть тот же результат.
про undefined/unspecified/implementation-defined behavior слышал когда-нибудь?
Это ты уже всех доебал
std::unordered_map, долбоеб, unordered_map.
Моча, забаньте этого пидора, он уже сам с собой.
>Search, insertion, and removal of elements have average constant-time complexity.
>логарифмический
Это было к утверждению >>618516 о том, что высказывание было верно только для данного компилятора. Если бы это было в стандарте, то ответ был бы верен для любого компилятора. А так вопрос не совсем имеет смысла.
>>618547
/O2, как можешь заметить, не только сделало подстановку, но и убрало лишние операции сложения. Оптимизация - вообще довольно обширная тема.
Часто приходится руками рулить в критичных местах, где компилятор стесняется инлайнить. Реально инлайн почти всегда повышает производительность, но увеличивается код и время компиляции. Компилятор не знает, какие куски кода критичны по производительности, поэтому не может сделать правильный выбор.
>Компилятор не знает, какие куски кода критичны по производительности
Говорят, что для этого pgo придумали.
У хешмапы не логарифмический а константный поиск (в большинстве случаев). У бинарного дерева (с балансировкой) гарантированый логарифмический поиск по ключу. Так как в после изначальной инициализации добавления новых элементов не будет, то можно просто отсортировать в массиве по ключу и искать бинарным поиском - поиск все также за логарифм, но экономия памяти, у бинарного дерева больше накладные расходы памяти на элемент.
ПОТОМУ ЧТО БЛЯДЬ, А ПОСЛЕ ИНИЦИАЛИЗАЦИИ ЧТО МНЕ ДЕЛАТЬ? НУ ЛЕЖАТ У МЕНЯ 50000 ТЕКСТУР В ПАМЯТИ, КАК МНЕ ВЫБРАТЬ ИЗ НИХ КОНКРЕТНУЮ ДЛЯ ОТРИСОВКИ ИМЕННО ДАННОГО ОБЪЕКТА, ДА ПОБЫСТРЕЕ?
Много возни с неопределенным результатом, легче руками указать форсированный инлайн.
Так вот я и думаю сделать так. Только в качестве ключа использовать целый ID, что даст возможность делать что-то вроде
void GetTexture(UINT id)
{
return mTextures[id];
}
Только вот и ставлю я вопрос, а нельзя ли сделать ещё проще.
Пиздец, при чем тут контейнер? Ты хочешь делать object->texture_id ты предлагаешь делать container.get(object->texture_id? Тупое ты говно.
Ну блядь, уже мозги потекли. Ты понял меня.
Никакого смысла в этом нет, пока у тебя рендер один. Как только у тебя становятся два разных(d3d11 и d3d12, например), то возникают проблемы. Контейнер под текстуры у меня один, типов текстур много, а идея враппера мне не нравится. Введение ID делает всё проще.
__LINE__
https://msdn.microsoft.com/en-us/library/b0084kay.aspx
у гвцц и шланга практически тоже самое, гугле
Если у тебя контейнер один, то и указатель тебе нужен тоже только один - того же типа, что и mapped_type этого контейнера.
Т.е. если у тебя есть std::map<string, some_type> container; то
struct Object {
some_type texture_id;
Object(const char texture_string) : texture_id(&container[texture_string]) {
}
}
И по-другому быть не может. Если у тебя несколько рендереров, то ничего здесь не изменится.
Ну блядь, я так и собираюсь. Но не знаю, есть ли вариант поэффективнее.
> Но не знаю, есть ли вариант поэффективнее.
Я не понял ты там убийцу какого-нибудь крузиса пишешь?
Нет?
Храни в векторе, id будет порядковым номером элемента. Быстрее наверное уж не будет.
Еще один даун не в курсе, зачем нужны указатели.
>Нет, но это же не значит, что я не должен думать об эффективности.
Ты ещё ничего не сделал, а только сидишь и рассуждаешь как правильно было бы сделать.
Так и будешь сидеть ничего не сделав.
Нет, не можешь. Ты только что кукарекал о том, что "Никакого смысла в этом нет, пока у тебя рендер один. Как только у тебя становятся два разных(d3d11 и d3d12, например), то возникают проблемы.".
Ты очень тупой, не можешь продумать мысль на 2 шага вперед, и в итоге тебя тыкаешь в собственное говно, ты придумываешь кукарек, как бы свое говно обосновать, пока не выйдешь на второй круг своих сверхманевров.
Но блядь, у меня уже _три_ разных рендера. Проблемы небольшие _уже_ есть. Я их_устранил_, но не изящно. Спрашиваю о более изящном методе - мне начинают городить какую-то хуйню, которая у меня уже давно решена и даже не рассматривается в вопросе.
Нихуя у тебя нет. У кого есть, показывает код. Ты вместо этого уже полгода бегаешь со своим ДВИЖКОМ, на котором не будет ни одной игры.
Окей, код чего тебе показать? Код объекта сцены, который не выглядит изящно и нужно это решить? Какой из классов - код объекта d3d11-сцены или какой-нибудь ещё? Или код менеджера текстур, который не выглядит изящно и нужно это решить? Или код отрисовки? Или код инициализации? Кода слишком много, чтобы уместить его в один пост, да и не хочу показывать слишком много.
И да, какие нахуй полгода? Писал месяц назад в первый раз, этот раз второй.
Ты взял указатель на указатель и попытался ему присвоить адрес вектора
Ну не на твою мамку же. На какой объект?
В говнокоде потом сложно разобраться.
Сейчас работаю на скриптоязыках. Фреймворки, абстракции, код писать - одно удовольствие.
И вот открыл я официальный репозиторий биткоина. Файлы в тысячи+ строк, все понамешено. На первый взгляд - write-only код. Казалось бы - область явно сложнее веба, но почему эти "мастера" не освоили элементарные паттерны?
>Сколько лучше тратить времени на непосредственно программирование?
Чем меньше, тем лучше. Хорошая программа - это уже написанная программа. Если тебе нужно программировать, ты уже делаешь что-то не так.
>А то ведь можно десятки лет говнокодить, потом прочитать пару книжек и сразу апнуться на некст левел.
Нельзя.
Потому что с них никто этого не требует, а паттерны ради паттернов не нужны?
>"мастера"
Правильно, так их! Не знаешь или не используешь тырпрайз стандартов кодинга - не программист. Поясни им по хардкору, чтобы в следующий раз боялись запускать иде, не вызубрив паттерны абстрактных фабрик интерфейсов!
кушай-кушай, наслаждайся!
обьектно ориентированного подхода в программировании
конечно иногда имеет смысл создать какойнибудь класс
но это очень редко
что мы хотим добиться создавая класс?
нужно осознать что универсальное не может быть шаблонным
и наоборот шаблонное не может быть универсальным
как только вы осознаете этот факт то вы сразу
выбросите все свои книги про обьектное программирование
создатели ООП так же это понимали
сначала никт ои не увидел тех капканов которые
раставлены под слоем конфетных оберток и красивых лозунгов
и тогда они были вынужены придумать "шаблончики "
но эти самые шаблончики все равно базируются на
ограниченности классов и это путь в никуда
только процедурный подход универсален
За что ты так с русским языком?
Чутка изменить и пойдет:
Сначала никто не увидел капканов,
Под слоем конфетных оберток раставленных.
Но чего же хотим мы добиться созданием
Классов шаблонных без осознания и понимания
Принципов мира объектных абстракций и карикатур
Куда следует стадо баранов
Принять не способных подход процедур
>>а linux'вская версия gcc может exe'шник выдать
Следующие действия происходят на Linux системе
>>g++ file.c -o file.exe
gcc компилирует файл file.c в исполняемый файл с именем file.exe
Поскольку эта команда была выполнена на Linux, исполняемый файл имеет формат ELF, а не PE
>>./file.exe
Запускает исполняемый ELF файл на линукс системе.
Линуксу все равно какое расширение у файла, очевидно что все работает.
Файл file.exe не является исполяемым файлом Windows.
На самом деле на линуксе можно компилировать исполняемые файлы для Windows, если интересно гугли про кросс-компиляцию.
Порой натыкаюсь в коде на строки, типа:
Error("Wrong number");
Что это такое?
Кто что может сказать про Intel SSE? Кто-то использовал? Стоит ли использовать?
Если у тебя так много текстур, что логарифмический поиск тебя не устраивает может быть есть смысл уменьшить число текстур. Использовать текстурные карты или процедурные текстуры?
Еще один вариант, запили свой контейнер, который с O(1) доступом по ключу как Dictionary в .NET.
Твоя проблема звучит так, как будто у тебя проблема на самом деле с архетектурой.
Да он просто покукарекать любит.
Даже если у него там тысяча текстур, разница по скорости будет - жалкие доли секунды. Даже если там написать вообще дикий костыль со сложностью O(n^5).
Если интересно, поковыряй. Тогда будешь понимать, где его использовать. Матрицы поумножай, фракталы порисуй
> нет 60 FPS - можно удалять движок нахуй
Давай ты не будешь тут рассказывать про то, как можно написать хоть что-то сложнее хеллоуворлда одному. Даже всякие оупенсоурс проекты и движки всяких Кирилов с геймдев.ру и то по-лучше твоего будут, не говоря уже о всяких там край-энжинах.
Не знаю, поищу.
Я думал это какое-то стандартное средство.
Хотя не исключаю, что это просто функция, которая пишет что-то в лог.
Где-то в менюшке есть rebase program, одна кнопка и готово
Если операторов много, но они простые(типа сложение/вычитание трех координат точек), стоит вообще делать наследование или лучше просто создать новый класс?
Все в точности как у обычных функций.
Оператор есть иной синтаксис функции.
Бьерн Страуструп - Программирование. Принципы и практика использования C++ (2015)
cin>>a,b;
убучие кресты компилируют эту хуеты и прога не работает. блять что он от это запятой ожидает? почему не вывести сообщение об ошибке нет надо заставть пол часа искать эту ебучию ошибку напхуй. бесит сука
C++
почему только эти?
Что мешает иногда смотреть в раст.
Про высокий порог вхождения ещё наверно надо написать. Сначала он мешает, а потом помогает.
Программирую на PLC, лол
передача в функцию как аргумент. 4 байта вместо всего массива
Если я не ошибаюсь, переиздания с 14 стандартом еще не было. В 2015 делали допечатку, она не отличается от издания 2011 года.
Так это что, Скотт больше не будет книжки пилить? Вот это действительно хуевая новость.
Тебя даже новый год не разбудил...
ДА ОНИ ОХУЕЛИ!
Я до сих пор стараюсь не юзать всякие фичи из с++11, так как не хочу лишних багов добавлять, а тут уже какие-то вообще неясные фичи появляются.
>51года
Лол, пруфы были какие-то? Чёт не могу представить, чтобы на сосаче сидел кто-то 30+лвл.
Аркоту около 40.
Нет конечно. Просто похоже на комплимент напрашивался. Может анон мимо проходил и из профиль этого деда с хабра скопипастил предложение на харкач.
Почему? А если попозже? Просто очень вероятно, что в ближайшие лет пять некому станет обеспечивать семью
В епам на собеседование первокурсников даже не пускали. В остальных конторах так же наверно.
>В епам на собеседование первокурсников даже не пускали
В епам первокурсников даже на собеседование не пускали
так наверно красивее
Первый и второй курс - самое тяжёлое время для студентов. Да и глуповаты они еще. Брать таких на работу - геморрой. После - можно.
Олимпиадников вообще не любят в энтерпрайзе, слишком много гонора при нулевых практических навыках.
Но как доп занятие для состоявшегося девелопера - хорошо.
Я же не пробитый олимпиадник и место свое знаю, просто указал, чтобы было понятно, что кодить умею, а в энтерпрайзе вообще ноль.
Под энтнрпрайзом я подразумевал сколько-нибудь серьёзные конторы с продуктом и рынком (даже небольшая), а не Рога&Копыта© в которой только директор, админ, девелопер и ОХУЕННАЯ ИДЕЯ КОТОРАЯ ДОЛЖНА ВЗЛЕТЕТЬ
Видишь, я настолько ноль, что даже не догнал, что есть энтерпрайз. Я всегда делил программирование на спортивное и промышленное.
То есть я правильно понял, что до третьего курса мне соваться никуда смысла особого нет, а в случае финансового пиздеца идти грузчиком/кассиром/etc?
Вписывайся на вские университеты от контор. Могут заметить и взять к себе.
Но в текущих условиях потребность в таких джунах очень низкая.
Лучше думай как перекатиться на учёбу в Европу. Там побольше возможностей.
Никто не будет с джуна требовать знаний больше олимпиадных. Может знакомство с фрейморком каким (буст там, или кьют). А если требуют, значит хотят найти мидла на зарплату джуна - смысла в такие идти мало. Найчиться самостоятельно (тоесть не работая) очень тяжело, фактически единственный вариант - изучать опенсорсные проекты, читать чужой код.
Пробуй в опенсурс. За год-полтора сможешь очень сильно подтянуть свои умения. Да и красивый профиль на гитхабе все любят
как за границу?
Нет, контрибутить. Исправлять какие-то мелкие ошибки, стиль кода, документацию править. Научишься ориентироваться в коде, читать его, плюс контроль версий, сборка разными способами, ревью кода. Все что необходимо для работы.
>Научишься ориентироваться в коде, читать его, плюс контроль версий, сборка разными способами, ревью кода.
а если не умею как научится?
Спасибо, а какого плана проекты смотреть? Просто на гитхабе искать? Я, помнится, на хромиум смотрел, кажется, но ничего не понял
Жопой. Старайся, пытайся, пробуй.
Не будь ленивым уебаном, которому подавай подробный howto и кнопку makemeawesome
Ну вот и попробуй собрать.
Параллельно найди какую-нибудь средне популярную либу или утилитку с десятком открытых issue. Попробуй найти среди открытых что-нибудь попроще, типа стиль кода поправить или мелкий фикс запилить. Часто, авторы забивают на такое, пока есть более насущные проблемы и задачи. Ещё хорошо воспользоваться каким-нибудь статическим анализатором кода (cppcheck) и поправить его замечания.
Спасибо большое
>олимпиадник
>10 класс
Ты о чём вообще? Какие еще олимпиады? Школьные что-ли? Или всякие там codeforces?
>с ООП не очень
Что там мочь-то? Или ты имеешь ввиду, что навыки с++ уровня пишешь говнокод в main функцию?
И школьные, и школьно-командные, и кфчик пишу по возможности
Ну, на олимпиадках, понятное дело, все в main лью и вспомогательные функции, а просто так кодить особо не доводилось. Знаком с основными принципами, с синтаксисом тоже, но сказать, что я умею в ооп не могу
>умею в кресты на уровне олимпиадника, то есть базовые конструкции, стл
на уровне районного олимпиадника или даже выше? дейкстру без гугла напишешь?
А вообще, что значит знать СТЛ? Я вот за последний год кроме вектора, стринг и всяких мелких функций, вроде min, max, swap ничего и не использовал. Так зачем мне что-то еще знать?
Бывало раньше юзал стэк, куча, мэп, вот это всё, но чтобы ими пользоваться, достаточно загуглить просто, посмотреть сложность операций и вперед.
Вот этого двачую.
Сам планирую пока работу не искать, а после универа устроиться фулл-тайм на что-то, связанное с графикой. Потому что тут опыт Кирильства хоть как-то будет цениться, в отличие от обычных компаний, которые просто смотрят на опыт работы. И там, надеюсь, не будет конкуренция с чуваками, уровня НУ Я РАБОТАЮ СО ВТОРОГО КУРСА, ПОРАБОТАЛ ТАМ С С#, ПОРАБОТАЛ ТАМ С С++, ПОРАБОТАЛ В РАН'Е, ВОТ ТЕПЕРЬ К ВАМ ПРИШЁЛ.
Я считаю, вот это всё маняфантазии про РАБОТАТЬ ПОСЛЕ ПОСТУПЛЕНИЯ В УНИВЕР))
Слишком глубокий язык, очень увесистые технологии, связанные с ним. Блядь, вот что вчерашний школьник может наваять полезного? Опыта нет, знаний нет.
Возможно, это потому, что я в мухосранске, в крупных городах, наверное, возможна стажировка ньюфагов, у нас такая раз в году бывает, но там отбор - пиздец.
Я пока на третьем курсе, например, живу как бич за счет мамки, компенсирую свои унижения контрибутами в попенсорц. В то время как мои одногруппники на сисярпе вполне так нормально работают и совмещают с учебой.
Понимать принципы построения контейнеров, итераторов, аллокаторов. Помнить как можно больше алгоритмов и их понимать их сложность в различных случаях.
Первая часть достаточно легко решается написанием своих контейнеров и итераторов, совместимых со стандартными алгоритмами (даже просто своя реализация вектора, деки, сета и мапа). Ну и pool алокатор, куда же без него.
Второе - читать cppreference перед сном и иногда писать код с использованием алгоритмов.
А я учу кресты и не знаю что такое итераторы и тем более алокаторы. Знаю кресты наверно на уровне того школьника. Скоро искать работу?
При чем тут смартпойнтер, только?
Ну вот давайте разберем по частям написанное...
Складывается впечатление что в Днепропетровск нужен крестовик с 6летним опытом и знанием английского
им нужен цепепе-девелопер-вообще, и они не хотят отсекать все возможности (от джуна до синьора)
на самом деле проще и эффективнее послать резюме туда
алсо готовься, что твоё резюме еще может по разным левым HR походить и найму ваще не туда
Вот кстати. Думали, я шучу? Нихуя.
>необходимы знания STL
>приветствуются знания С++
Это как? Типа, раз не умеешь программировать, будешь ходить и рассказывать всем про контейнеры и сложность операций над ними?
По всей видимости.
Я бы вбросил туда CV, наверное, эти ребята уже полгода бампают вакансию, но смущает MFC... И тот факт, что они до сих пор не нашли никого, что-то там явно не так.
> I always avoid "oral", because it can be used in sexual context. Does that make sense?
Они какие-то извращенцы.
Мод, ты нахуя нормальные посты снёс, сука? Нормально же расписал за работу и мотивацию. Нет, хотим перекидываться говном и тереть за днище работу в днище хохляндии.
ДА НЕ БОМБИТ У МЕНЯ!!!111адын
A wizard arrives precisely when he means to.
Не волнуйся, все осталось на архиваче http://arhivach.org/thread/135285/ , если кто-то хочет читнуть. Годнота годнотой, но у нас тут немного другая тематика, негоже засорять.
file = CreateFile(
path, \t\t\t\t\t\t\t\t\t GENERIC_READ | GENERIC_WRITE,\t\t\t\t\t\t\t\t\tFILE_SHARE_WRITE | FILE_SHARE_READ|FILE_SHARE_DELETE,
NULL,
OPEN_EXISTING,\t\t\t\t\t\t\t\tFILE_ATTRIBUTE_NORMAL,
NULL
);
Хочу, чтобы во время работы моей программы, он был доступен пользователям. Поставил флаги FILE_SHARE_WRITE | FILE_SHARE_READ|FILE_SHARE_DELETE. Но файл не доступен ни для чего. Как это решить ?
Флаги совместного доступа должны совпадать. Убери share write, и большинство программ согласятся совместно открывать файл.
Вот ещё книга для шапки в раздел отдельные аспекты. Сам не читал только планирую
file.allitebooks.com/20150510/Professional C++, 3rd Edition.pdf
HANDLE m_hFile = CreateFile(L"data", GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL);
У меня вот так вот было, все работало. Но вообще, файл самому нужно создавать, насколько я помню!
Ну так это же просто бинарные данные, которые можно распаковать в struct'ы, так ведь? Всегда считал что с ними работают через тупой бойлерплейт switch
Ну весь вопрос в количестве этих свичей и говнястости получившегося кода.
Наверное налеплю гору структур, буду отсылать их через тонну функций и pimpl'ов в недра Application, обновлять там какой-то стейт и рассылать только уведомления о том что что-то там изменилось в остальные части программы.
>Symbian, Maemo
Тогда молодец. А можно ещё на мой сименс его поставить? Только у меня пол метра свободных осталось. Влезешь?
А насколько умным оно должно быть? Можно собрать все токены длиннее X, затолкать в сортированное дерево и по нему уже смотреть варианты.
Я думаю нужно гуглить разработку плагинов для %иденейм%. Вим наверно самый простой, но и geany вроде простой. Просто посоветовал не разбираюсь в этом кун
Умным должно быть на столько, чтобы после имени экземпляра класса дополнялось методами и полями, в т.ч. если поля тоже экземпляры классов
читни книжку с дракончиком (есть на торрентах) Компиляторы: принципы, технологии и инструменты
Спасибо, посмотрю
1 Что быстрее - inline или farcall
2 Как выполнить функцию в динамической библиотеке не загружая ее
3 Сколько байт в int
4 Что больше char или int
5 Что такое endiannes
6 Чем процесс отличается от потока
3-6 знаю, 1-2 не знаю даже приблизительно. Каковы мои шансы?
>inline
В ассемблере компилятор по велению левой пятки может макросредства использовать а не вызов функции делать.
>2 Как выполнить функцию в динамической библиотеке не загружая ее
Не ебу.
>3 Сколько байт в int
Зависит от платформы.
>4 Что больше char или int
Зависит от платформы.
>5 Что такое endiannes
Не ебу.
>6 Чем процесс отличается от потока
Поток это маленьая часть процесса которая работает параллельно с ним.
Во втором вопросе - вместо загрузки - линковка
Автор теста провалил тест
ты еще проебался с тем, что __farcall ни разу не стандарт
Не могут, char равен 1 байту, int не менее 2.
>endiannes
Загуглил. ГОворит порядок байтов. Это как я понял имеется ввиду что если переменая 4 байта, до их значение записываются с лево на право. Раньше так считать в столюик проще было. Или что-то в этом роде. Читал знал. Название не знал. Честно-честно. Правда-правда.
>>621326
КР580ВМ80А. Теперь проверяй, мудило.
> 1 == sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)
Из стандарта.
>Производство: \tс 1977 по середину 1990-х
там прикол, что int должен позволять значения от -32768 до 32767
но я есть TI C54x в которых char двубайтный :D
Скоро очень скоро.
Пусть нормально вопрос сформулирует. Линкуются объектные файлы и статические библиотеки из которых линкер собирает исполняемый файл. Динамические библиотеки не линкуются.
Сап, котаны. Зарылся немного в поисках ответа на вопрос - возможно вы знаете - "можно ли разблокировать критическую секцию, заблокированную в треде А , из треда Б?". Ну т.е. есть ли в POSIX или еще где способ вмешиваться в блокированные куски памяти?
Где ОП?
там всегда нужно написать что выведет программа либо будет ошибка компиляции либо поведение unspecified либо поведение undefined
Это ЛЯМБДА.
Ну так и иди в гугол, хули.
вот тут кусок кода: http://lpaste.net/4479853745328357376
я старался как могу, но получилось какое-то говно, ехал const через const, string (&s)[8][2] и все в таком духе.
может кто-нть посмтореть на кусок этого смердящего говнокода и подсказать, где я тут проебался и как это можно более элегантно записать?
задача: на вход номер регистра и его значение, на консолке приттипринтитятся значения битиков. все работает, но выглядит как говно и пахнет как говно.
ипать ты накроман
А кто говорил про кресты? Джаву бери, веб, любой скриптоязык, лабы делай, похуй. Курс настолько на твоей стороне, что можешь демпинговать. Или ты синьер-помидор дохуя? На все готовое хочешь?
Надо наверно снова все дохлые треды бампнуть чтобы ОП-хуй зашевелился. А потом создать крестотред типа не нашёл создал
И это всё? Просто пришёл спустя столько времени после бамплимита и перекатил тред со старой шапкой?
Праздники же, быстрее было никак невозможно. Не сердись, няша.
community edition
Пытаюсь релизнуть неконсольную программу и получаю ошибку
LNK2001: unresolved external symbol _wWinMain@16
Если делаю этот же код как консольный проект тоже появляется LNK2001 но с __imp__ShowWindow@8 на конце
С консольным проектом проблемма решилась подключением в linker>input>additionalDependencies стопки разных .lib, по советам из интернетов
По какому принципу их нужно добавлять?
Задание: Дан массив типа BYTE размером не менее 256 Кбайт. Переписать его во внешнюю память поблочно. Операцию повторить 10 раз. Характеристика: размер блока (диапазон изменения 512-1024 байта).
Моя попытка решить: http://pastebin.com/EfGYjgfa
Проблема в том, что буфер нужно инициализировать не из файла, а из массива в оперативной памяти.(см. 70 строчку в пасте)
Ничо так.
Что бы улучшить читаемость, объяви typdef на array<string, 8> и bitset<8>. Кстати, там должно быть не 8, а CHAR_BIT (#include <climits> для этого).
Где можно, объявляй переменные как auto или auto&. const не забывай, это святое.
Две функции ExplainRegFunc объяви отдельно (и помести в анонимный namespace), не надо их лямбдами вставлять, хуй проссышь потом.
Придерживайся единого стиля имен - либо describeData, либо foreach_bit.
Я бы еще поток вывода передавал в функции как параметр ostream&. Мало ли, захочется еще куда вывести.
И, блядь, комментарии кто, сука, писать будет? Пушкин?
А так малацца. Толк будет
Есть класс, интерфейс которого описан в myclass.h. В нем есть конструктор myclass(int xSz=100, int ySz=80);
В реализации(в myclass.cpp) я вижу такую строчку:
...
myclass::myclass(int xSz, int ySz) : X_SIZE(xSz), Y_SIZE(ySz)
{
...
}
...
Что это за дерьмо ":" после аргументов конструктора?
Инициализация полей класса
Это называется "списки инициализации". В них можно через запятую инциализировать поля, вызывать функции и все такое. А так же, только через них можно инициализировать константные переменные и поля класса - ссылки.
http://en.cppreference.com/w/cpp/language/initializer_list
Все таки посоветую Visual Studio или Lion. Имхо, они мощнее. Аргументов не будет
Сап, анон. Вот я, начинающий программистраспиздяй, научился писать всякую простенькую херню на с++, типа операций со строками, ввод/вывод из файла, массивы там, циклы. Куда двигаться дальше? Не хочется просто читать учебники, хотелось бы именно иметь какие-то задачи, чтоб по ходу разбираться в новых темах.
Это копия, сохраненная 3 февраля 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.