Этого треда уже нет.
Это копия, сохраненная 30 октября 2015 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
6078 Кб, Webm
Оффициальный™ традиционный® C++ тред #7 #546742 В конец треда | Веб
"... Жалчайший род, чей жребий несчастливый
И молвить трудно. Ты на костыле
Вновь самокат приладил, нечестивый!"

Мы оказались в метафункций мгле.
Стонало эхо крестоблядков голосами,
Увязших в коде, как комар в смоле.

Взглянув окрест, я вмиг поник глазами:
Шаблоны, источая тяжкий смрад,
Лежали над несчастными пластами.

Внизу ж, суливших, что определят
В compile-time размер факториала,
Толпа, снося ошибок жутких град,

Сквозь стон Александреску проклинала.


Литература:

Для нюфань:
Учебники для начинающих. Все примерно одинаковой годноты, читать имеет смысл только какой-нибудь один, который больше приглянется.
Стэнли Липпман, Жози Лажойе и Барбара Му - Язык программирования 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++ (на ангельском) (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/n4527.pdf

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

Также для легкого чтения подойдет книжка c историей создания C++:
Бьерн Страуструп - Дизайн и эволюция C++ (1994) - https://goo.gl/FqbPwo

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

Блоги:

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

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

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

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

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

Софт и библиотеки:

IDE, призванная похоронить Visual Studio пока не особо получается. Удобные свистелки и перделки присутствуют. Тормоза и баги пристуствуют. Кросплатформенность присутствует - https://www.jetbrains.com/clion/

Статический анализатор, который умеет находить в коде ошибки и неоптимальные места. Швабодный. Есть плагин для Visual Studio - http://cppcheck.sourceforge.net/
Детектор утечек для Visual Studio. Предельно прост в прикручивании - https://vld.codeplex.com/
Гугловские утилиты для контроля корректности кода - https://github.com/google/sanitizers
Гугловский фреймворк для автоматизации тестирования - https://code.google.com/p/googlemock/

Йоба-набор библиотек, способный удовлетворить даже самые скотские фантазии - http://www.boost.org
Библиотека для удобной высокоуровневой работы с сетью - https://casablanca.codeplex.com
Простая в обращении библиотека для работы с графикой и аудио - http://www.sfml-dev.org

И многое другое - http://en.cppreference.com/w/cpp/links/libs

Памятка:

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

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

Старший брат: >>518562 (OP)
Предыдущий: >>537129 (OP)
#2 #546747
Предыдущие треды на архиваче:
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/

Страуструп для ньюфагов заменен на djvu с навигацией.
Добавлено последнее издание хардкорного Страуструпа на ангельском, Липпман для ньюфагов, книга про boost.
Структура шапки переработана.
Добавлен раздел про софт и библиотеки.
#3 #546822
Хотел в крестотред на форче сходить, но не смог его найти. А когда спросил у местных выяснилось что я негр не могущий в инглиш. Где он у них?
#4 #546830
>>546822
Спроси: " where i can find("Effective Modern C++")?"
#5 #546833
>>546830
В их g или b? Спрашивал подобное послали на стэковерлоу.
#6 #546835
Вот за книгу по бусту спасибо
#7 #546848
Призывается анон, который поделился книгой про boost. Будет восхитительно, если ты хотя бы примерно сможешь вспомнить, где ее взял. Дело в том, что это одна из тех книг, которых нет в гугле и вообще в открытом доступе, и там, где ты ее нашел, может быть и другая уникальная годнота, которую следует включить в шапку.
#8 #546851
>>546848
Скачал эту книгу в открытом доступе, правда, не помню откуда

Но весит она 52 МБ против трёх по ссылке анона.
#10 #546860
>>546848
>>546855
Кстати, в книге анона этот сайт указан внизу каждой страницы.
#11 #546861
>>546848
http://gen.lib.rus.ec/search.php?mode=last
Про генлибрусек еще не забывай, один из моих любимейших ресурсов.
#12 #546862
>>546861
Ты бы хоть проверил сначала, есть ли там. Подсказка нету
#13 #546867
>>546862
Ну я не говорил, что конкретно эта там есть, но я там находил достаточно много вещей, которые сложно или невозможно было достать в других местах. Извиняюсь, если зря в разговор влез.
#15 #546885
>>546867
Да нет, что ты, речь как раз шла не про эту книжку, а про МОАР. Вообще, чем больше анон запилит ссылок на книги, тем лучше, потому что я пролистываю каждую новую встреченную библиотеку в поисках книг, которые могли бы хорошо для шапки подойти, и вообще.
55 Кб, 1008x432
#16 #546893
Посмотрел про переполнение стэка. Как он заполняется? Есть например простой хэлоувод с выходом за границы массива. Как не запуская программу узнать какие данные будут перезаписаны?
#17 #546904
>>546893
С точки зрения стандарта, это UB, и ничего определенного утверждать нельзя. По стандарту компилятор вообще может не использовать стек, например ну вдруг какой-то извращенец напишет что-то подобное только чтобы поднасрать тем, кто не читает стандарт. На практике переменные кладутся в стек в порядке определения, так что если у тебя твой массив определен самым первым в функции, то сразу за ним будет адрес возврата, плюс-минус выравнивание. Но опять же, надо учитывать, что функция может инлайниться, что используемое соглашение о вызовах может предполагать передачу адреса возврата через регистры, ну ты понел. Так что нужно смотреть конкретную платформу, компилятор и его параметры, чтобы сказать абсолютно точно.
#18 #546906
>>546904
Это же всё делается на этапе компиляции. Может есть программки которые показывают как выглядит память?
#19 #546910
>>546906
Есть. Отладчики называются, но только тсссс!
#20 #546911
>>546910
Можно инструкцию как им пользоваться?
#21 #546915
>>546911
Это сильно зависит от того, какой отладчик. Например, в gdb я до сих пор не могу и буду рад, если анон распишет за него или даст рилейтед ссылок. В Visual Studio просто включаешь режим отладки, и тебе показывается графически вся память ячейками, например.
#22 #546918
>>546915

>gdb


У меня линукс, gcc, кодблокс и консоль на эту команду отзывается. Скорее всего он у меня и стоит. Что же тогда делать?
#23 #546919
>>546918
man gdb, как вариант ну а хуле делать, раз такая безысходность? Еще вот такое есть, но я ниасилил: http://rus-linux.net/nlib.php?name=/MyLDP/algol/gdb/otladka-s-gdb.html
18 Кб, 750x542
#24 #546920
Анон, что ему не нравится?
#25 #546923
>>546920
Кто ж вас так негибко учил makefile-ы писать?
#26 #546924
>>546923
Никто, очевидно же!
#27 #546926
>>546919
Бля. Язык учить проще чем этот отладчик. Там же не набор статей, а целая книга.
#28 #546927
>>546918
http://stackoverflow.com/q/2770889

Обрати внимание не только на подтверждённый ответ, но и на следующий.
#29 #546934
>>546927
Отлично спасибо. Теперь бы ещё короткий гайд где написано куда эти команды писать.
#30 #546936
>>546934
сюда https://www.coursera.org/course/softwaresec подпишись, там первый проект — лаба по атакам на переполнение буфера: нужно правильно испортить стек, чтобы "взломать" программу.

В лабе использование gdb по шагам описывается.
#31 #546942
>>546937
WHOAMI
#32 #546970
Есть пара вопростов
1-
Я не могу читать книги по 500 странпиц. Я "тур по с++" в 190 страниц 2 месяца читал. Как с этим бороться?
2-
В какую интересную сферу я могу вкатиться зная с++ ?
#33 #546972
>>546970
Учись быстро читать.
#34 #546973
>>546970

>500


Где ты такие короткие книги видел-то? Во всех нормальных от тысячи страниц, и это еще либо не все аспекты языка, либо сжато.
#35 #546976
>>546973
Я из головы цифру взял.

>>546972
Быстро читаешь - нихуя не понимаешь.
187 Кб, 672x400
#36 #546981
>>546970
Представь, что Гарри Поттера читаешь.
#37 #546985
>>546976
Быстро читаешь - формируешь в голове карту знаний с белыми пятнами, которые потом заполняешь. Причем, в разных книжках одни и те же факты (самые важные и распространенные) повторяются. Читая одну книгу медленно, у тебя нет карты, поэтому мозгу тяжело строить ассоциации, ты не можешь отличить важные факты от второстепенных, и в итоге имеешь проблемы.
#38 #546992
Т.е. 2 раза прочитать одну и ту же книгу быстро во много раз лучше, чем читать ее же, но в 2 раза медленнее. В реальности все намного хуже - книга на 500 страниц читается за 2 вечера, а ты ее растягиваешь на 2 месяца. Ты бы ее раз 10 прочитал бы за это время, если бы хотел, и понял бы намного больше.
Чтение - это процесс загрузки данных в мозг, который потом эти данные переваривает, обычно нужно поспать, а ты ждешь мгновенного ПОНИМАНИЯ здесь и сейчас.
#39 #546993
>>546970

>Я "тур по с++" в 190 страниц 2 месяца читал.


Ну и ладно. Теперь можно взять Мейерса, например Defective modern C++.

А эти книги по 1000 страниц они же для вообще дебильчиков, которым объясняют, зачем циклы нужны и прочее такое.
#40 #546998
>>546993

>для дебильчиков


А как же Джоссатис?
#41 #547001
>>546998
А что Джоссатис?
#42 #547008
>>547001
Там больше тысячи страниц, но это не очередной обзор языка для чайников. STL глубоко весьма расписывается, и аналогов у книжки вообще нет.
#43 #547017
>>547008
Я уже спрашивал тут, но спрошу снова. Через пол года олимпиада и нужно задротить алгоритмы. Прочитал хуй знает зачем. ни с кем не советовался две книги страуструпа почти нихуя не понял но это отдельная тема там ещё задания ебанутые и заканчиваю лафоре. Нужно хорошо знать STL и алгоритмы. Теперь даже сортировку с помощью функции из стандартной библиотеки сделать не могу не залезая в гугл. И алгоритмы плохо знаю. Для STL и заодно 11ого стандарта советовали Джоссатиса второе издание. А алгоритмы Седжвик. Не могу решить с чего начать когда закончу лафоре.
C++ How to Program #44 #547019
Аноны, что можете сказать о книге Дейтелов "Как программировать на C++"?
#45 #547021
>>547017
О, анон, я тоже планирую учавствовать в олимпиадах. Кинь фейкомыльце, может чем поможем друг-другу. Алсо как на счет заданий прошлых лет?
#47 #547028
>>547021
Язык и алгоритмы ещё не знаю поэтому вряд ли помогу и почта это неудобно. Но если хочешь лови. alkkoloto(собака)yandex.ru
#48 #547060
Господа, нид асистанс! Объясните пазязя по-фасту, за область памяти под названием стек и свободное хранилище памяти. У С.Праты по местной книге в главе 9 об этом рассказано несколько путано - нихера не понял
#50 #547080
>>547073
Во мудак-то
мимо
#51 #547089
>>546993
Согласен, не люблю очевидные вещи по несколько раз читать.
#52 #547094
>>546742 (OP)
подскажите как реализовать на С++ класс "Множество размерности n" с разными функциями, присущими множествам(пересечение, умножение, проверка, входит ли элемент в множество)?
#53 #547102
>>547094
Для малых n - на отсортированном vector, для больших - на хэше (в стандартной библиотеке set::unordered_set) или красно-черном дереве (std::set). Правда, подозреваю, что ты хочешь, чтобы мы за тебя лабу сделали.
#54 #547147
Ребятки, давайте замутим конфач для С++ илиты в телеграме? Для вопросов/ответов, размешивания правды матки за компиляторы и бусты, как вам идея?
#55 #547152
>>547147
Этот тред и так мёртвый, зачем ещё и конфа в полуненужном телеграмме?
#56 #547154
>>547152
ЧТОБЫ ОЖИВИТЬ ТРЕД!
#57 #547158
>>547147
Я бы предпочёл борду в виде графа постов. Чтобы можно было отметить интересные ветки обсуждения и непринуждённо форкать треды, дабы не читать школовопросы и обкидывания говнами.
#58 #547169
>>547158
Блять.
Это же
ГЕНИАЛЬНО
Я бы этим занялся, но в конечном итоге будет интересно лишь нам с тобой. Без веб интерфейса же, а сейчас все в себе, все в вебе...
#59 #547170
>>547169
А, ну и сервера у меня тоже нет
#60 #547179
>>547102
И по какой размерности тогда его сортировать/хэшировать? Не, тут надо как-то хитрее придумать разумеется, если множества маленькие, то похуй вообще.
#61 #547180
>>547170
>>547169
В соседнем треде пилят распределенную борду, можно примазаться. Я бы занялся подобном, если найдется хотя бы 2-3 коллеги, которые не будут хуи пинать, сваливая друг на друга всю работу.
мимотретий анон
#62 #547181
Я с удовольствием, как раз хуи пинаю, не знаю, куда примкнуть.
Где можно скооперироваться, набросать диздок/видение цели/тз?
#63 #547182
>>547181
https://2ch.hk/pr/res/538172.html Они разогреваются пока что, а потом, наверное, будет конфа или что-то вроде того.
#64 #547184
>>547182
Я только оттуда, больше не вернусь, обычный скайп без конструктивизма.
Моё мнение - асинхронность и P2P - от лукавого, графы и система отбора -то, во что нужно бить.
И вообще, это должно быть /pr/ ориентированным.
#65 #547186
>>547184
Срач*
#67 #547193
>>547191
План действий такой:
1. Техлиды с сеньорами расписывают гуглодок с техзаданием. МАКСИМУМ разделяем всю работу на компоненты, выясняем способы взаимодействия этих компонент (CFFI, pipes, middleware, etc).
2. Каждому вручаем по компоненту с ясно озвученными минимальными требованиями, лишь бы хоть как-нибудь работало. Он выполняет этот компонент на своём любимом ЯП (желательно конечно ограничиться 2-3 на весь проект).
3. Организуем автоматическую сборку проекта. В итоге получаем суперсырой первый билд.
4. Заводим багтрекер и расписываем путь развития проекта. Каждый берёт себе какие хочет задачки и делает.
5. Каждый месяц релизим очередную версию.

Очень желательно запилить всё в переиспользуемой манере, так как срач p2p vs server неминуем.

Бабки на хостинг будем собирать когда запилится самая первая версия.
#68 #547194
>>547191
Все ссылки пока что в соседнем листе с результатами переписи, пописать в гуглодок можно уже сейчас. Туда же попадут гитхабы-битбакеты и прочие данные. Если наберётся достаточно народа, или у меня лично будет дохуя терпения, запилим отдельный координационно-агитирующий тред.
#69 #547200
>>547181

>ссылки в соседнем листе с результатами переписи, пописать в гуглодок можно уже сейчас


>>547184
Закатывайся, будем пилить универсальный код и отделять компоненты. Там процентов 70 будет одинаковое.
>>547169

>Без веб интерфейса


Можно без, а можно и с. Как вариант запускать локальный сервер и открывать браузером. Ну и декстопы-мобилки в опроснике стоят отдельно, опять же, интерфейс можно запилить один раз, а потом подключить его к п2п модулю или апи сервера.
#70 #547202
>>547193
Срач уже здесь. Ты ведь не будешь спорить, что для взлета у борды должна быть киллер-фича? Так вот, способ представления в виде графов и форканье на таковую явно не тянут, это как если бы ресторан позиционировал себя не имеющим аналогов потому что у них у ложек ручки длиннее. Надо, чтобы от сотен остальных борд отличалось резко, смекаешь? К тому же, есть дохуя анонов, которые хотят постить цп и всякие непотребства и вынуждены жрать говно на медленном хидденчане. С этих джвух позиций выбор p2p очевиден, оно станет той самой недостающей изюминкой. А графы будут приятным бонусом.
#71 #547203
>>547202

>ь дохуя анонов, которые хотят постить цп и всякие непотребства


Вот уж кто нахуй не нужен.
#72 #547204
>>547202
Ну а я и не против этого срача. Только я предлагаю уже начать напиливать хотя бы общее. Договориться с компонентами и апи. А потом как из конструктора каждый сам себе соберёт.
#73 #547205
>>547203
Возможность лучше отсутствия возможности. Аудиторию это привлечет, а законопослушные аноны всегда могут скрыть неугодный контент. Можно алсо сделать теги специально для этого, или типа того.
#74 #547206
А есть гуглодок? Я только форму нашел, ебаться с почтами неудобно жи. Лучше на начальном этапе сделать гуглодок, в который каждый насрет напишет свои идеи и вообще.
#75 #547207
>>547206
Есть. Форму заполняешь, выдаёт ссылку со списком гуглодоков. Только что настроил.
#76 #547216
Высрал приблизительную архитектуру под всё сразу. Далее надо детализировать каждый блок.
#77 #547224
Неужели двощ на что-то способен
#79 #547260
Граждане, а накидайте пример использования буфера для потока std::istream is, а то на en.cppreference.com и cplusplus.com как-то не совсем то и непонятно. Ситуация следующая:

std::string line;
std::getline(is, line);

if (is.eof() && !is.fail())
{
is.clear();
line += '\n';
//here I want put line back in istream -- may be using a buffer
std::getline(is, line);
}

Объясняю, почему нельзя просто просто в обратном порядке побросать все символы строки, начиная с '\n' и заканчивая line[0]: потому что is передаётся в функцию по ссылке и открыт только на чтение (чтобы если это файл, то не менять его, иначе в конец файла '\n' добавится, а файл нужно не менять). Просто сдвинуть seekg() на line.size() назад тоже не вариант, т.к. нужно прочесть line += '\n'.

Зачем это нужно? Объяснять очень долго, MAGIC
#80 #547267
>>547260
Ну хорошо, давайте вместе попробуем разобраться. Здесь http://www.cplusplus.com/reference/streambuf/streambuf/streambuf/ вообще примера нет. Вот нашёл http://www.cplusplus.com/reference/ios/ios/rdbuf/

И там какого-то чёрта происходит следующее:
1) делается backup буфера std::cout;
2) затем в std::cout подменяется буфер с его на буфер файла psbuf;
3) в std::cout что-то пишется, и, видимо, это следует в файл;
4) в std::cout возвращается его прежний буфер.

Попробовал скомпилировать эту херню. std::cout ничего не выводит, а файл test.txt полностью переписывается на This is written to the file
#81 #547268
>>546742 (OP)
То есть SFINAE - это анальные трюки на шаблонах, чтобы получить типа hasattrib в бидоне?
Действительно пиздец! Нет чтобы завести нормальную рефлексию.
#82 #547273
>>547267
Я тут подумал. При этом cout может иметь размера буфера меньший, чем line.size() + 1. Тогда лучше просто новый отдельный буфер запилить и всё.

Он должен быть null-terminated?
#83 #547276
>>547268
Они замечательные, это же прям магия. Тот, кто понимает
[code lang="cpp"]
static void test ();
template <typename T>
static decltype (declval <T> ().tvoyaMamka (1488)) test ();
[/code]
, тот будет гуру, и все девки будут давать. А в пистон и дурак сможет.
#84 #547439
Поясните нубу, почему если а == b, то оно ничего не высчитывает, а если a <= b, то работает?

#include <iostream>
int main()
{
int a = 0;
int b = 10;
while (a == b)
{
std::cout << a;
a++;
}
}
#85 #547440
>>547439
Ты или вместо < написал <= , или у тебя еще какое противоречие в вопросе.
#86 #547441
>>547440
Почему противоречие?
Смотри, пишу while (true) {}
a == b, не выводит ничего
a <= b (или a < b) выводит
Почему?
Ведь по логике и a == b должно делать вывод пока а не станет равно б? Или я что-то не до понял?
#87 #547442
>>547439
Если ты тролль - съеби. Если ты реально не понимаешь, - тоже съеби, ибо такой зашкварный мозг иметь для программирования нельзя, тебе нужен новый.
%%while(a==b) выполняется, пока переменная a равна переменной b. Поскольку ноль не равен десяти, цикл не выполняется не разу.
#88 #547444
>>547442

>while(a==b) выполняется, пока переменная a равна переменной b. Поскольку ноль не равен десяти, цикл не выполняется не разу.


Я думал не так, но спасибо за разъяснения.
#89 #547470
>>547268

> завести нормальную рефлексию


с++ вообще то в машкод компилится, рефлексии в таком языке не сделать ни как
#90 #547477
>>547470
Про полноту по тьюрингу слышал что-то?
8 Кб, 804x230
#91 #547501
Поясните ньюфагу за break, он 1 круг цикла for до линии, если сработал, или после брейка он тоже выполняет код, но цикл не продолжает?
#92 #547509
>>547501
Команда break выполняет мгновенный выход из текущего цикла. Программа продолжает своё выполнение с команд находящихся сразу за циклом, из которого ты вышел с помощью break.
#93 #547543
>>547470
Да, всё верно. И именно поэтому её возможно завезут в C++17.
#94 #547555
http://habrahabr.ru/post/267413/
Смотрите, посоны, что нам Бьерн покушать принес.
43 Кб, 1563x976
#95 #547556
Подскажите, никак не могу задачку с учебника решить. Решение расписал в тетради, всё должно работать, но, почему-то, в реальности ответ не совпадает с задуманным - непонятно почему число 9 (а если брать больше, то еще и делящиеся на 5), проходит проверку, хотя не должно - деление на 3 даёт 0. Проверку выделил красным.
#96 #547569
>>547556
Что за задание то? Если найти простые числа то удаляй все и пиши заново.
19 Кб, 738x729
#97 #547572
>>547569
А, всё решил, я понял ошибку - там где был брейк, если на 2 сразу не делилось, то пропускало любые числа.
Вот верное решение - заместо брейка сделал чек и вынес добавление за цикл.
#98 #547647
>>547441

>a == b


значение false. цикл не выполняется.

>a <= b


Значение true. цикл выполняется пока а не станет больше бэ.
#99 #547683
>>547501 >>547556 >>547572

>simple_numbers


Проиграл. primes
#100 #547708
>>547572
Если уж так, то выучи для чего в языке есть continue и break. А ещё тебе numbers не нужен, а если и будет нужен, то ты любой элемент и так за константное время можешь вычислить.
#101 #547819
Анон. Послезавтра собеседование. С++ и STL знаю норм, а вот бустом никогда не пользовался, хоть и указал его в резюме. Где его можно быстро поднять. Какой-нибудь summary всех либ, либо самое важное?
#102 #547831
#103 #547885
>>546742 (OP)
двач, помоги пожалуйста
почему-то код при освобождении памяти выдаёт ошибку, не могу понять в чём дело, начинает не работать с 61 строки
http://pastebin.com/eZkYLEZe
#104 #547891
>>547885

>strcpy_s


говно для педиков. Используй strcpy();

p.s нахуя ты пишешь глупые комментарии?

>delete[] str4;//освободим память


блядь, и так ясно что delete освобождает память

>StringsWork story;//создаем объект


same shit
#105 #547893
>>547885
а вообще, не выебывайся и юзай string

>>547891 - кун
#106 #547945
Подскажите, как создать несколько объектов класса с именем из переменной типа string?

Другими словами:
Class man; //Объявили класс
string name;
string lastname;
...
string peremennaya;
cin >> peremennaya;

man peremennaya; // тут должно быть значение, записанное в переменной peremennaya. Я пробовал всякие кавычки-скобки - компилятор ругается. А если написать без всего - то созщадлется объект peremennaya.Ваш КЭП.

Чо делать то?
#107 #547946
>>547945
Всё что после многоточия - очевидно, что входит в main () {
#108 #547947
>>547945

>Class man; //Объявили класс


>string name;


>string lastname;



class man { //Объявили класс
string name;
string lastname;};

Class man; не скомпилируется, class man; - тоже не о том, это обещание, что класс ты определишь когда-нибудь позже.
#109 #547956
>>547947
Хорошо. Я понял.
Класс - это как средство нового типа данных + функции. Так?
Тогда как мне реализовать создание "чего либо" с типом "моего класса"?
#110 #547962
>>547956
Вопрос исчерпан, я это и так знаю, хуйню спорол.
Хорошо, а как тогда мне хранить некие данные? В переменных моего "нового типа". Но тогда классы != переменные. Хранить данные в них не получится. Я прав?

И как мне выкручиваться? Где хранить мои "смешанные" (int + string) типы данных"? В массивах? В отдельном файле?
#111 #547966
>>547956
С типом ты в С++ ничего не можешь сделать, можешь создать экземпляр (instance) своего типа и там уже хранить что тебе нужно. Ты уже это делал в "man peremennaya;", просто оно у тебя не компилировалось, потому что вместо class имя{поле1;поле2;}; ты сделал class имя;поле1;поле2;
#112 #547970
допустим, есть класс:
Class yoba
{
public
string text;
int number;
};

Есть объект этого класса kolobok:
yoba kolobok;

Хочу записать в мой тип данных набор с клавиатуры:
cin >> text;
cin >> number;

Данные собраны (то есть это дело не одноразовое, можно пустиьт по циклу и собирать еще). Желаю хранить это дело в массиве (или векторе).

Создаю массив array с созданным мною типом данных "yoba" в количестве 10 элементов:
yoba array[10];

Допустим, что класс я инициализировал и хочу записать собранные данные моего типа yoba в первую(нулевую) ячейку массива:
array[0]=... Что? Чему равняется?

Я кажется начинаю туго понимать про классы. Моё мышление о классах как о неком выделенном "местечке" для хранения информации было ошибочным. Сейчас то я в том направлении? Не кидайтесь говном, пожалуйста, подскажите, как записать в нулевой элемент массива array данные типа yoba с уже некоторыми набранными величинами переменных text и number.

Или тупо: как сохранить в массив мой тип говна.
#113 #547971
>>547966
Я, возможно, не корректно выражаюсь, говоря "тип данных"
#114 #547974
>>547970
array[0].text = text;
array[0].number = number;
#115 #547977
>>547974
Но мой препод сказал мне реализовать мою задачу при помощи классов. Зачем мне тогда классы, если я могу напрямую всё записать в массив?

Поясни, пожалуйста:
array[0].text = text; //Что означает эта запись? Каждая "ячейка" массива имеет свои поля (которые я указал в классе yoba?), потому что я создал массив с таким типом?
#116 #547979
>>547971
Нет, вполне корректно.
>>547977
В массив чего? Массив экземпляров твоего класса.
#117 #547980
>>547974
Компилятор ругается:

>within this context


>array[0].name=name;

#118 #547984
>>547980
Алсо, я дурак и забыл вписать public для name-а
#119 #547988
>>547974
А как вывыести обратно на дисплей?
array[0].name=name; //Запись в массив
cout << array[0].name; //Вывод на экран

Чому не пашет? Нужно "вывод" писать в методах класса?
#120 #547989
>>547988
В методах тоже не работает.

>array was not declared in this scope


>cout << super[0].name;

#121 #547990
>>547989
array вместо super
#122 #548002
Антоны, нужно написать хук на функцию. В хуке нужно будет пошамать с функциями и вызвать оригинальную. Уровень знаний - hello world. Что нужно прочесть, для скорейшего написания сей приблуды?
#123 #548100
>>548002
Где все тыжпрограммисты?
#124 #548110
>>547147
А в джаббере сложно что ли?
#125 #548137
СИДЯТ МУЖИКИ
@
ПИВО ПЬЮ
@
МЯСОМ ЗАЕДАЮТ
#126 #548206
>>547989
Няша, ты пишешь полную неведомую хуйню.
Объясняю как надо:
Добавляешь к своему коду комменты с ошибками компилятора у соответствующих строк. Заливаешь на пастбин или аналогичные сервисы. В посте лепишь ссылку на это дело и описываешь чего пытаешься добиться и что вместо этого получается.
На вопросы вида "вот строчка кода, почему не фурычит" ответ один - хуй его знает.
#127 #548249
Страуструп для ньюфагов, в нём введение и 4 главы:

>Part I: The Basics 41-342


>Part II: Input and Output 343-580


>Part III: Data and Algorithms 581-802


>Part IV: Broadening the View 803-1070



Прошёл (i.e. сделал все упражнения) введение, Part I и первые 2 параграфа (10, 11 -- iostreams) Part II. После этого последующие 5 параграфов (12-16) второй главы посвящены графике, и текста там просто дочерта, 170 страниц и куча задач. Оно вообще нужно? Part III мне вообще кажется куда полезной, или книга построена так, что без второй главы третью не поймёшь?

Что делать?
1) прочесть графику и сделать упражнения;
2) прочесть графику;
3) сразу приступать к Part III.
#128 #548281
>>548249
Я до сих пор не прочел IO, например за дохуя лет. Там вроде даже в начале написано, чтобы читали первую часть и дальше выборочно, что интересно и соответствует задачам. Так что пролистай ее быстренько и лезь в третью.
3има #129 #548284
Господа, по вводу\выводу (fstream, все дела)
посоветуйте что-нибудь, плз.
Читаю Липпмана - было норм, пока не пришли к классам и к вводу выводу. Не знаю, может быть рассчитано на тех., кто уже в теме, но мне сложно идёт. в других книгах для ньюфагов тема разбита на разные части и туда-сюда мотаться сложно.
особенно учитывая, что в каких то книгах ++11, а в каких то нет. т.е на что смотреть
#130 #548286
>>548284
С этого треда все самоучители без 11 помечены как устаревшие.
#131 #548287
>>548286
перечитал шапку.
Ок.
Но на вопрос\просьбу всё равно ответа нет.
#132 #548288
>>548284
и в догонку.
Как организовываете новый материал вокруг себя.
например не статья, а фрагмент книги пдф дежавю.
#133 #548292
>>548284
Ну вот я >>548249 прочёл первые 2 параграфа (10, 11 -- iostreams) Part II Страуструпа для ньюфагов. Но без

http://en.cppreference.com/w/cpp/io/ios_base/iostate

не разберёшься, потому что Страуструп (зло?)-намеренно мешает в кучу std::basic_ios::good и std::basic_ios::operator bool , которые отличаются на значение std::basic_ios::eof
#134 #548315
>>548292
ты вроде дал какую-то информацию, бро.
но она такая, что при любом к ней отношении особого выбора нет?
#135 #548402
>>548315
Я всего лишь предложил один из возможных вариантов, поскольку все другие молчат. Других вариантов не знаю.
#136 #548409
>>548402
всё понял.
не так как надо твоё сообщение прочитал.
А вообще как успехи?
#137 #548410
>>548409
>>548402
всё понял. теперь понял.
просто в первый раз невнимательно твоё сообщение прочитал.

А вообще как успехи?
#138 #548430
>>548410
>>548402
Мне кажется, вы страдаете хуйней, если честно. Серьезно, стандартную библиотеку изучают после ядра языка, а в ней потоки ввода-вывода по важности и интересности где-то на дне. Сосредоточьтесь на действительно полезных вещах лучше: STL, concurrency, аллокация. Вся ебля с io сложнее простых << и >> нужна крайне редко, для всех нетривиальных вещей энивей прикручивают библиотеки.
#139 #548437
Shellsort or Comb sort?
http://ideone.com/PP0U9l
#140 #548446
>>548409

>А вообще как успехи?


Какие успехи? Я теперь чуть-чуть знаю I/O в крестах. В целом мои нужды перекрывает с запасом.

>>548430

>Мне кажется, вы страдаете хуйней, если честно. Серьезно, стандартную библиотеку изучают после ядра языка


Мне собственно от языка кроме I/O ничего и не нужно-то по моим маленьким потребностям. Но вот данные/алгоритмы по-любому изучить бы.
#141 #548449
>>548446
Iostream самая неудачная часть языка и много где в каеих проектах запрещен. Пользуйся printf
1312 Кб, 250x198
ССУ КРЕСТОБЛЯДЯМ НА ЛИТСА #142 #548450
Боже, крестобляди, какие же вы опущенцы, просто пиздец.
https://events.yandex.ru/lib/talks/2588/ - перемотать на 9:22:

>Сборка браузера занимает порядка полутора-двух часов на очень хорошем Макбуке. Вы, как разработчик, не можете позволить себе делать фичу, а потом ждать полтора часа. Мы это решили: мы берём несколько клонов одного и того же репозитория, и пока в одной директории собирается ваш браузер, в соседней вы работаете над другой фичей.


Вместо того, чтобы сделать нормальные модули, которые бы упростили сборку и позволили бы наконец не пересобирать весь проект, когда вы нажимаете энтер в файле zaloopa.h, используемого везде, продвинутые крестобляди предпочитают во время сборки, чтобы не скучать, делать ЧТО?.. Правильно - работать над другим таском! И похуй, что внимание, которого при пердолении C++ нужно дохуя, идёт по пизде - зато пацанам из Комитета Стандартизации Крестоговна будет бесплатный цирк из кресточушек (пацаны сами к крестоговну не прикасаются, конечно же).
#143 #548461
>>548002
Бамп вопросу.
#144 #548463
>>548437
Что это за хуйня?
#145 #548468
Аноны, ну что за хуйня? Есть какие-нибудь нормальные IDE под Ubuntu? Хоть что-нибудь сравнимое с Visual Studio? Ах да, ещё я криворукий, поэтому не могу собрать проект в Code::Blocks (почему-то не линкуются .h-файлы), а в Eclipse вообще нет пункта для C/C++. Может кто-нибудь пояснить? Почему у меня в Eclipse, кроме Java и ещё каких-то пунктов, ничего нет, в том числе пункта с выбором C/C++? Уже устал от этой хрени.
#146 #548470
>>548450

>Вы, как разработчик, не можете позволить себе делать фичу, а потом ждать полтора часа.


Чушь. Я ухожу гулять, гоняю чаи с коллегами, играю в плойку, скролю зк.
#147 #548472
>>548468
QtCreator, KDevelop
#148 #548473
#149 #548481
>>548450
Потому что долбоебы, которые проектировали браузер, не могут в pimpl, очевидно же.
#150 #548489
>>548449

>template самая неудачная часть языка и много где в каких проектах запрещен. Пользуйся #define


>Наследование самая неудачная часть языка и много где в каких проектах запрещен. Пользуйся void *.


>printf самая неудачная часть языка и много где в каких проектах запрещен. Пользуйся MOV AH, 9; INT 21h.

#151 #548491
>>548430
спасибо, бро.
кидаю в заметки.
#152 #548499
>>548449
Чувак, я двачую этого :
>>548489
не хуйню сказал.
И ссылку добавлю :
http://www.programmersforum.ru/showthread.php?t=192502
Как ответиишь?
#153 #548557
>>548472
А не подскажешь, как сделать, чтобы приложение запускалось в консольку в KDevelop? Ибо неудобно, когда оно в какое-то своё окошко выводит всё.
#154 #548596
>>548499
Сам-то читал свою ссылку? По ней все рекомендуют пользоваться iostream.
#155 #548616
>>548596

Бро, я обращался с вопросом к нему :
>>548449
#156 #548785
>>548468
Установи пакет eclipse-cdt, он добавит плюсы
#157 #548818
>>548449
io - типобезопасный ввод-вывод, в отличие от printf
по производительности - сравним
#158 #548831
>>548818

>по производительности - сравним


Не уступает, вообще-то, если соответствующим образом настроить.
#159 #548985
>>548557
В настройках запуска укажи xterm или что ты там юзаешь.
#162 #549022
>>548785
Спасибо, заработало. Но снова возник тупой вопрос: как сделать вывод в терминал? Неудобно смотреть вывод программы в окошечке IDE.

>>548985
Спасибо, получилось.
#163 #549033
>>548449
https://arhivach.org/thread/94972/#511941
https://arhivach.org/thread/94972/#513467
iostream нормально со всем справляются.
#164 #549055
>>548785
А какой пакет нужно установить чтобы добавить плюсы в спермерке?
#165 #549064
#166 #549168
>>549022
Юзай кдевелоп, 4.7 збс. И собирай cmake'ом.
#167 #549169
>>549055
Оптимально - мусорный, литров на 40, не меньше.
Юзай visual cpp, не выебуйся.
Боксёрский зал ( взрослый.) 3има2061 #168 #549248
РЕБЯТА,
Как организовываете новый материал вокруг себя.
например не статья, а фрагмент книги пдф дежавю? и т.д
#170 #549343
>>549248
Evernote, OneNote, Nim...
#171 #549387
>>549248
никак
читаю, удаляю, может быть сохраняю или добавляю в закладки
#172 #549453
Где быстрее поиск, в векторе из 15 четырехбайтовых элементов или unordered_map такой же размерности?
#173 #549458
>>549453
Скорее всего в векторе, он в кэш-линию влезает.
#174 #549461
>>549458
Мне тоже чет так кажется. Ок, запилю векторы.
#175 #549592
Че Страуструп пишет, что если в классе определить функцию, то при её вызове идет подстановка тела этой же функции в то место, откуда была она вызвана, а если определять НЕ в классе, то идет простой вызов функции. Так что ли? Ну а в чем тогда разница?
#176 #549593
>>549592
Покажи где он это пишет.
#177 #549594
>>549593
Очевидное правило гласит: не помещайте тела функций-членов в объявление
класса, если вам не нужна повышенная эффективность программы за счет ис-
пользования небольших подставляемых функций. Большие функции, скажем, со-
стоящие из пяти и более строк, ничего не выиграют от подстановки. Не следует де-
лать подставляемыми функции, содержащие более одного-двух выражений.
#179 #549596
>>549594
>>549595
А тут [1] вот питухи с SO поясняют, что неявный inline зделан для того, чтобы можно было переопределять функцию несколько раз. И inline не обязательно означает реальную подстановку тела функции в место вызова.

[1] http://stackoverflow.com/a/9734378
13 Кб, 228x228
#180 #549600
>>549594
Короче, из вышенаписанного вывод один. Страус — труп (пикрилейтед) обосрался. inline никогда не был ПРИКАЗОМ компилятору встраивать тело в место вызова; тем более неявный inline.
#181 #549601
Термин inline мне Страуструп будет только через полсотни страниц рассказывать (судя по Ctrl+F), но SO прочел я.
Не особо понимаю >>549600 пост, выше две ссылки говорят об обратном же вроде. (ну помимо ещё того, что он используется для того, чтобы ошибок не было, если определение функции расположено в другом файле)
#182 #549603
>>549594

>не помещайте тела функций-членов в объявление


класса
А как-же шаблоны?
#183 #549604
>>549594
Что за книга?
#184 #549605
>>549601
Страус-труп говорит что функции, определённые в объявлении класса, неявно помечаются как inline, а, значит, встраиваются в место вызова.

SO говорит что неявный inline это правда, но нужен в первую очередь для разрешения переопределения функции. И что компилятор волен встраивать и волен не встраивать тело функции в место вызова. Пост >>549600 это и говорит.
#185 #549606
>>549603
Страус-труп мудак и пишет хуйню.

Такой ответ сойдёт?
#186 #549609
>>549603
>>549606
Потому что до шаблонов я ещё не дошел, че за хейт, поцаны, ало.
#187 #549618
#188 #549619
>>549596
По стандарту неидентичные определения inline-функций это сразу UB.
#189 #549622
>>549603
Пиши тела сразу после класса, а в самом классе оставь только объявления со спецификатором inline. Очевидно же.
37 Кб, 402x604
#190 #549816
Приветствую
Господа, катиться мимо вас толстая веб-пхп-макака, это я.
В веб пошёл от нужды быстро работу найти, но подобное программирование никогда не привлекало, сейчас хочу уйти от туда.
Думаю либо про андроид с жабой, либо про кресты.
За спиной паскаль, руби, два курса вуза, Кормен и т.п., и чувство что это моё.
Но вот в чем вопрос, чем сейчас занимаются программисты на C/C++ ? Меня интересуют конкретные задачи.
И какой уровень нужен для поиска работы?
Что в портфолио положить?

Вот с вебом всё ясно, с мобильными тоже.
А вот чем вы на работе заняты я не очень понимаю.
Помогите разобраться.
#191 #549872
>>549816
-тся
#192 #549883
>>549816
ирл знаю людей, пилящих:
- CAD'ы (нужно знать матан и линалг),
- софт для voip эндпоинтов (железяки и windows клиенты). если железяка на ведроиде, то там борщ из сей, плюсов и джабы, иначе си и плюсы.
- софт для кол-центров (дикая смесь из шарпов и крестов).
сам больше не видел продакшен применений крестовщины. может ананон ещё накидает примеров
#193 #549886
>>549872
Эт где?
#194 #549903
На хабре-то пишут, что этой осенью в студию уже завезут модули. А оп-вебм утверждает, что нет. Кому верить, и откуда вообще эта истерия на модули пошла? Раньше говно жрали большой ложкой, а теперь из ядра почти сделали конфетку, но неосиляторам все равно мало?
#195 #549910
>>549168
И снова тупой вопрос. Что нужно доставить, чтобы открылись настройки проекта? Не могу туда зайти, ибо кнопка просто неактивна (cmake поставил). Алсо, у меня почему-то автоматом не поддерживается C++11: не распознал nullptr. В общем, анон, если не сложно, расскажи, что да как, а то я уже устал маяться с этим, а венду нет пока ни желания, ни возможности поставить.
#196 #549913
>>549816
google-точка-ру "работа погромист си-плюс-плюс"
Если без кучи побочного груза, чистый c++ программист используется в проектах, требующих высокой производительности; в основном игры, различные 3d проекты и 3d игры.
#197 #549914
>>549886

>Эт где?


>>549816

>катиться

#198 #549917
>>549914
Фюрер, бросьте. Мир несовершенен, и тут бывают ошибки у всех. Вам не в этот тред.
не "толстая веб-пхп-макака"
#199 #549919
>>549914
Прощение
#200 #549921
>>549917
Все ошибаются, но хуже не будет, если корректно указать человеку на ошибку.
не_фюрер
#201 #549954
>>549910
пропиши для компилятора --std=c++11 опцию
#202 #549955
>>549954
Где прописать? В настройках проекта? Я не могу туда зайти.
#203 #550011
>>549955
Почему бы тебе первое время не посидеть в консоле и не поюзать makefile-ы? Для твоих hello world-ов хватит выше крыши.

Или вообще build.sh с g++ -std=c++14 -o hello_world hello_wrold.cpp
#204 #550016
>>550011
Я, разумеется, нуфаг, но такое положение дел мне не нравится, ибо я уже осваиваю классы, потихоньку подбираясь к шаблонам, поэтому в проекте получается много файлов и т. д. Хотелось бы больше внимания уделить написанию кода, нежели пердолингу с консолью, IDE и прочими радостями жизни. Мне сейчас просто нужна рабочая IDE, поддерживающая 11-й (желательно 14-й) стандарт, с подсветкой ошибок. Всё, больше я ничего не хочу. Постоянно возникают какие-то траблы с IDE под Linux. Вот сейчас не открываются настройки проекта, вернее сам пункт неактивен. Это значит, что я что-то не установил? или, может быть, проблема в чём-то другом? В общем, я не против поебаться с Linux'ом, но сейчас мне просто нужно писать свои Laba1.
#205 #550026
>>550016
Тогда поставь сперму со студией и не еби нам мозги. Ну серьезно, разработка под никсами без охуительной настройки всего под себя всегда была болью.
#206 #550057
>>550016
Просто поставь Qt Creator
#207 #550069
>>550057
(просто мимопроходил)
Поставил этот Qt Creator недавно. Так и не смог создать C++ console application (без CMake и QBS).
#208 #550084
Посоветуйте плагинов на субиме. Автодополнение нуюно очень, чтобы как в идее жавовой. На CLion денег нет.
#209 #550086
>>550084

>нужно

#210 #550091
>>550069
Ебать ты лох. А я могу.
#211 #550142
Наверно немного глупая и наивная просьба, но дело в том, что никогда не имел дело с большими проектами. Но сейчас на работе подкатили именно такой и я решил все-таки писать его на плюсах. Раньше справлялся на обычном Си, но сейчас понимаю, что нужна более-менее нормальная архитектура с возможностями добавления разных фич.
Подскажите хороших проектов, в которых можно увидеть грамотный код.
В проекте будет обработка данных в потоке и различные виды отображения обработанных данных, если в общих чертах. Пишем под Шинду.
#212 #550144
>>550142

>более-менее нормальная архитектура с возможностями добавления разных фич


llvm, clang. Рассмотри вариант скриптового языка с ядром на С++. LuaJIT быстрая и удобная штука.
#213 #550265
Есть один компилятор. Реквестирую хэлоуворд который выведет мне что это за компилятор. С/C++/C++11
sage #214 #550268
>>550265
#ifdef _gnu/хуй/etc
#215 #550269
>>550268
что это и как работает? что должно произойти?
sage #216 #550271
>>550269
Господи, наводку я тебе дал. Ищи сам дальше, что какой компилятор дефайнит.
#217 #550279
>>550271
Не понимаю я. После него весь код комментируется. И не понятно си это или кресты и какой стандарт. Дай пожалуйста простой хулоуворд в 3 строчки. Неужели сложно?
#218 #550282
Констэкспры в 2015 Студии поддерживаются весьма ограниченно, т.е. циклы не погоняешь.

А файл можно прочесть на этапе компиляции? Кроссплатформенно. Именно с помощью <iostream> , а не #include
sage #219 #550283
>>550279
#ifdef _MSC_VER
std::cout << "Мокрософт";
#endif
#ifdef __GNUC__
std::cout << "Гнутый";
#endif
#220 #550287
>>550283
А как узнать 11 стандарт завезли или нет?
sage #221 #550295
>>550287
Я что, ебу? Ищи сам.
sage #222 #550300
>>550282

>iostream


>компильтайм


Ебанутый.
#223 #550331
>>550300

>Ебанутый.


Я художник, я так вижу.
#224 #550402
Есть один класс huj.cpp, часть функций/структур/etc которого вынесена в .h/.cpp файлы, например pizda.h и pizda.cpp.
Объявления для функций из pizda.cpp находятся в huj.h, в описании класса.
При попытке вызова функций jigoorda() из pizda.cpp в huj.cpp получаем
undefined reference to Huj::jigoorda()

Как корректно расставить инклуды, чтобы подключайть только *.h файлы?
#225 #550415
>>550402
Объявления всех функций про которые нужно знать снаружи выносишь в хедер. Хедер подключаешь где нужно. Может ты с неймспейсами запутался?
#226 #550419
Привет анон. Сейчас начали в инсте изучать WinApi, написали пару программ, мне понравилось, сейчас захотел для практики написать себе прогу. Суть: должна авторизовываться на сайте, парсить одну страницу, заходить по ссылкам и вводить там числа в форму для отправки. Собственно вопрос. Что погуглить по этой теме или мб. есть готовые библиотеки? сайт на html.
#227 #550435
Сап аноны. Ударился тут в спортивное программирование. Когда сдаю задачку в проверяющую систему, то в зависимости от того, как выделил память, ловлю Runtime Error. Поясните за статическое выделение - неужели 118 килобайт пробивают стек? На VS задавал размер стека в 16 мегабайт - результат тот же. На моем компьютере все работает.

http://pastebin.com/yyWK796T

P.S. Вообще, код на pure C, но от того, компилирую я его как C или C++ код результат не меняется
#228 #550436
>>550287
constexpr int f () {return 0;}
constexpr int g () {int a = 1; return a;}

Если работают обе, то C++14. Если только первая, то C++11. Если ни одной, то C++98.
#229 #550451
>>550435
Зачем тебе на стеке столько? На стеке выделяй маленькие вещи, особеонно если их дохуища по одночке нужно создавать. Выделять мегабайтный массив на стеке один раз за программу практически бессмысленно, разве чтобы потом free() не проебать, но в main похуй, вся память все равно освободится после кила программы.
#230 #550459
>>550415
Да нет, неймспейсами я не пользуюсь.
Суть в том, что я хочу разбить реализацию методов класса на разные *.cpp файлы.
#231 #550462
>>550451
Ну просто все в олимп. прогр. выделяют статически, т.к. на куче выделить - потерять времени, поэтому я и попробовал тоже выделить на стеке. В реальных программах я так не делаю. Вопрос не в правильности, вопрос в том, почему 10001 * 12 байт кладут программу, ведь если верить FAQ проверяющей системы, размер стека на всех компиляторах, кроме VS, 64 мегабайта. Runtime Error появляется на любом компиляторе (там доступны VS, GCC, clang).
#232 #550534
>>550462
Бинарным поиском определи какой размер не ложит проверяющую систему.
#233 #550538
>>550459
Оно крашится вообще во время printf, стек здесь не при чем. Небось в куче-то защита не срабатывает, когда ты считать не свое пытаешься, а на стеке срабатывает.
#234 #550572
Cэджвика стоит читать?
Хочу хоть немного надрочить алгоритмы, на собеседованиях просто доебали уже ими.
Слышал, что Кормэн лучше, но там очень много не шибко нужной информации.
Какой выбор сделал бы ты, анон?
#235 #550573
>>550572
https://www.coursera.org/course/algs4partI вот тебе Седжвик. Правда он тут вроде на яве примеры показывает, ну да не суть.
#236 #550574
>>550573
Никогда курсеру не юзал.
там платная подписка, или в чем прикол? Чем это лучше наворачивания печатного издания?
Алсо, джаву не перевариваю, лучше уж на питоне.
#237 #550580
>>550573
Анон, ты охуенен.
#238 #550582
>>550265
std::cout << __cplusplus << std::endl;
#239 #550583
>>550287

>А как узнать 11 стандарт завезли или нет?


>>550582 <---
#241 #550603
Анон, помоги долбоёбу. Нужно повернуть с помощью гиперкомплексных чисел фигуру так, чтобы у неё не изменился объем. У меня н в два раза режется при каждой попытке поворота.
#242 #550604
>>550603 вот мои каракули
http://rghost.ru/84sfDgnbr
#243 #550700
>>550582
Дебил, блядь, мать ебал твою. Сам ищи, чмо тупорылое, мы за тебя лабы делать не будем. Даун.
#244 #550703
#245 #550749
>>550574
Course Format
There will be two lectures (60-75 minutes each) each week. The lectures are divided into about 4-6 segments, separated by interactive quiz questions for you to to help you process and understand the material. In addition, there will be a problem set and a programming assignment each week and there will be a final exam.
#246 #550751
>>550435 >>550451 >>550462 >>550534
Ну и что молчим-то? Вопрос правда интересный. Каков минимальный размер стека среди всех компиляторов? Я тут тоже (почти-)спортивным программированием увлёкся, хочу небольшой массив в стэк передвинуть, а то на этапе компиляции всё известно для конкретной задачи, а считать долго и муторно, используя этот массив.

32768 байт имеются в моём распоряжении или нет? Если 16384, то мне уже не хватит.
#247 #550770
>>550751
Никто не знает. Стандарт размер стека не регламентирует. Он зависит от системы, от компилятора и от настроек компилятора. Также никто не гарантирует что твой массив действительно окажется на стеке. Гарантируется только автоматическое управление памятью - он удалится по выходе из скоупа. А компилятор спокойно может большие массивы кидать в кучу. Никто минимальным размером стека особо не заебывается - его размера достаточно для того для чего он предназначен (хранения адресов возврата). Хранение пользовательских данных на нем - грязный хак, если у тебя из-за него что-то падает то это твои проблемы. Стек для хранения маленьких переменных/структур. Если нужна скорость пишется аллокатор под нюансы конретной задачи. Все остальное суют прямо в кучу.
#248 #550783
>>550751
Не слушай теоретиков >>550770 - да, это зависит от ОС и компилятора, но 1 мегабайт в основном потоке у тебя чаще всего есть.
#249 #550793
>>550770
Старчѣ, прошлi тѣ врѣмѣна, когда размѣръ стѣка странiцѣй памѣти ограничѣнъ былъ, мы послѣднiю ѢСЪ ѢВМЪ на свалку списалѣ в 1999-м годѣ.
Ну, с разморозкѣй мѣня!
#250 #550815
>>550793
Прошли тѣ времена, когда размѣръ стека страницы памяти ограниченъ былъ, мы послѣднюю EC ЭВМ на свалку списали въ 1999-мъ году. Ну, съ разморозкой меня!
#251 #550846
>>550751
Возможно, проверяющая программа запускается ебанутым компилятором, который не делает alloca_probe? Попробуй сделай примерно так:
void my_alloca_probe(void object, size_t size) {
for (size_t i = 0; i < size; i += 4096) {
((uint8_t*)object+i)=0;
}
}
и вызови до первого доступа к твоему большому объекту.
#252 #550848
Какого хуя опять со звёздочками? *test
>>550846
Ну да похуй, я все равно наебался. В общем, суть в том, чтобы обращаться к каждой страницы стека в обратном порядке (а не как у меня), чтобы ОС поняла, что тебе нужно моар и выделила страницы памяти.
#253 #550849
>>550435

>Поясните за статическое выделение


Ты путаешь. Стек - это автоматическая память, а не статическая. Статическое выделение - это вот так:

static Node nodes[10001];

И это самый грамотный вариант, если нет рекурсии.

Размер стека определяется не компилятором, а линкером, который из объектных файлов собирает executable. Причем все сильно платформо-зависимо, в windows мире размер стэка задается в заголовке PE-файла (и есть соответствующие #pragma), в линуксе - свои заморочки, о которых я понятия не имею.
#254 #550857
А если хочешь йоба-крестовое решение, то хапни побольше в глобальную переменную (int yoba[100000000]) и перегрузи operator new так, чтобы память выделялясь в yoba методом bump ptr, а operator delete не делал ничего. Тогда, если памяти хватит, скорость будет максимальной без всяких стеков (не считая нелокальности кэша - но тут уж и не знаю, чем помочь): http://ideone.com/mQYppn
#255 #550860
>>550846
Я не он, я сочувствующий. И у меня объекты гораздо меньше (провёл оптимизацию по уменьшению объектов), краша в 15 студии не происходит. Интересно, как в других компиляторах дела обстоят и вообще, почему до сих пор знатоки стандарта не высказались?

>static Node nodes[10001];


>И это самый грамотный вариант, если нет рекурсии.



А вот здесь можно подробнее? Да, я обращаюсь к функции, где например char dohuja[10001]; несколько раз.

Почему статик лучше?
#256 #550865
Я снайпер, однако. Обращаюсь к >>550849 , тебе вот ответ: >>550860 (начиная с выделенного зелёным текста).
#257 #550944
>>550860

>почему до сих пор знатоки стандарта не высказались?


С точки зрения стандарта тебе уже пояснили все. В стандарте нет понятия "стек". И даже если забыть про это, ежу понятно, что размер стека не может не быть платформозависимым. У меня валяется ардуина, там памяти 16 килобайт, из которых дохуя уходит просто на хранение инструкций. И внезапно под него тоже пишут на крестах с небольшими оговорками. Как ты думаешь, там может на стек выделиться "1 МБ, на которые всегда можно рассчитывать", как тут выше кто-то спизданул?
#258 #550951
>>550944
Ну и чем это принципиально отличается от ситуации, когда в твоей ардуине new не сможет выделить столько же? Ах, ты это обработаешь? Лол, но как, если тебе НУЖНО 1 мб для работы?
#259 #550986
>>550462

>Ну просто все в олимп. прогр. выделяют статически, т.к. на куче выделить - потерять времени


Просто иди нахуй, олимп. долбоёб.
#260 #550988
Посоветуйте книжку по кодингу под винду. Надоело в консольке задачки решать.
#262 #551003
>>550944
Мне всего-то 64 килобайта надо на всё про всё, включая рекурсии и даже Аллаха. Кроме твоей ардуины есть ещё где стэк меньше 64 килобайт?
#263 #551047
Реквестирую сравнение SDL и SFML по пунктам:
1) удобство и интуитивность
2) производительность
3) количество сторонних либ (гуя, например)
4) функциональность изкоробки
#264 #551048
>>551003
CUDA сойдёт? Не то, чтобы там был настоящий стек, конечно.
#265 #551053
тест
#266 #551067
>>550860

>Интересно, как в других компиляторах дела обстоят и вообще, почему до сих пор знатоки стандарта не высказались?


Стандартный С++ - Тьюринг-полный язык, а любое ограничение по памяти делает его не Тьюринг-полным. Было бы странно, если бы в стандарте что-то об этом говорилось.

>А вот здесь можно подробнее?


Если ты пишешь под пека, то в static-переменную или глобальную влезет намного больше, чем в стек.
#267 #551069
>>551067

>Стандартный С++ - Тьюринг-полный язык



Пруфы?
#268 #551070
>>551069
На что? Если ты можешь реализовать на языке брейнфак, это будет Тьюринг-полный язык. Но только если под рукой у тебя бесконечная память. Иначе уже нет (и в таком случае - конечной памяти - проблема остановки принципиально разрешима).
#269 #551071
>>551070
Пруф, что по стандарту C++ - Тьюринг-полон, а в его реализациях - нет?

Насколько я знаю, по стандарту всякие там глубины стека и максимальная глубина рекурсии может быть ограничена как угодно.
#270 #551073
>>551071

>а в его реализациях - нет?


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

>Пруф, что по стандарту C++ - Тьюринг-полон


Теоретически ты можешь себе представить size_t (и void*), реализованный через длинную арифметику. В стандарте на это нет запрета (The type size_t is an implementation-defined unsigned integer type that is large enough to contain the size in bytes of any object.). Значит и ограничений на размер памяти нет. Другой вопрос, что 64-битных указателей хватит всем.
#271 #551075
>>551073

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


Я это прекрасно знаю

>Теоретически ты можешь себе представить size_t (и void*), реализованный через длинную арифметику. В стандарте на это нет запрета (The type size_t is an implementation-defined unsigned integer type that is large enough to contain the size in bytes of any object.).



Подозреваю, что "unsigned integer type" это как раз и есть запрет на это.

>Значит и ограничений на размер памяти нет.


Ну так это как раз значит, что реальный компилятор C++ на реальном компьютере может соответствовать стандарту.
#272 #551116
>>551047
В SFML есть функции отрисовки простых фигур, в SDL - нет.
#273 #551160
>>551067

>Если ты пишешь под пека, то в static-переменную или глобальную влезет намного больше, чем в стек.


LOLWTO? static-переменная разве не на стэке лежит?
#274 #551165
>>551160
Нет. Школьные "лолшто" засунь себе в жопу.
#275 #551197
>>551165
Нет. Анус себе школьный, лолшто.
#276 #551201
>>546742 (OP)

><устарело> Роберт Лафоре - Объектно-ориентированное программирование в C++ (2004)


А что там конкретно устарело?
#277 #551204
>>551201
ООП kek
#278 #551213
>>551116
А кроме этого?
#279 #551215
>>551165 >>551197
А где она лежит тогда?
#280 #551218
>>551215
Там же, где и глобальные переменные. По сути это глобальная переменная с ограниченной областью видимости. Вообще смотри https://ru.wikipedia.org/wiki/Модель_памяти_в_языке_Си
#281 #551219
>>551218
3.7 Storage duration [basic.stc]
1 Storage duration is the property of an object that defines the minimum potential lifetime of the storage
containing the object. The storage duration is determined by the construct used to create the object and is
one of the following:
(1.1) — static storage duration
(1.2) — thread storage duration
(1.3) — automatic storage duration
(1.4) — dynamic storage duration
2 Static, thread, and automatic storage durations are associated with objects introduced by declarations (3.1)
and implicitly created by the implementation (12.2). The dynamic storage duration is associated with objects
created with operator new (5.3.4).
3 The storage duration categories apply to references as well. The lifetime of a reference is its storage duration

3.7.1 Static storage duration [basic.stc.static]
1 All variables which do not have dynamic storage duration, do not have thread storage duration, and are
not local have static storage duration. The storage for these entities shall last for the duration of the
program (3.6.2, 3.6.3).
2 If a variable with static storage duration has initialization or a destructor with side effects, it shall not be
eliminated even if it appears to be unused, except that a class object or its copy/move may be eliminated
as specified in 12.8.
3 The keyword static can be used to declare a local variable with static storage duration. [ Note: 6.7 describes
the initialization of local static variables; 3.6.3 describes the destruction of local static variables. — end
note ]
#282 #551220
>>550951
Ничем, я про то и толкую. Глупо надеяться, что стандарт даст какие-то гарантии по поводу производительности железа, объемов памяти и вот этого всего. Берешь конкретно свою платформу и смотришь уже в ее спецификациях, какие гарантии предоставляются а они даже на десктопе достаточно скудные.
#283 #551223
>>551071
Двачую этого. Стандарт не запрещает быть Тьюринг-полным, но и не требует этого, иначе бы никто не мог ему соответствовать.
#284 #551224
>>551201
Она 2004 года, описывается старый стандарт. Соответственно, в каждом втором примере оттуда будет говно наподобие NULL вместо nullptr, именованных функторов вместо лямбд, const вместо constexpr, ну ты понел.
#285 #551228
>>551224
Там книжка же для тех кто вчера решил научиться программировать и до сих пор пугается строчки x=x+1 то бишь самые базовые основы.
#286 #551285
>>551228
хватит выебываться, тебе уже пояснили почему книга устарела.
#287 #551302
>>546742 (OP)
Какая у вас шапка классная! Можно мне такую же? Кто стихи пишет?
#288 #551327
>>551302
Очевидный Данте Алигьери.
#289 #551341
>>551327

>Очевидный


Кому как. Я, например, его не читал. Вот что на самом деле значит быдлокодер
#290 #551350
Как из встроенного питона/луа получить доступ ко внутренним сиппшным переменным? Или так не делается и я могу только функции вызывать и забирать результат?
#291 #551408
>>551350
Ты бы погуглил хоть. http://lua-users.org/wiki/CppObjectBinding
#292 #551502
>>546742 (OP)
помогите пожалуйста с программой
у меня не работает функция пересечения двух множеств, причём если размер первого множества меньше размера второго, то у меня не полностью выводится второе множество,
и если в двух мноествах встречается больше чем один одинаковый элемент, то выводится только первый элемент
http://pastebin.com/jFNdkDcg
#293 #551538
>>551228
Они в плане неизменных вещей все примерно одинаковые. Но учиться лучше сразу хорошим практикам, чтобы потом не узнавать с удивлением, что так, как ты, никто уже давно не пишет.
#294 #551540
>>551302
<смущенно улыбается>
мимооп
А в каком ты треде?
#295 #551541
>>551502
tl;dr. Юзать std::set вместе с std::set_intersection не пробовал?
#296 #551542
>>551540
Когда как, но чаще всего в питонотреде
#297 #551559
std::array же на стеке создаёт, да? А то объектный пул на 1024 элемента в нём не работает, а в 256 работает как часы.
#298 #551563
>>551559
Если правильно помню, создает так, как инстанцирован. Т.е. можно создать std::array динамически и не будет такого ограничения по размеру.
#299 #551631
Решил в свободное от работы и пьянок время накодить какую-нибудь простенькую игрушку. Но вот встал вопрос, чтоб писать под DirectX надо сначала заботанить винапи или можно это пропустить?
#300 #551644
Помогите пожалуйста нубу в домашнем изучении.
Короч допустим у нас есть массив символов.
char ARR = new char[SIZE];

Компилятор мне ругается на вот такую строчку
ARR[1] = "a";

Мол
invalid conversion from 'const char*' to 'char'

При этом, если я делаю ввод с клавиатуры, всё прекрасно работает и он записывает в элемент под номером 1 то, что я напишу.
cin>>ARR[1];
Не понимаю, как так получается, помогите плз.
#301 #551645
>>551644
Бля, звёздочку съело где указатель на массив создаём.
#302 #551647
>>551644
ARR[1] = 'a';
#303 #551648
>>551631
Можно пропустить, но его или какой-нибудь гуй освоить по-минимуму придется, хотя бы чтоб окно создать и получить хэндл куда рисовать.
http://stackoverflow.com/questions/1633890/gui-api-for-directx
#304 #551650
>>551648
Ну и вообще, чтобы накодить простенькую игру в свободное время, directx - очень оверкилл. Намного больше времени потратишь на его освоение и написание рендера, чем на саму игру.
Бери готовый движок лучше или либу вроде sfml.
#305 #551657
>>551647
Спасибо!
#306 #551660
>>551648
Отлично, попробую тогда освоить QT.
604 Кб, 900x900
#307 #551731
Господа, нужен ваш совет.
Практикую классы в С++.
Есть класс BankAccount, имеет три свойства. Этот класс имеет простой метод, это снятие денег со счета. Просто снять деньги получается, но я решил добавить проверку, что бы снимаемая сумма была не больше той, что есть на счету. И в случае, если сумма снимаемая больше имеющейся суммы, повторять ввод, пока не выполнится данное условие.
И вот не получается нормально, первый раз когда я ввожу снимаемую сумму, происходит проверка, сумма снимаемая оказывается больше той, что имеем, и меня просят ввести снимаемую сумму еще раз. Я целенаправленно ввожу снимаемую сумму больше той, что имеем, и мне выводится инфа, что у меня от имеющейся суммы отняли сумму, которая больше чем кол-во денег, что мы имеем.
Вот метод класса.
http://pastebin.com/f0cDH9pf
А вот весь проект, т.к. делал многофайловый проект.
https://madokami.com/96iemv.rar
IDE msvs2010
#308 #551740
>>551731
Че такое свойства?
#309 #551743
Учителка сказала, что не будет проверять мои Лабы на джаве, грит перекатываться на кресты. Подскажите необходимый максимум, чтобы программировать линейный, ветвящийся и циклический алгоритм в рамках laba3.cpp
#310 #551748
>>551743
Точно также как на джаве, только синтакс объявления классов немного другой. Читай про классы, new и delete, и для лаб хватит.
#311 #551750
>>551731
У тебя наверное символ '>' не в ту сторону.
#312 #551756
>>551731
А зачем ты в while сравниваеме числа местами поменял, в условии выше же правильно.
#313 #551799
Программаны, поясните про различие классов и структур.
Есть ли какие-то серьёзные отличия в работе? Например, если надо будет создать парочку свойств в виде public, будет ли разница в работе программы между классом и структурой?
#315 #551855
>>551750
>>551756
1е условие проверяет, что если введено число, которое больше баланса, вводить числа до тех пор, пока число которое ввели не будет меньше баланса. Т.е. баланс будет больше вводимого числа, 2е условие.
#316 #551860
>>551855

>пока число которое ввели не будет меньше баланса


Это repeat-until(condition) (которого в c++ нет, есть просто do-while(!condition)).
do-while(condition) же повторяет цикл, пока условие верно (а не пока оно не станет верно).
72 Кб, 499x333
#317 #551881
>>551860
Спасибо тебе милый человек.
#318 #551908
Срочно прошу CLion-господ ответить мне на интересный вопрос — я должен каждый сорс файл вручную прописывать в cmakelists, или есть всё же более удобные альтернативы?
#319 #551933
>>550986
Чому так грубо? Я задал вполне адекватный вопрос.
#320 #551939
>>551631
SFML.
Я серьезно.
#321 #551942
>>550849
Окей, спасибо за разъяснение. Если я пишу static, то где выделится память для массива/переменной? Алсо, попробовал сдать задачу, приписав static к объявлению массива - все тот же runtime error. Может я там в коде что-то делаю не так? Глянь, если не лень будет, пожалуйста.

http://acm.timus.ru/help.aspx?topic=cpp
P.S. Тут параметры компиляции, стек реально большой, в чем может быть проблема?
#322 #551950
Антоны, помогите написать хук с помощью Detours.
В общем есть две функции

/
?Fire@CEGun@@UAE?AW4FireResult@@ABVVector@@@Z
public: virtual enum FireResult __thiscall CEGun::Fire(class Vector const &)
/

/ public: bool __thiscall CEGun::ComputeTgtLeadPosition(class Vector &)const /

В общем суть: хук повесить на первую функцию, в хуке вызвать вторую функцию и её результат задать первой функции

Я уже совсем заебался, познаний совсем нету, кто поможет? Нужно написать все одну dll. Она не больше вроде 50 строк.
#323 #551951
>>551942
Не будь как маленький, поставь брейкпоинт сразу после аллокации массива. Если не доходит до него - проблема в массиве. Если доходит - где-то еще.
#324 #551953
>>551908
При добавлении файла можешь указать галочку, он сам добавит сорцы.
Но норм люди пишут симэйк обычно руками.
Структура проекта:
/
/Logger/сорцы
/Custom/Core
/Custom/Plugins
/writter/win/сорцы
/writter/mac/сорцы

Cmake:
...
aux_source_directory(./Logger LOGGER_SRC)
aux_source_directory(./Custom/Core CORE_SRC)

if (WIN32)
aux_source_directory(./writter/win WRITTER_SRC)
elif(APPLE)
aux_source_directory(./writter/mac WRITTER_SRC)
endif()

if (${PROJECT_PLUGINS_ENABLED})
aux_source_directory(./writter/Plugins PLUGINS_SRC)
endif()

add_executable(${PROJECT_NAME}
${CORE_SRC}
${LOGGER_SRC}
${WRITTER_SRC}
${PLUGINS_SRC}
)

И при запуске cmake, что на маке, что на винде можно юзать

cmake .
Тогда забилдится исполняемый файл/либа без плагинов для текущей оси.

Если нужны плагины, то
cmake . -DPROJECT_PLUGINS_ENABLED
#324 #551953
>>551908
При добавлении файла можешь указать галочку, он сам добавит сорцы.
Но норм люди пишут симэйк обычно руками.
Структура проекта:
/
/Logger/сорцы
/Custom/Core
/Custom/Plugins
/writter/win/сорцы
/writter/mac/сорцы

Cmake:
...
aux_source_directory(./Logger LOGGER_SRC)
aux_source_directory(./Custom/Core CORE_SRC)

if (WIN32)
aux_source_directory(./writter/win WRITTER_SRC)
elif(APPLE)
aux_source_directory(./writter/mac WRITTER_SRC)
endif()

if (${PROJECT_PLUGINS_ENABLED})
aux_source_directory(./writter/Plugins PLUGINS_SRC)
endif()

add_executable(${PROJECT_NAME}
${CORE_SRC}
${LOGGER_SRC}
${WRITTER_SRC}
${PLUGINS_SRC}
)

И при запуске cmake, что на маке, что на винде можно юзать

cmake .
Тогда забилдится исполняемый файл/либа без плагинов для текущей оси.

Если нужны плагины, то
cmake . -DPROJECT_PLUGINS_ENABLED
#325 #551969
>>551950
Ладно, давайте тогда так.

public: bool __thiscal
Как это расшифровать? Гугл выдает ссылки на стаковерфлоу, а мне бы кратенько, смысл написанного.
#326 #552001
>>551969
Публичный член CEGun, возвращает bool, подчиняется соглашению о вызовах методов класса thiscall, когда указатель на объект, от имени которого вызывается метод, записывается в ECX.
#327 #552075
>>551951
Так в том то и дело, что у меня все прекрасно работает. Не могу я воспроизвести баг.
#328 #552083
>>551047
SDL не использовал, когда выбирал между ними больше понравился SFML, поэтому напишу только про него:
1) норм, проблем не было.
2) мне скорости хватало, рисовал все через VertexArray. Вообще странный вопрос, т.к. что SDL, что SFML просто обертки.
3) хз, вроде на форумах что-то было. НИНУЖНО/нормальному гую похую к чему прикручиватся.
4) вроде норм.
Что не понравилось: у SFML нету нормальной матлибы, есть потешные структурки "типа" векторы, но без каких-либо методов/конструкторов. Стороннюю либу взять можно, но приходилось конвертировать свои векторы/цвет в это потешное говно. НАХУЙ ТАК ЖИТЬ.
Был баг при потери фокуса окна, но его мгновенно пофиксили.
Но вообще, достаточно симпатично.
#329 #552148
>>552075
Ели это олимпиадная задачка, то на каком тесте валится? Если не на первом - проблема в коде.
#330 #552392
>>552075
Ну так наставь дебажных выводов в stdout и в stderr вида "line 15: array created" и смотри на то что тебе вернёт проверяющая система.
#331 #552410
>>552392
Если я правильно понимаю, в ACM вывод не виден решающему непосредственно. Приходит типа отчета по пройденных тестах и все.
#332 #552431
>>552410
Тогда лови ошибку в try-catch. Есть ошибка - не поймал, тест провален и без ошибки - поймал.
#333 #552465
Сап, ананасы.

Зазывают в достаточно крупную международную компанию POS/банковских сервисов. Прошел первый этап собеседования, выяснил для себя что кодить нужно на чистом Си.

Нет, я конечно писал на нем и много, но: может кто сталкивался - в чем специфика? Почему именно Си? Я как-то всегда наивно считал (до этого писал медийный хайлоад), что весь банковский софт пишется на плюсах и джаве. А вот оно как.

Заранее признателен.
#334 #552480
>>552431
У этих пидоров запрещены любые исключения, даже которые ты сам ловишь. Как только бросается - runtime error.
#335 #552520
>>552465
Цэ - потому что быстрый. Не кресты - потому что тяжкий крест груз стандарта и обратной совместимости с Си и ненужных обвесков-заплаток, которыми никто не пользуется. 0x14 сейчас вроде актуальный стандарт, они в последних стандартах толковой хуеты надобавляли(лямбды, замыкания, moving semantics, constexpr, STL smart pointers, threads, hashtables) - но нужно во всём этом разбираться. Копаться в чьих-то сколь-нибудь сложных templates - это адский ад. Хотя сама штука весьма полезная и нужная по задумке, реалии мира же суровы.
Квалификация нужна повыше, чем в Цэ соответственно. Иногда чистого Цэ хватает за глаза для определённых задач(где не надо ООП, полиморфизма). Например те же вычислительные/алгоритмические задачи, где надо пережевать огромный входной файл/базу во что-то полезное.
#336 #552521
>>550770

>Никто минимальным размером стека особо не заебывается - его размера достаточно для того для чего он предназначен (хранения адресов возврата).


Он также предназначен для локальных переменных(к примеру тех же временно живущих указателей, в которые распределяешь кучу, временных значений при вычислении) и передачи параметров(т.н. фреймов вызова функций) - и рекурсии соответственно.
‮минонА #337 #552558
>>552480
Тогда по старинке - комментируешь половину кода и посылаешь. Есть rt-error – ошибка в незакомментированном коде.
Только сам сначала проверяй, что полученная каша запускается.
#338 #552678
>>552520
А замыкания разве добавили уже? Это же вроде пока только экспериментальная фича, которую кроме мелкомягких ни один компилятор не внедрил.
#339 #552684
>>552678
Мелкомягкие внедряют фичи последними.
#340 #552707
>>552684
Они их внедряют избирательно. Большая часть весомых фич из 17 стандарта за ними, но зато не весь 14 держат.
#341 #552716
Пытаюсь освоить очереди, чет вообще пока грустно.
Есть задача: Заявки 1-го типа поступают в "хвост" очереди по случайному закону с интервалом времени Т1, равномерно распределенным от 0 до 5 единиц времени (е.в.). В ОА они поступают из "головы" очереди по одной и обслуживаются также равновероятно за время Т2 от 0 до 4 е.в., после чего покидают систему.
Найти, например, время прохождения 1000 заявок.
Как-то запрограммировать?
Очень желательно без stl
#342 #552719
>>552716

>без stl


От написания своего stl тебе станет понятнее?
#343 #552722
>>552719
Я думаю, что сначала лучше разобраться "как всё устроено", пописать свои pop-push/подобное руками, а потом уже stl использовать.
Но вообще, я буду рад любому решению, которое я смогу понять, ибо задачка выше-это кусок большой задачи, которую мне потом нужно сделать.
#344 #552728
>>552722
Ты случаем не пишешь диплом в одном из ДС2 вузов, в районе Адмиралтейской?
#345 #552736
>>552728
Не, это лаба 2 курса дс.
#346 #552745
>>552716

> без stl


В твоей постановки он не нужен. Тебе не надо хранить очередь, нужна только её текущая глубина.

http://www.r-bloggers.com/simulating-a-queue-in-r/
Вот так, только на cpp. Хотя нахуй cpp, на R это проще, только при генерации времени следующего прихода/ухода вместо rexp() заюзай runif().
Я, когда писал дипломную, обернул тот код в функцию, которая принимает на вход функцию распределения времени прибытия и обработки событий и листы с параметрами для первой и второй функции и гонял с разными параметрами.
#347 #552750
>>552745
Мм, ничего не понятно, но сейчас разберусь.
Спасибо.
#348 #552792
>>552707
Они и 11 пока не держат, лол. Нет, если мне не изменяет память, какой-то ебалы для SFINAE и еще чего-то.
#349 #552795
>>552736
Лол, у нас что-то подобное по имитационному моделированию задавали. По меркам МГУ халява лютая, все радовались.
#350 #552802
>>546742 (OP)
Позавчера попалась книга Хакинг. Искусство эксплоита. Открываю значит, ознакомился с содержанием. Там язык С. Про который я думал, что он мертв. Неужели, чтобы понять и применить на практике(с целью ознакомления) все хуитки из книги я должен пердолить С? Все эти работы с памятью, эти сдвиги, че несут вообще. Никакой альтернативы нет?
три курса хтмл+цсс и жбскрипта.
#351 #552806
>>552802
Лол. Ну на HTML пиши, хуле.
#352 #552807
>>552802
Нахуя? Делай сплоенты на цсс.
#353 #552808
>>552802
Да, здесь таки все в свое время отведали низкоуровневого говна, и ты так делай. Почему это нужно - есть статья Спольски: http://russian.joelonsoftware.com/Articles/LeakyAbstractions.html Так что читай Кернигана-Ритчи и пиздуй в си-тред, ссылка есть в шапке.
#354 #552815
>>552806
>>552807
А вы мемасные парнишки
>>552808
Ок, спасибо
#355 #552841
>>551047

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

sfml полноценный фреймворк, к тому же на крестах, а сдл на чистом си, впрочем там настолько все просто о и тупо что на крестах это не сделать даже если бы и захотели бы
#356 #552842
>>550988

C++ GUI Programming with Qt4
28 Кб, 463x634
#357 #552947
Поясните, почему такая хуйня не работает. Я же получаю указатель на переменную, т.е., если изменится её значение, я узнаю об этом.

И как мне тогда реализовать такую схемку - вначале у меня кучу раз добавляется всё в этот map, а потом одним вызовом всё инициализируется? И все указатели, которые были получены до этого через Submit, мгновенно становятся валидными?
#358 #552956
>>552947

> Я же получаю указатель на переменную, т.е., если изменится её значение, я узнаю об этом.


https://ideone.com/AzFlkj
Лучше юзай ссылку.
#359 #552957
>>552956
Спасибо.
#360 #552963
>>552947
Указатель указывает на какое-то место в памяти. В твоём случае он указывает в никуда. Возвращая его из метода ты копируешь его. А он всё так же указывает на пустоту. Как и с обычной переменной это твоя локальная копия.
Если бы этот указатель указывал на определённый адрес в системе, то ты бы по нему менял объект по этому адресу. При этом сам указатель бы не менялся. Повторюсь, т.к. это просто копия. И эта копия хранится совсем в другом месте, нежели то, что в мапе или то что создано в методе. При условии, что отсутствует оптимизация компиля.

А вот сейчас осторожно.
Для твоего воgроса о слежении за изменениями объекта по указателю тебе и нужно брать адрес этого указателя. И таким образом ты сможешь отследить появился ли объект там, куда указывал указатель. Изменился ли он и т.п.

На всякий случай приложу код.
https://ideone.com/B25kqS

И почитай много хорошей лит-ры. Этот код очень не хорош, за него даже не пизят по ебальнику, а просто закапывают :3 Сохранил твою структуру, чтобы тебе было проще понять как оно работает. На этапе обучения это важнее
#361 #552965
>>552947
>>552963

Ещё забыл добавить, что твой возврат из метода map[key] тоже не очень хорошо.
Если ты зайдёшь вот сюда http://en.cppreference.com/w/cpp/container/map , то увидишь
"Search, removal, and insertion operations have logarithmic complexity". Это, увы, обозначает что ты потратишь в худшем случае log(map_size) времени на повторный поиск. А ещё учти посимвольное странение строк. Короче, проебёшь кучу времени. И от таких ситуаций оптимизация компилятора не спасёт.
Поэтому теперь переводим свой взгляд на http://en.cppreference.com/w/cpp/container/map/insert и http://en.cppreference.com/w/cpp/container/map/emplace и видим что-то такое:

std::pair<iterator,bool> insert( const value_type& value );
...
Return value
1-2) Returns a pair consisting of an iterator to the inserted element (or to the element that prevented the insertion) and a bool denoting whether the insertion took place.
3-4) Returns an iterator to the inserted element, or to the element that prevented the insertion.
5-6) (none)

Вот. Отсюда, мы вернём указатель с гораздо меньшими затратами.
Надеюсь не зря простыню написал и что-то ты понял :3
#362 #553044
>>552963
Так у меня не этап обучения, а менеджер текстур. С условием, чтобы не было никакой подгрузки в рантайме. И с условием, чтобы одна и та же текстурка не грузилась дважды. А ещё с условием, что текстуры могут быть как ID3D11ShaderResourceView, так и ID3D12Resource, так и какой-нибудь OpenGL-овский unsigned int.

Ну ладно, с типами данных легко, можно создать map<string, void*>, возвращать этот же войд и делать reinterpret_cast в рендерере. Да, немного костыльно, но по-другому нельзя. Зато reinterpret_cast не ест тактов процессора.

Условие, чтобы она не грузилась дважды, сделать тоже легко - взять map с ключом - именем файла. И проверять на наличие в map этого ключа.

А вот что делать с отложенной инициализацией... Созданные текстуры раскиданы довольно много где.

Я думал о том, чтобы ввести систему ID текстур и просто получать их по ID. Да, неплохо, но оверхед пугает, да и друг сказал, что не нужно и можно обойтись. Жёсткий рантайм всё-таки.

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

>>552965
Я знаю про логарифмическую сложность. Поэтому и взял map - в нём поиск всегда занимает логарифмическую сложность, что означает, что это будет происходить довольно быстро.

Хотя всё равно спасибо.
#363 #553052
В чём разница между этой функцией:

char SomeAlgorithm(char S[35]) {

char
S1 = NULL, S2 = NULL;
S1 = (char
)malloc( 35 );
S2 = (char )malloc( 35 );
strcpy( S2, S );



strcpy( S1, S2 );
return S1;
}

и этой:

static char
SomeAlgorithm(char S[35]) {

char S1 = NULL, S2 = NULL;
S1 = (char )malloc( 35 );
S2 = (char
)malloc( 35 );
strcpy( S2, S );



strcpy( S1, S2 );
free( S2 );
return S1;
}

И вообще, когда применяется static к функциям?
#363 #553052
В чём разница между этой функцией:

char SomeAlgorithm(char S[35]) {

char
S1 = NULL, S2 = NULL;
S1 = (char
)malloc( 35 );
S2 = (char )malloc( 35 );
strcpy( S2, S );



strcpy( S1, S2 );
return S1;
}

и этой:

static char
SomeAlgorithm(char S[35]) {

char S1 = NULL, S2 = NULL;
S1 = (char )malloc( 35 );
S2 = (char
)malloc( 35 );
strcpy( S2, S );



strcpy( S1, S2 );
free( S2 );
return S1;
}

И вообще, когда применяется static к функциям?
#364 #553054
>>553052
Если static применён просто так, к глобальной функции - то это будет означать, что доступа к функции не будет из других файлов, она будет видна только в этом.
Если в классе - то это будет означать, что не нужно создавать объект класса, чтобы вызвать функцию.
#365 #553058
>>553054
А если не "просто так"? Получается, особой разницы между этими функциями нет, если они в пределах одного файла?

>>553052
И ещё забыл добавить, что на месте многоточий может происходить всё, что угодно, изменение строк в том числе.
#366 #553066
>>553058
Со static перед функцией ты не засираешь глобальное пространство имен, лучше писать везде, где возможно.
#367 #553068
>>553066
Понятно, спасибо.
#368 #553136
Посаны, поясните по хардкору, есть ли разница межу:
Type variable;
и
Type
variable;
???
0 Кб, 178x77
#369 #553140
>>553136
Type variable;
и
Type
variable;
???
#370 #553148
>>553044
Почему не unordered_map, там поиск за константное время?
#371 #553149
>>553066
Хуйню написал. static для нелокальных сущностей deprecated, следует использовать анонимные пространства имен, если хочешь запретить доступ из других файлов.
#372 #553151
>>553136
Разницы нет.
#374 #553160
>>553148
Хех, а вот тут спасибо.
#375 #553161
Вообще даже эстетически сишный подход лучше.
#376 #553162
>>553156
Хм, ну да, формально все верно. Но энивей лучше не использовать, когда есть возможность в анонимные пространства имен, они же более наглядны у static вообще сильно многозначная семантика.
#377 #553163
#378 #553168
>>553162

>у static вообще сильно многозначная семантика


Вполне однозначная, непонятно только ньюфагам, но им и анонимные неймспейсы лучше не будут.
#379 #553182
>>552963
Смотрю на код и нихуя не понимаю. Похоже, мое призвание - завод.
мимоньюфаня
#380 #553211
>>552716

>Как-то запрограммировать?


Берёшь теорвер и считаешь.
#381 #553253
http://ideone.com/ErEnVM

нагло врываюсь
#382 #553256
2 Вопроса к знающим господам (спрошу у вас, потому что все вы наверняка знаете Си):
почему компилятор не выдает ошибку, когда я пытаюсь положить значение в область памяти, которая моей не является?
вот код:
int mas=(int)calloc(10,sizeof(int));
int mas2[10];
if (mas!=NULL)
{
mas2[10]=1;
mas[10]=1;
}
2) является ли эта ситуация undefined или unspecified behavior?
#383 #553264
>>553256
1. Потому что компилятор не занимается статическим анализом.
2. А system("rm -rf /") - это какой behavior?
#384 #553265
>>553256

> почему компилятор не выдает ошибк


Компилятор не следит за границами массивов. Это UB. UB даже просто установить указатель за границы выделеного именно для этого указателя массива памяти, за исключением одного элемента следущего прямо за выделеным блоком. Тоесть mas+=10; - норма, mas+=11; - UB, *(mas+10) - UB.
#385 #553267
>>553253
И что?
#386 #553274
Как можно в C/C++ открыть RTMP-стрим и выводить видео на экран? В гугле по запросу с rtmp ничего по теме не гуглится. Нашел, что можно вывести через directshow, но мне бы кроссплатформенное что-нибудь.
#387 #553276
>>553274
Нашел еще, что можно при помощи либы librtmp сделать клиента, но пока ищу примеры как с её помощью вывести изображение на экран.
#388 #553282
>>553168
Не, я в том смысле, что одно и то же ключевое слово, в зависимости от контекста, означает разное. Это вообще довольно больное место C++, потому что из-за static, или, например, virtual которое может обозначать как виртуальный метод, так и виртуальное наследование грамматика не является бесконтекстной, и разбирать ее сложнее. И компиляция замедляется.
#389 #553284
>>553256
Undefined это.
#390 #553285
>>553265
Неправда же. Установить указатель можно на что угодно, это допустимо. UB возникнет при попытке его разыменования.
sage #391 #553289
>>553264
Щяс проверю))
#392 #553294
>>553274
Ладно, хуй с ним.
Возьму за основу ffplay и буду его пилить.
#393 #553311
>>553265
за исключением одного элемента следущего прямо за выделеным блоком - почему так?? там же уже мусор лежит и это не выделенная память?
получается, я могу положить любое значение в любой участок памяти, выделенной процессу (и на стеке и в куче), если он уже не используется мной же?
#394 #553333
>>553285

>Неправда же


А если я покажу место в стандарте?
#395 #553338
>>553311

> там же уже мусор лежит и это не выделенная память?


Ты не знаешь, что там лежит, т.к. не можешь разыменовывать указатель.

> за исключением одного элемента следущего прямо за выделеным блоком - почему так?


Потому что массивы принято описывать как полуоткрытые интервалы.
#396 #553342
>>553333
Покажи.
#397 #553345
>>553333
покажи, няша.
автор вопроса
#398 #553349
>>553338
как не могу, если я свободно туда значение кладу
и если он полуоткрытый [0;10), почему я могу ложить значение в [10]?
#399 #553354
>>553342
>>553345

> If both the pointer operand and the result point to elements of the same array object, or one past


the last element of the array object, the evaluation shall not produce an overflow; otherwise, the behavior is undefined.
5.7(5)
#400 #553355
>>553349
Потому что размер массива в общем случае известен только в рантайме. Ты можешь сказать, что в твоем конкретном случае это не так, но компилятор статическим анализом не занимается, и он понятия не имеет, заходишь ли ты за границы массива или нет.
#401 #553356
>>553349
По стандарту это UB.
#402 #553357
>>553311

> за исключением одного элемента следущего прямо за выделеным блоком - почему так


Чтобы в цикле можно было удобно пройти по выделеному блоку памяти, что-то типа for(i=0, i <size; i++), где i - указатель. На последней итерации указатель станет указывать на участок памяти сразу за выделеным, что доспукается, но разименовывать уже нельзя. И дальше передвигать нельзя.
Есть системы где сама ОС следит чтобы ты не вылез за выделеный буфер, я деталей не знаю, но там наверное указатель не просто переменная с адресом, а объект который выдается системой (типа мьютекса), и система следит как ты с ним работаешь. Если ты запросил указатель для работы с блоком памяти то при попытке передвинуть указатель вне блока система пошлет нахуй.

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


Вообще да, но могут всплыть нюансы. Гугли "переполнение буфера".
#403 #553358
>>553355
Неправда, что компилятор вообще статическим анализом не занимается
>>553349
Тебе повезло. Так работает память в компьютере.
sage #404 #553360
>>553357

>i=0


естественно что-то типа i=mas а не 0. Привычка-с.
#405 #553361
>>553354
Ты не понял, что это значит. Это значит, что если прибавить к адресу последнего элемента единицу, то переполнения не случится, то есть нельзя расположить массив в памяти по адресам N - последнее возможное число. А вот по адресам N - последнее возможное число минус один - можно.
#406 #553363
>>553354
Это не о том. Написать int x = (int)1234567 никто не запрещает.
#407 #553364
>>553354
это плюсовый стандарт?
#408 #553367
>>553364
Я загуглил этот отрывок и нашел это - говорят, C стандарт. http://c0x.coding-guidelines.com/6.5.6.html

мимо-рандом
#409 #553372
>>553364
>>553367
Специально дал конкретный пункт, но дебилы начали что-то спрашивать и что-то гуглить.
#410 #553373
>>553372
Ты сам дебил.
#411 #553374
>>553373
Лол, нет.
#412 #553376
>>553363

> никто не запрещает


Угу. Но и никто не гарантирует. Указатель, полученный из рандомного числа не является safely-derived и его поведение unspecified.
#413 #553380
>>553354
Если вкратце, что гарантирует стандарт: можно присвоить указателю что угодно, все будет WB. Можно разыменовать указатель на существующий объект, WB. Можно сравнивать указатели на любые корректные объекты при помощи == друг с другом и с nullptr, будет WB. Можно сравнивать при помощи <, >, <=, >=, но WB будет только если это элементы одного массива, либо точка сразу за концом массива (поэтому и гарантируется отсутствие переполнения по твоей цитате - чтобы можно было пройти по массиву, сравнивая с точкой за его концом, чтобы вовремя остановиться), либо члены одного объекта. Для всех прочих указателей сравнение будет unspecified behaviour, т.е. программа корректная, но конкретный результат неизвестен и зависит от реализации.
#414 #553382
>>553361
но если я положу значение в Nый элемент, мне никто не сообщит о том, что так делать нельзя?
#415 #553383
>>553357
Не совсем так. Дальше передвигать можно, без разыменования UB не будет в любом случае. Но отсутствие переполнения уже не гарантируется, т.е. в указателе может появиться теоретически рандомный адрес, ну как если бы ты без инициализации его определил, с мусором. Вроде все корректно, но использовать нельзя.
#416 #553384
>>553361

>Ты не понял, что это значит


Я прекрасно понимаю что это значит. Это пункт об арифметике указателей и о том, когда и что можно к ним прибавлять. Так вот, прибавлять к указателю можно когда он является указателем на элемент массива и так, что можно вылезти только на один элемент после конца массива. Всё остальное — UB.
#417 #553385
>>553358
Он может заниматься, но не обязан. Даже в случае ill-formed программы стандарт не всегда требует диагностики, а уж отслеживать предполагаемое UB в рантайме точно от компиляторов не требовалось и не будет.
#418 #553386
>>553380
как раскрывается аббревиатура WB?
#419 #553387
>>553384
Нет же. Переполнение возможно, но это нихуя не UB. Если ты сложил два MAX_INT, то UB не будет, ты просто данные свои же попортишь. Тут то же самое.
#420 #553390
>>553383
Тогда что считать переполнением?
#421 #553391
>>553387
Что ты несёшь?
#422 #553392
>>553382
Зауисит от компилятора. Если запустишь шланг с какими-нибудь опциями проверки нелегального доступа к памяти, то возможно он во время запуска сообщит. А может какой-нибудь компилятор и просто с -Wall -Wextra даст ворнинг, хз. А может ты попытаешься обратиться к памяти, которая принадлежит не твоей программе, и тебе операционка завершит твою прогу.
#423 #553394
>>553376
Unspecified это не критично же, программа не поломается, если ты знаешь, что делаешь. Если ты сделал двойной каст в исходный тип через тип большего размера, то ты пройдешь через unspecified и вереншься в нормальное поведение, гарантированно. А если ты попытаешься приойти так через undefined, то это некорректно, потому что все может нахуй сломаться.
#424 #553395
>>553386
Well behaviour.
#425 #553399
>>553387
Насколько я помню, и в C++ и в C любое переполнение - UB
#426 #553401
>>553399
Блджад, покурил стандарт и таки да. Мне всегда казалось, что это unspecified. Энивей, "most existing implementations of C++ ignore integer overflows".
#427 #553402
>>553384
Неа. Остальное UB - только если действительно случится переполнение. А если не случится, то никакого UB. Так что эта хуйня рандомно в реальном мире скорее всего никогда может превратиться в UB, типа такого

if (get_random_int() == 100500) {
invoke_undefined_behaviour();
}
#428 #553404
>>553399
я правильно понял, что за переполнением следит ОС?
#429 #553405
>>553402
Хм, но ты-то не знаешь, случится ли переполнение, так что по любому определенности нет у тебя.
#430 #553406
>>553402

>Неа


Ты не понимаешь, к чему относится "otherwise". Оно относится к "If both the pointer operand and the result...", а не к "shall not produce an overflow".
#431 #553407
>>553404
переполнением массивов я имел ввиду
#432 #553408
>>553404
По факту никто не следит, всем похуй, и просто портятся данные, с отбрасыванием старшей единицы. А в стандарте это типа как отказ от ответственности.
#433 #553409
>>553404
Нет.
#434 #553410
>>553401

>most existing implementations of C++ ignore integer overflows


Я уверен, что это не совсем так.
Как минимум выдача ворнингов, если статический анализ выявит, что переполнение гарантированно будет - что-то типа MAXINT + MAXINT прямо в коде.
А иногда еще какие-нибудь компиляторские оптимизации производятся на основании того, что если овервлоу, то это UB.
А еще я сейчас опять подумал и припомнил, что где-то читал, что UB это переполнение то ли только signed чисел, то ли только unsigned. Не помню, каких именно.

>>553404
Вообще процессор за этим следит и в случае переполнения ставит флаг, что случилось переполнение. C и C++ вроде как не предоставляют возможности работать с этим флагом. Так что в реальном ирл мире если у тебя в программе складываются два числа и случается переполнение, и язык у тебя используется не какая-нибудь Джава, а что-то типа C или C++, то вероятно оно переполнится, и язык на это не обратит внимания, и программа дальше будет работать.
#435 #553411
>>553407
Зависит от. Можно компилировать с флагом защиты от переполнения, плюс ос может вскукарекнуть, если ты, например, залезешь на адрес возврата. А может и не вскукарекнуть.
#436 #553414
>>553407
Че такое переполнение массивов?
#437 #553415
>>553410
Статический анализ это да, но в целом я не могу представить реализацию, когда случится что-то плохое от присваивания указателю рандомного значения, хоть даже запрещенного/с переполнением. Ну, только если это специально вставлять код, который будет это отслеживать и срать в кашу неаккуратным погроммистам.
#438 #553416
>>553414
видимо имелся ввиду выход за границы и разыменование
#439 #553417
>>553402
>>553406
Вот, сишная версия этого утверждения. Она-то точно однозначно трактуется.
Unless both the pointer operand and the result point to a member of the same array object, or one past the last member of the array object, the behavior is undefined
#440 #553419
>>553406
Ладно, ты прав, там так написано.
Но
1. Я не уверен, так ли это в C++, а еще я где-то что-то читал, что вроде противоречит этому, так что хуй знает
2. Я это вообще нашел в каком-то там The New C Standard, и я хуй знает, что это такое
3. Стоило привести весь абзац от начала, чтобы было понятно, что речь вообще про математические операции плюс и минус между указателем и числом.
#441 #553420
>>553419

>Стоило привести весь абзац от начала, чтобы было понятно, что речь вообще про математические операции плюс и минус между указателем и числом.


Ну а как ещё получить указатель на конец массива, кроме как прибавляя к указателю на начало длину массива?
#442 #553421
>>553420
получается в mas[mas.length] можно класть значение и это не будет UB?
#443 #553424
>>553421
Получать указатель можно, разыменовывать — нельзя.
#444 #553425
>>553424
нельзя потому что это запрещено стандартом, или потому что поведение в этом случае неопределено?
283 Кб, 1326x1005
#445 #553427
>>553417
Ладно, оказывается действительно

если прибавить или отнять сколько-то от указателя на сишный массив, не на что-то другое, так вот - прибавить или отнять столько, что результат не вписывается в [начало массива; конец массива плюс 1], то это UB.

Это в C++ стандарте.

для >>553421
про разыменование там ничего не сказано

Но я на 100% уверен, что разыменование конца массива плюс один, если ты на эту ячейку получил указатель не каким-то другим способом, то если не через какую-то другую переменную, это UB
#446 #553429
>>553425
Потому что стандарт говорит я не знаю, где именно, но инфа сотка говорит, что в таком случае поведение не определено
#447 #553430
>>553256
всем спасибо за разъяснения
#448 #553432
>>553421
>>553425
>>553427
>>553429
Автор >>553424 here: видимо, стандарт не говорит, что разыменовывать нельзя. Как минимум не говорит это ЯВНО.
#449 #553434
>>553432
Чтоу? Стандарт определенно где-то говорит, что в случае такого разыменования поведение не определено. Просто не в том месте, которое приведено тут. Ведь это место - оно про операции сложения и вычитания.
#450 #553436
Вы тут такие интересные вещи обсуждаете, а я второй час смотрю на функцию, которая возвращает int и не могу вспомнить нахуя она его у меня возвращает.
#451 #553437
>>553436
замени на void и посмотри где ошибка, не?
#452 #553438
>>553436
Это потому что ты нарушаешь https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md P.1 и P.3 (у тебя наверное почти последний example из P.3)
#453 #553439
>>553434
Сишный стандарт говорит " If both the pointer operand and the result point to elements of the same array object, or one past the last element of the array object, the evaluation shall not produce an overflow; otherwise, the behavior is undefined. If the result points one past the last element of the array object, it shall not be used as the operand of a unary * operator that is evaluated."
В C++-стандарте последнего предложения нет.
Вот и думай тут.
#454 #553441
>>553439
Очевидно, C++-ный стандарт просто по-другому структурирован. А в C-стандарте получается это написано в двух местах - ведь в описании оператора * унарного наверняка написано, что если он не указывает на подходящий объект, то UB.
#455 #553448
>>553441
Ну вот есть такое:
If an object of type T is located at an address A, a pointer of type cv T<star> whose value is the
address A is said to point to that object, regardless of how the value was obtained. [ Note: For instance, the address one past the end of an array (5.7) would be considered to point to an unrelated object of the array’s element type that might be located at that address. There are further restrictions on pointers to objects with dynamic storage duration; see 3.7.4.3. — end note ]
#456 #553604
>>552083
>>552841
Спасибо.
#457 #553758
Поясните нубу, почему русский текст в консоли отображается знаками вопроса?
#458 #553764
>>553758
Потому что русский язык не нужен.
#459 #553806
>>553758
Потому что в твоей консоли\проге хуйня с шрифтами\кодировкой.
#460 #553809
>>553806
Как в консоли это поправить? Я гуглил, писал setlocale, но ничего не помогает.
#461 #553895
>>546742 (OP)
http://pastebin.com/ameqBHY9
помогите плиз, не корректно работает программа, хотя код вроде бы правильный
мне нужно создать массив, в котором находятся элементы, которые содержатся в двух множествах
если общий элемент один, то всё верно, а если их несколько, то программа не работает, что не так?
#462 #553899
>>553809
Если ты на cout пишешь юзай cout.imbue() передавая туда объект C++ локали. Попробуй разные локали - на винде win1251, dos866 пробуй, не помню какая уже.
#463 #553905
>>553895
Слишком длинно. Вот как, блядь, нужно писать:

[code lang="cpp"]
std::vector <int> set1, set2, result;

// Здесь заполняем set1 и set2

std::sort (std::begin (set1), std::end (set1));
std::sort (std::begin (set2), std::end (set2));

std::set_intersection (std::begin (set1), std::end (set1),
\t\t\t\t\t\tstd::begin (set2), std::end (set2),
\t\t\t\t\t\tstd::back_inserter (result));
\t\t\t\t\t\t
result.data (); // Здесь твой массив с общими элементами
[/code]
#464 #553913
>>553895
Ну давай разберем по частям тобой написанное. Складывается впечатление, что ты вообще не имеешь представления о безопасности исключений. В конструкторе set ты память выделил? Выделил. А что будет, если T выбросит исключение в операции присваивания, ты подумал? Потечет твой массив из памяти, как твоя мамка при виде куска сала, ибо объект не будет считаться созданным, и деструктор не вызовется.
471 Кб, 1080x1080
#465 #554439
>>546742 (OP)
Нормально ли использовать Spirit для написания парсера простого ЯП?
#466 #554444
>>554439
Нормально. Нынче и хуйлоад на питонах пытаются пейсать, а ты паришься о лексическом анализе с фреймворком.
#467 #554458
>>554439
Кроме Spirit есть еще несколько реализаций генераторов лексических парсеров (lexer один из них называется или что-то вроде этого). Задаешь грамматику в БНФ вроде. Погугли lexical parser generators У них свои плюсы/недостатки перед Spirit. Например, не надо ебаться с шаблонным метапрограммированием.
#468 #554523
Поясните, где прочитать (или тут) про цикл for.
Прям подбробно, как он выглядит изнутри.
Допустим, цикл принимает вот такое
for( действие; действие; действие, действие)
но ругается на такое
for( действие, действие; действие; действие)

Страуструпа в ОПпосте открывал, там подробностей нет, в гугле тоже инфа уровня for(тут можно задать перменную; тут условие; тут инкремент)
145 Кб, 857x951
#470 #554548
>>554529
?
На 10 страниц повыше есть описание for, но точно такое же как у Страуструпа (если это не та же книга)
#471 #554553
>>554523
потому что в for первым идет объявление переменных, а не действие. Нельзя вроде сделать (int a=1, float b=2); по стандарту. Уточняй.
#472 #554559
>>554553
Но почему тогда вот такая конструкция работает?
int i = 0;
for(cout<<"hui"; i<2 ; i++)
{

}
#473 #554564
А не, я ошибся там мальца, можно там 2 выражения писать, просто если идёт объявление переменной, ничего кроме этого уже не напишешь.
#474 #554577
>>554523
Потому что "," - это "оператор запятая", который действует так: вычислить выражение до запятой, вычислить выражение после запятой и вернуть его. Поэтому i=0,j=0 работает.
Но ты пишешь типа, это уже не "оператор запятая", а разделение имен переменных в объявлении. Поэтому "int i=0, int j =0" не работает. Точно так же, как не работает в отдельной строчке:

int main() {
yoba();
int i=0, int j=0;
yoba2();
}

Зато for(int i=0,j=0;...) работать будет по той же причине, что и работает

int main() {
yoba();
int i=0, j=0;
yoba2();
}
#475 #554582
>>554577
Да, спасибо, до меня наконец дошло, вся фишка была вот в этом операторе запятой. Я как-то сразу и не подумал.
#476 #554587
>>554582
Его еще перегружать можно.
#477 #554601
Погромисты, нужен ваш совет, как вытащить из dev/random число(>1) и записать в переменную?
мимоучуплюсы
#478 #554602
>>554587
Ааа сложна.
#479 #554616
>>554601
Открываешь его как ifstream и читаешь, это обычный файл же. Алсо, если тебе просто нужно рандомное число, используй встроенный генератор std::mersenne_twister_engine, например.
1415 Кб, 1366x768
#480 #554620
>>554616
Спасиб.
#481 #554622
>>554602
Сложно, но на этом основано много магии типа boost::bind.
#482 #554623
О Боги кодинга, молю Вас о секрете замута библиотеки собственных функций. MVS видит хедер, но не более. Таки мне что делать, да куда кидать?
#483 #554628
>>554623

> Таки мне что делать


Таки кроме include path есть library path.
#484 #554630
>>554628
Так я чернь несведующая, мне примеры подавай, расписывай все
#485 #554779
Функторы отжили свое? Вместо них стоит всегда использовать лямбды?
#486 #554792
>>554779
Ну почему же. Если ты хочешь повторно использовать мономорфный код, то правильно будет просто сделать именованный функтор. Но вообще это дело вкуса, делай, как тебе удобно.
#487 #554823
>>554779
Нет, не отжили, но их сильно потеснили. Лямбды - для анонимного inline определения функтора, используемого на месте, это нужно для алгоритмов в основном. Еще у лямбд замыкание есть, а это экономит время - и может даже быстрее выполняться(если оно реализовано ссылкой на стек, вместо копирования переменных). Если же функтор не привязан к окружающему коду(используется вне контекста алгоритмов), и является обычной функцией с состоянием - то можно его объявить и классически.
#488 #554824
Функторы (что за тупое использование термина) еще наследоваться могут, например.
#489 #554829
>>554823
Поясни за замыкание?
>>554824
Где может это пригодиться?
#490 #554830
>>554829
Для йоба-ООП http://ideone.com/VlO0V7
#491 #554831
>>554830
Ты только что джаву
#492 #554832
>>554830
Где можно почитать про lvalue/rvalue/xvalue, чтобы понять это дерьмо? Сколько ни пытался понять - так и не выходит. Просто не у кого больше спросить.
#493 #554838
>>554829
Замыкание - это волшебная фича из функционального программирования. Позволяет использовать переменные из контекста объявления лямбды(переменные в зоне видимости).
https://ru.wikipedia.org/wiki/Замыкание_(программирование)
http://stackoverflow.com/questions/7627098/what-is-a-lambda-expression-in-c11
>>554832
http://stackoverflow.com/questions/3601602/what-are-rvalues-lvalues-xvalues-glvalues-and-prvalues
Тащемта, stackoverflow рулит. Там даже C++ FAQ есть в виде вопросов-ответов.
#494 #554839
>>554832
Ты должен понять мотивацию. Мотивация простая - тебе нужен механизм детектирования "временных" объектов - которые сдохнут в этой же строке от "постоянных", которые еще поживут. Зачем? Ради скорости. У временного объекта ты можешь забрать все ресурсы, все равно он труп, а вот из постоянного объекта все придется или копировать или еще как извращаться.
Например в выражении `y=f(g(x))` результат g(x) тут же сдохнет, не дожив до следующей строки. А вот `y` эту строку переживет.
И вот механизм детектирования заключается в том, что временные объекты являются rvalue references (обозначаются они не int&, а int&&). Это значит, что они могут существовать только справа от знака присваивания. Поэтому, сделав конструктор, принимающий rvalue-ссылку, ты можешь быть уверен, что ты принимаешь временный объект, который сдохнет и делать ты с ним можешь что хочешь. Например, забрать у него все unique_ptr и толстые векторы через std::move.
Это - мотивация, поэтому почитай о move-семантике и сделай класс, который может move'иться. А lvalue/rvalue/xvalue оставь разработчикам компиляторов С++.
#495 #554840
>>554839
>>554839
Еще поддвачну - rvalue/xvalue позволяет компилятору делать
https://en.wikipedia.org/wiki/Return_value_optimization
https://en.wikipedia.org/wiki/Copy_elision
#496 #554930
>>554832
Скотт Мейерс оче грамотно поясняет в своей последней книжке и вот в этой статье: http://habrahabr.ru/post/157961/
Аноним #497 #554941
>>553809

SetConsoleCP(1251);
SetConsoleOutputCP(1251);

И люсинда шрифт в консоли (у меня на семёрке так)
#500 #555043
>>554840
Нет.
#501 #555047
Двачик, помоги с лабой пожалуйста.
Задание: Распечатать только простые числа в диапазоне от 1 до N.
Вот мой код:
#include <stdio.h>
#include <iostream.h>
#include <math.h>
#include <conio.h>
void main()
{
clrscr();
cout <<"Lab-02"<<endl;
cout<<"Zadacha-6"<<endl;
int N,k,count,d;
cout <<"N = "; cin>>N;
for (k=1;k<=N;k++);//Generator chisel ot 1 do N
{
count=0;//kol-vo delitelei priravnivaem k 0
for (d=2;d<=k;d++)//Generator delitelei ot 2 do k
if (k%d==0) count++;//yvelichivaem kol-vo delitelei na 1
printf("%4d ",count);
if (count==2) //ecli 2 delitelya - chislo prostoe
printf("%4d",k); //vivodim k
}
getch();
}
#502 #555104
>>555047
И что с ним не так, кроме того, что он тяжело читается?
#503 #555108
>>555047
Короче понял, где там ошибка.
последний if должен быть
if(count==0)
cout<<k;
Ты бы хоть алгоритм изучил перед применением.
#504 #555125
>>555043
Что нет-то? Обоснуй. Суть rvalue - что не нужно временный объект создавать/копировать(он всё равно справа от присвоения будет), можно запихнуть сразу в левую часть присвоения(т.е. компилер может передать в функцию указатель, вместо возврата и копирования/переноса объекта). В чём я не прав?
#505 #555126
>>555047

>cout вместе с printf


>i++ вместо ++i


>код не отформатирован


>стало лень разбираться


facepalm.jpg
Решето эратосфена возьми рабочее, скопипасти и заюзай.
#506 #555264
>>553401

>Блджад, покурил стандарт и таки да. Мне всегда казалось, что это unspecified. Энивей, "most existing implementations of C++ ignore integer overflows".



СУРЬЁЗНО? Я может неправильно понял? У меня есть код, в котором (не один раз) встречаются (упрощённо) следующего вида циклы for:

>const std::size_t size_t_max = static_cast<std::size_t>(-1);



>for (std::size_t i = size_t_max; count < n; ++count)


>{


>array[++i] = count;


>array[++i] = count;


>array[++i] = count;


>array[++i] = count;


>}



Я хочу проходить по 4 значения array, присваивая им текущее значение счётчика. Array состоит из четырёх миллионов значений. За счёт ++i вместо i++ я хочу выиграть миллисекунду, я жадный.

В самую первую итерацию в первый инкремент у меня происходит переполнение i с size_t_max до предполагаемого нуля. И в MSVS Express 2013 это работает ровно так, как я и ожидал -- обращается к array[0] и т.д. Тем не менее, вопросы:

std::size_t i = static_cast<std::size_t>(-1);
++i;

1) Это UNDEFINED behaviour? да/нет
2) Это unspecified behaviour? да/нет
3) Можно привести прямую цитату из стандарта, разъясняющую этот момент?
#507 #555456
Анон, который вызывался помочь с c++ во вконтактеке или телеграме, ты еще здесь?
#508 #555464
>>555264
Итт тебя наебали. C signed типами - unspecified, с unsigned всё ок.
Тред утонул или удален.
Это копия, сохраненная 30 октября 2015 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски