Это копия, сохраненная 29 сентября 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Пердаков огни.
Баттхёрты сочные, сладкие
От студентов, которые дни
Проводят в смятенье, клепая всё свой говнокод
От ярости сотрясая
Самый небесный свод
Ругая Страусов трупы
И комитетский сброд
Но знай - их ошибки не вечны
Декреты сменяют устав
И код, считавшийся вечным
Забудется, легаси став
Не верь разработчику юному
Он глуп, как и нужно скоту
Ведь опытный комитетчик
Чует его за версту
Старший брат: >>820659 (OP)
Предыдущий: >>804519 (OP)
TL;DR
Q: Я хочу тотчас вкатиться, а разбираться буду в процессе. Что я должен делать?
Q: Не уверен, что хочу изучать C++. Как мне пощупать его без лишней ебли?
A: Читаешь эту книжку, смотришь упражнения из нее и суешь в онлайн-компилятор. Сообщения компилятора об ошибках копипастишь в гугл, ответы на возникающие у тебя вопросы ищешь в предыдущих тредах, спрашиваешь в этом треде, если не нашел. Если тебя послали на хуй или не ответили, то ты спросил платину, читай предыдущие треды внимательнее.
Памятка ньюфагу
- Вопросы по синтаксису идут на хуй
- Лабы идут на хуй
- "Как мне сделать Х на чистых крестах без библиотек" идут на хуй
- Все идут на хуй
- Хейтер сосет члены на пару со своей мамашей
Небольшие фрагменты кода размещай в треде при помощи тега [code] и жабаскрипт-костыля. Для больших фрагментов используй внешние сервисы.
FAQ
Мотивация
Q: Почему стоит использовать именно C++?
A: Ни один язык не идеален, но по совокупности киллер-фич C++ оставляет все остальные языки позади. Вот основные три:
- Скорость
C++ действительно быстрый язык — вместе с C, его прародителем, они с большим отрывом уделывают по скорости все остальные языки высокого уровня. Код на C++, как правило, медленнее аналогичного кода на C приблизительно на 0-20% а в ряде случаев C++ оказывается даже быстрее, причем замедление появляется только при использовании высокоуровневых конструкций (в C++ ты никогда не платишь за то, чего не используешь). Таким образом, если тебе требуется высокопроизводительный код, C++ станет отличным выбором. - Мощь
C++, являясь одним из наиболее выразительных и мощных языков, позволяет использовать большинство существующих парадигм. Его философия построена на минимальном ограничении программиста в выборе методов и инструментовпростреливания ногирешения задачи. Как следствие, используя C++, ты можешь не думать о том, как обойти искусственные ограничения языка, а беспрепятственно выбрать наиболее подходящие к ситуации средства. - Популярность
C++ по-настоящему популярен. На нем написаны десятки тысяч приложений и миллиарды строк кода, о нем написаны сотни книг, он до мельчайших подробностей документирован и стандартизован. Используя C++, ты никогда не останешься без работы или поддержки комьюнити.
Литература
Q: Окей, я решил вкатиться. Какие же книги мне читать?
A: Специально для тебя аноны /pr собрали уникальную коллекцию отборной литературы по крестам. Только лучшие книги, последние издания, без хуев! Выбирай категорию и обмазывайся:
-
Для нюфань
Учебники для начинающих. Все примерно одинаковой годноты, читать имеет смысл только какой-нибудь один, который больше приглянется:
Автор(ы) Название Год Ссылка Бьерн Страуструп Программирование. Принципы и практика использования C++ 2016 https://yadi.sk/i/Yd6KKpLBqJSUr Стэнли Липпман, Жози Лажойе и Барбара Му Язык программирования C++ 2014 https://goo.gl/kVaela Стивен Прата Язык программирования C++ 2012 https://goo.gl/z7kA8u
Другие обучающие материалы
Q: Я не умею читать.
A: Можешь посмотреть какой-нибудь онлайн-курс: раз, два, три
Q: Не люблю, когда льют воду. Хочу коротких материалов по существу.
A: Вот тебе блоги, факи, референсы и всякое такое:
- Годный блог, в котором все просто и понятно тян не нужны кококок борщ
- Блог с хорошо расписанными фичами новых стандартов
- Краткие описания библиотечных функций и контейнеров - на русском или более подробно на ангельском
- Блог Герба Саттера (на ангельском)
- Блог Скотта Мейерса (на ангельском)
- Блог еще одной тянки, много о Qt и оптимизации (на ангельском)
- Куча других блогов (на ангельском)
- Большой FAQ по C++ (на ангельском)
- Видео с CppCon (на ангельском)
Софт и библиотеки
Q: Я готов начать погроммировать! Куда мне писать код?
A: На этапе написания хэллоуворлдов можно не ебаться с установкой софта, а использовать онлайн-компиляторы: раз, два, три, четыре. Для работы над более серьезными вещами удобнее всего установить какую-нибудь IDE. Ниже приведены несколько хороших вариантов:
Платформа | Название | Описание | Ссылка |
---|---|---|---|
Windows | Microsoft™ Visual Studio® | Общепризнанно самая продвинутая и удобная IDE, не имеющая равных по части автодополнения и возможностей отладчика. По ссылкам справа можно скачать бесплатную редакцию последнего выпуска (2015 Community Edition). Кроме того, существуют редакции с расширенными возможностями (Professional и Enterprise). Они стоят сотни денег, но если ты студент вуза, подписанного на Dreamspark Premium, то ты можешь получить их безвоздмездно (то есть даром). Многим новичкам интерфейс студии кажется чересчур сложным, так что обязательно прочти этот гайд, если у тебя возникают проблемы с компиляцией хэллоуворда | https://goo.gl/qgAAc6 (русская версия) или https://goo.gl/WIPW9L (ангельская версия) |
Все | CodeLite | Простая, легковесная, кроссплатформенная, швабодная IDE. Менее навороченная, чем студия, но среди бесплатных вне конкуренции. Вероятно, это наилучший вариант для новичка с *nix. Под Windows же требует чуть больше ебли с установкой компилятора MinGW/LLVM | http://codelite.org/, "sudo aptitude install codelite codelite-plugins" для установки под *nix |
Все | CLion | IDE, призванная похоронить Visual Studio пока не особо получается. Она стоит денег, но можно украсть почти не протухшую версию на торрентах или получить бесплатную лицензию на год по скану студбилета, если ты студент. Удобные свистелки и перделки присутствуют. Тормоза и баги присутствуют. Кросплатформенность присутствует | https://www.jetbrains.com/clion |
Q: Я прочитал все вышеперечисленное, теперь я гуру! Что дальше?
A: Дальше переходишь по ссылке, пробуешь отвечать на вопросы и понимаешь, что ты пока в самом начале пути. Кроличья нора крестов практически бездонна, поэтому продолжать постигать тонкости и детали можно очень и очень долго. В то же время, на этом этапе у тебя должно быть достаточно знаний, чтобы уверенно писать неплохой код. Поэтому читай исходники открытого софта и библиотек, отправляй пулл-реквесты в них, читай книжки по предметным областям и общим методикам разработки, а дальше уже сможешь запилить свой проект или вкатиться в существующий.
Пердаков огни.
Баттхёрты сочные, сладкие
От студентов, которые дни
Проводят в смятенье, клепая всё свой говнокод
От ярости сотрясая
Самый небесный свод
Ругая Страусов трупы
И комитетский сброд
Но знай - их ошибки не вечны
Декреты сменяют устав
И код, считавшийся вечным
Забудется, легаси став
Не верь разработчику юному
Он глуп, как и нужно скоту
Ведь опытный комитетчик
Чует его за версту
c++ не нужен, есть раст
http://ideone.com/Ir4tpi
Ты читать умеешь или у тебя с этим туго?
У тебя имя функции конфликтует с std::plus, ибо нехуй делать using namespace std;
prog.cpp:3:5: note: candidates are: template<class T> int plus(T&, T&)
int plus(T &a,T &b);
^
In file included from /usr/include/c++/5/string:48:0,
from /usr/include/c++/5/bits/locale_classes.h:40,
from /usr/include/c++/5/bits/ios_base.h:41,
from /usr/include/c++/5/ios:42,
from /usr/include/c++/5/ostream:38,
from /usr/include/c++/5/iostream:39,
from prog.cpp:1:
/usr/include/c++/5/bits/stl_function.h:147:12: note: template<class _Tp> struct std::plus
struct plus;
http://ideone.com/GnFFmj
Заем нужен Си, когда есть перфокарты?
Чтобы обмазаться говном, очевидно же
ОБЕЩАННОГО ТРИ ГОДА ЖДУТ
хуйня, вопросы изи для дцп-девелоперс
Первую задачу помню надо было решить для подачи заявки на стажировку в яндекс. Щас на сайте не могу найти.
Читать GotW
Это макака виновата
> А если делать 2 массива, то 2 раза маллок вызывать надо.
Кто тебе запрещает один раз выделить память размером как суммарно оба массива?
То что потом с ней будет не удобно работать. Надо же на 2 массива поделить. Может ещё какие-то подводные камни есть?
Что там делить?
size_t size = ...; // Размер массива
int #ints = malloc((sizeof (int) + 1) # size);
char #chars = (void #) ints + sizeof (int) # size;
Решетку замени на звездочку.
У беззнаковых — за максимальным значением должен идти нуль.
> тех что в стандартной библиотек
Переполнение вектора, что ли?
Если ты про дейтла, то этот форсер больше года их пытается в шапку впилить.
>У беззнаковых — за максимальным значением должен идти нуль.
А почему у остальных не так?
>Переполнение вектора, что ли?
Ага. Или строки. Что будет если их сделать слишком большими?
какой у тебя компилер? У меня сообщения чуть чуть отличаются. Ну типа говорит что вызывать здесь plus это ambligous
Мой говорит что я ambitious.
>А почему у остальных не так?
Фактически оно так, но на некоторых платформах аппаратно контролируется знак, поэтому какие-то требования бы вызвали костыли и неоптимальность в реализациях.
>Ага. Или строки. Что будет если их сделать слишком большими?
Если считать "большим" заполнение всей доступной кучи, то со стандартным аллокатором гарантируется исключение std::bad_alloc (как и для обычного new), а с пользовательским - зависит от того, как он реализован. Другого переполнения тут быть не может по определению - тип индекса (обычно size_t) гарантируется таким, что в него влезет любое количество потенциально влезающих в память объектов. Скажем, если у тебя на x86 4ГБ памяти, то даже если ты всю память потратишь на единственный вектор байтов, то в 32-битный unsigned int индекс все равно влезет, и нехватка памяти наступит раньше переполнения.
Я работаю над этим, посоны, уже скоро прям все будет.
Касабланка, например. Она заточена под асинхронность, там continuations, все дела.
Здравствуйте уважаемые сеньоры разработчики!
Очень нужен ваш совет по плюсам. Есть ли в них что-то похожие на динамическую типизацию, вернее даже не типизацию а какой-то костыль, который бы позволял создавать определенные коллекции с определенным типом.
Например вот так:
[code]
class Helper
{
public:
Дим_Тип Get_Rabdom(int size, Дим_Тип)
{
Дим_Тип data;
for(int i=0; i<size; i++)
{
data.add( random() );
}
return data;
}
}
Helper help;
vector<int> myVector = myHelper.Get_rand(50, vector<int>);
map<int, int> myMap = myHelper.Get_rand(50, map<int, int>);
[/code]
Пробовал через template<typename Type> но вроде через них так нельзя.
Здравствуйте уважаемые сеньоры разработчики!
Очень нужен ваш совет по плюсам. Есть ли в них что-то похожие на динамическую типизацию, вернее даже не типизацию а какой-то костыль, который бы позволял создавать определенные коллекции с определенным типом.
Например вот так:
[code]
class Helper
{
public:
Дим_Тип Get_Rabdom(int size, Дим_Тип)
{
Дим_Тип data;
for(int i=0; i<size; i++)
{
data.add( random() );
}
return data;
}
}
Helper help;
vector<int> myVector = myHelper.Get_rand(50, vector<int>);
map<int, int> myMap = myHelper.Get_rand(50, map<int, int>);
[/code]
Пробовал через template<typename Type> но вроде через них так нельзя.
> какой-то костыль, который бы позволял создавать определенные коллекции с определенным типом
К чему тут вообще динамическая типизация? Любой стандартный контейнер для такого подойдёт
Или тебе надо нечто на подобии ArrayList из java или с#?
Из твоего кода нихера не понял
Через шаблоны как раз можно, но этот тип надо явно указывать аргументом шаблона. Типа template <typename T> T getRandom (int size) ... и потом auto my_vector = help.getRandom <vector <int>> (50).
Если хочешь, чтобы тип передавался именно параметром, в рантайме, то можно юзать std::any в качестве возвращаемого типа, а параметром передавать строку/enum/еще какой-нибудь идентификатор. Но тогда энивей внутри придется вручную писать switch по каждому из возможных типов.
>явно указывать тип аргументом шаблона
>...help.getRandom <vector <int>> (50)
> не получается
«Лучезарному колесу в золотых мехах, носителю грозной стрелы, слуге под самым седалищем Великого и могучего Утеса, сверкающего боя, с ногой на небе, живущего, пока не исчезнут машины, к ступне повергает это донесение ничтожный стражник из рода вихрей, носитель отличного меча. Доношу первое: большая машина «воин-купол» пришла в движение от пальца в отверстии пятом и от пальца в отверстии сорок седьмом, и движение было неодолимое, быстрое и прямое. Доношу второе: явились на небывалой машине трое, не знающие речи, не носящие оружия, не понимающие установления и желающие странного. Не зная их сущности, пребываю в ожидании высоких приказаний. Доношу третье: уголь кончается, а топить мертвецами по вашему милостивому слову мы за невежеством и недоумием не умеем. При сем прилагаю: первое – чертеж большой машины «воин-купол» и второе – образцы материи, приклеенные неизвестными людьми к ранам преступников».
:D
> Почему он считается одним из самых сложный языков программирования?
Потому что иногда сам язык пытается тебя запутать. inb4: как пример, который любят всем пихать — static имеет три совершенно разных смысла в разных местах проги.
The __fbufsize function return the size of the buffer in the stream stream. This value can be used to optimize the use of the stream.
This function is declared in the stdio_ext.h header.
http://www.gnu.org/software/libc/manual/html_node/Controlling-Buffering.html
Нужен. Компилятор const не принимает во внимание, он нужен только для тайп-чекера, потому что const_cast и mutable.
> почему я должен начать изучать данный язык
Для меня, после паскаля и VB6 это была красота. (Нет, я смотрел питончик — он не красивый, у него [{};] нет)
Потом уже понял, что я статикоскоростьфаг. Хочу статическую линковку и охуенную скорость. (И преждевременные оптимизации, тысячи их!)
Короче, это дело вкуса.
Как раз и пришел с дельфей, паскаля и VB. И вот задумался... Шагать в будущее или положиться на старое дедовское...
Нет. С другими языками есть огромная толпа спецов которыми тебя заменят. На крестах спецы дороже стоят. Ещё дороже только лисп или другие полумёртвые и некому неизвестные
test
[code] cout << "(" [/code]
Что происходит, при передаче указателя на массив по значению? Он указывает на новый локальный массив? Откуда тогда функции известна его длинна?
Я си только учу, но вроде указатель передается только by reference, в этом и смысл. А массив вообще by default передается by reference, но может в плюсах не так.
>передаче указателя на массив по значению
Ты не за что не догадаешься. Массив остаётся на месте, а указатель передаётся в функция и там используется.
Жс-кун это старый оп же, он уже больше года как не у дел.
Если глобальная переменная, загрузчиком виндовым вроде декларирована инициализация нулями, в никсах не знаю. Если переменная локальная, то прочитается рандомный мусор со стека, который там остался от вызова других функций, компайлерских прологов или подобной хуйни. На самом деле, в "ячейках" не всегда что-то записано. Попробуй привести к указателю рандомное число и прочитать и прочитать значение, разыменовав его. Скорее всего, подходящей страницы виртуальной памяти не окажется, и вылетит исключение.
> Как работает оперативка компа что всегда в ячейках что-то записано?
Для этого есть специальные механизмы в материнской плате. Если бы не они, то чипы с оперативкой исчезали бы из системного блока при освобождении и памяти и появлялись по мере её заполнения. Это очень сложная магия. Зачем она тебе?
Аутизм мб. Это посты разных людей, если что, так что назвал навскидку самое распространенное на сосаче.
Вообще пиздец
Ругается на
>char fab[20];
>Frabjous(const char •s = "C++") : fab(s) {}
Два вопроса:
1. Как это исправить-то, чтобы через initialization list, а не strcpy в теле? Ну и не fab{s[0], s[1], s[2], s[3]}, разумеется.
2. А почему оно вообще не работет-то?
>char x[10]("string")
Нормально, а вот
>const char • s = "string"
>char x[10](s)
не хочет. Но ведь это практически одно и тоже, разве нет?
Для начала хотя бы игру в "Камень-ножницы-бумага"?
Один игрок пишет одно, второй другое и обоим выписывает результат
Если да, то где искать как это делать?
>написать простейший сокет-сервер
>продолжительность видео 10:21
>больше 100 строк говнокода на server.cpp
>почти 100 строк говнокода на клиент
пиздец, какие же крестоблядки говноежки, и это в 2016 году
Разумеется,
import http.socket
http.socket.server.start()
гораздо проще, но ведь эти же 100 строк кода там внутри и находятся.
погодите, так это говно ещё и в одном треде работает? больше 100 строк на однотредовый блокирующийся сервер? лооол
представляю какой там будет срачельничек с локами, мьютексами или колбеками с стиле говняшная + pthreads, если надо будет сделать мультитредовый сервак
Так а есть какие-то удобные абстракции, что-то в стиле эрланговского gen_tcp или хотя бы akka i/o tcp?
В стандартной либе нет.
Нет конечно, даже самые высокоуровенные библиотеки вроде CAF пародирующие эрланг заставляют писать те же сто строчек на то, что в эрланге делается буквально в 5.
Очевидный asio, его вроде даже собирались в 17 включать, но под конец прокинули через хуй, может в 23 завезут нет.
Впрочем, он давно умеет в standalone без сотен мегабайт буста и элементарно подключается в проект.
target_link_libraries(wtsapi32.lib) - ошибка сборки
>target_link_libraries(wtsapi32.lib)
Ты бы хоть почитал какие аргументы оно принемает и сколько.
target_link_libraries(target wtsapi32)
>1. Как это исправить-то, чтобы через initialization list, а не strcpy в теле? Ну и не fab{s[0], s[1], s[2], s[3]}, разумеется.
Сделать string
>2. А почему оно вообще не работет-то?
Размер массива ограничен, а в s может хранится слишком большая строка.
https://ideone.com/Kq14Y1
Юзай уже готовые средства кодогенерации/автодокументации.
Либо велосипедь свои, выбора у тебя не осбо много.
Смотря что тебе нужно:
https://www.gnu.org/software/m4/m4.html
https://github.com/gccxml/pygccxml
http://eli.thegreenplace.net/2011/07/03/parsing-c-in-python-with-clang
Видел, люди пхп как макроязык для сишки использовали.
Не новичёк, азы знаю.
Ну так Энтони уже все сказал, с тех пор добавились разве что параллельные версии алгоритмов из серьезного, но это тема на пару страниц, не на книгу. Дальше только читать исходники либ, или какие-нибудь книжки по обобщенной параллельности. Материалы с Highload++ попробуй, например.
>я хочу узнать, как работает память, и т. д., чтобы прояснить для себя некоторые моменты, в частности, move-semantics
Никакого отношения к тому, как работает память, move-semantics не имеет.
Т.е. я имею в виду, что вызов move constructor-а ничем не выделяется.
>где мне прочитать о вызовах функции в C++ с точки зрения машины
https://en.wikipedia.org/wiki/X86_calling_conventions
>move-semantics
Move-semantics к работе памяти не имеет отношения. Это чисто фишка системы типов: в каком контексте вызывается &&, а в каком &.
Да я понял, спасибо. Я это к тому написал, что начал читать 4th edition, и тупил вообще. Вроде сейчас разобрался, что и как, т.е. если я определяю функцию например:
MyType Sup2ch(MyType);
то в main, где я вызову эту функцию отработает два конструктора копирования для передачи переменной в функцию, и при передаче результата обратно.
>>823769
Спасибо, я потихоньку начну читать вики на эту тему, а вообще, где нормально и четко можно глянуть инфу о памяти? А то везде в книжках пишут типо этого: "Ну есть стек в main, есть область глобальной памяти, есть куча." Мне кажется, что эта инфа подходит только для очень поверхностного ознакомления.
И да, спасибо, реально помогаете.
Спасибо, я, еблан, даже слов для поисковика бы не подобрал. По-русски писал чет, там блядь одно говно за динамические массивы в стиле лабы первокурсника.
Если хочешь более подробных примеров - обмазывайся листингами. Тот же шланг с флагом -S выдаст тебе довольно читабельный листинг.
Шланг - это clang, компилятор. Делаешь что-то типа clang -S test_file.cpp и на выходе волучешь .s файл с ассемблерным листингом.
Хотя я начинаю сомневаться что ты в нём хоть что-то разберёшь.
спасибоу меня gcc стоит, ну поставлю, разберусь,
>In practical words, when we run any C-program, its executable image is loaded into RAM of computer in an organized manner
Поправьте меня, пожалуйста, если не прав, если не трудно поясните:
Запуская программу, начинает как-то работать машинный код (как?) (ну или код более низкоуровнего яп типо ассеблера?), в ходе исполнения инструкций программа имеет доступ к памяти (которая оперативка, RAM), и в статьях рисуночки сверху вниз идет стек, куча, бсс и прочее - сверху это означает лево по оси адрессов, т.е. возле нулевого (или первого доступного реализацией) лежит стек, потом начиная например с 0xAA лежит куча, и так далее.
Нашел, спасибо тебе, очень мне помог, отвечаю
Типо да, надеюсь ты там без оптимизаций собирал?
Почитай, как многозадачные ОС устроены. Что такое контекст процесса ОС, виртуальная память, и т.д.
если gcc стоит, то можешь clang не ставить. Чтоб получить листинг ключ тот же -S. Если хочешь intel синтаксис, то пишешь -masm=intel
На работе лютый легаси, и как-то не используем ничего свежего. Ну и в итоге я не следя за новостями уже и не ориентируюсь в том что там надобавляли/собираются добавить.
Есть что почитать об этом сжато? Я не прошу Страуструппа всего читать.
на хабре почитай статьи
std::ofstream file("text_file.txt", std::ios_base::in);
и вот как бы мне получить указатель, чтобы скормить его feof()?
Спасибо, как раз что и нужно! Затупил я.
У меня вопроc: зачем может понадобиться отмечать деструктор как deleted? Есть какой-то пример где это нужно?
ОТКЛЫЛ MAIN.C
@
УВИДЕЛ ЭТОТ УЖАС ИЗ ГОВНОКОДА
@
ПОЛУМЕТРОВЫЕ SWITCH-CASE
@
100 КРАТНОВЛОЖЕННЫЕ IF-ELSE
@
ЗАКРЫЛ НАХУЙ И ПЕРЕКРЕСТИЛСЯ
Бля,проще бы сказал что уже есть такая стандартная функция plus.
даже с точки зрения С-программера это говнокод, съеби
Не писать на си.
Куда-то уехала индентация.
Переменные прямо в хедерах - автор не понимает, что это такое.
>#define ME_TANK 0
Даже в сишечке нужно использовать константы вместо препроцессора. Все назначение этой переменной - это быть вместо указателя tank* me, потому что автор в указатели не может.
>lightsources sources
Автор не понимает, зачем нужна система контроля версий.
README почему-то указывает сюда
https://github.com/rainautumn/ttytanks
Здесь индентация не такая поехавшая.
В целом портрет ясен, самоуверенный школьник. На С++ такое писать действительно не стоит, питона достаточно.
move operation is not implicitly generated for a class where the user has explicitly declared a destructor.
Furthermore, the generation of copy operations is deprecated in this case (§44.2.3). This
can be a good reason to explicitly define a destructor even where the compiler would have implicitly
provided one (§17.2.3).
>Furthermore, the generation of copy operations is deprecated in this case (§44.2.3).
Получается, если я явно опишу деструктор в классе, неявно не будут генерировать ни конструктор копирования, ни конструктор перемещения (copy & move constructors)?
Upd. Почему-то убедился, то это не так (copy генерируется). Знатоки C++11, объясните
в расте есть шаблонное метапрограммирование? Ну или какой-то еще вид компайл-тайм метапрограммирования?
Там есть аст макросы, которые предоставляют куда больше возможностей с меньшим кол-вом ебли.
Это моя первая книга по 11 стандарту, 4 издание Страуструпа читаю
Какая разница, как называется, если конечная суть одна? или у тебя слово "макросы" ассоциируется с текстовым препроцессором из си?
По сравнению с тем как сейчас используются шаблоны и какие костыли акробаты с ними городят - это манна небесная.
в c++17 будет relaxed constexpr, и большая часть еботни с шаблонами уйдет
Upd. Вот этот код
#include <iostream>
class Foo{
public:
~Foo() {}
};
int main() {
Foo x;
Foo y(x);
return 0;
}
сработал отлично, и не о каких неявно не сгенерированных конструкторах при явном деструкторе не было и речи
Поставь все три компилятора и прогони бенчмарки с какого нибудь benchmarksgame.
Так иногда делают, чтобы запретить создавать объекты этого типа на стеке. Аналогично, operator new удаляют, чтобы запретить создание в куче. Но вообще это костыль, тому що при размещении в куче тоже, вообще говоря, нужен деструктор. Более православное решение - сделать его приватным, тогда operator delete не обосрется, а удалять напрямую не получится.
Modern C++ от Скотта Майерса
Эффективный и современный C++, в шапке есть.
На смену придет модная дрочильня в виде friend injection, вот тогда-то ты поймешь, что SFINAE это было совсем просто, лол.
Насколько я понимаю, его юзают только когда под суперкомпьютеры пишут код для параллельных вычислений. В обычных задачах можно прикрутить OpenCL/CUDA и получить гораздо больший относительный прирост, плюс останутся модерновые фичи, которых пока нет у Intel.
Что в STL особенно удобно для этого?
deprecated значит, что поведение или функция объявлены устаревшими Они ещё есть, но в следующей мажорной версии стандарта функция будет удалена, а поведение — изменено.
Неужели это настолько ресурсоёмко?
>Неужели это настолько ресурсоёмко?
Это ебанутое наследие сишки. Причем оставлено только на глобальном уровне. Внутри класса, например, методы можно в произвольном порядке объявлять. Так же как и делать вложенные функции, объявляя локальный класс внутри функции.
>как написать конструктор копирования(для А)
Добавь virtual A clone() = 0 в интерфейс абстрактного класса, пусть наследники сами разруливают, как им копироваться.
Если у тебя там указатель, зачем копировать B? shared_ptr не подойдет?
Дело не в однопроходности же, это тебе не паскаль. Грамматика все равно неразрешима, и в общем случае, с шаблонами шаблонов там такая дрочильня, что даже с ручкой и бумагой без поллитры не разберешься. Если убрать декларации, скорость компиляции нихуя не увеличится, но появятся новые проблемы. Например, неочевидно, что делать с вызовами перегруженных функций, когда нельзя предсказать декларацию по вызову, и все зависит только от порядка опережающих деклараций.
>>825092
Даже без легаси пришлось бы делать что-то подобное, я думаю. Класс это нечто целостное, там без такого можно обойтись. А единица трансляции может состоять из хэдеров от разных авторов, и не всегда можно выбрать "единственный правильный для всего файла" набор перегрузок. Жизненный пример: ты хочешь специализировать шаблонную функцию из STL (это разрешено и применяется, например, для std::hash с нестандартными типами), но в самом хэдере она уже используется. Если поместить обе декларации (твою и шаблонную) в начало файла, то код хэдера может заюзать твою версию, чего никто не ждал. А так - пока идет хэдер, юзается стандартная, а дальше уже ты делаешь что хочешь.
>Если у тебя там указатель, зачем копировать B?
У него класс - владелец ресурса, похоже. При копировании хозяина надо копировать сам ресурс.
>>824853
Вот кодес, который показал, что я нихуя не понимаю в итераторах. Функция сортирует бинарную последовательность.
https://ideone.com/m4cuAF
Какая сложность у вычисления разности итераторов? Я использую разность вместо вызова std::distance, который в общем случае работает за O(n), но для вектора, вроде бы, за O(1). Можно ли тут уменьшить констату в сложности сортировки?
Для BidirectionalIterator гарантируется линейная сложность, как для distance, так и для разности. distance вообще нужно только для однородности кода, из-за того, что для однонаправленных разность недоступна.
За оптимизации сложно сказать. Формально было бы быстрее пихать единицы через emplace_back прямо в том же цикле, но фактически fill_n может использовать memset, который существенно быстрее. Можно параллелизовать fill_n, начиная с нового стандарта. Ну и возможности по байтоебству тут неисчерпаемые, от битовых полей вместр вектора до SIMD-инструкций, которые за пару тактов весь твой вектор свернут в бараний рог.
1. Идет постоянное считывание звука с одного из аудиоустойств
2. Этот звукобрабатывается морфером по определенному принципу
3. Создается новое аудиоустройство, которое воспроизводит полученный звук.
4. Само устройство ”подключается” только при запуске приложения.
Если кто-то подсказал бы что почитать по какому-либо пункту, я был бы крайне признателен, спасибо.
Проблемными кажутся только последние 2.
Знаешь, я могу и морфвокс юзать, мне интересно самому написать. А именно как морфвокс создал свой виртуальный микрофон и как сделать так же.
1 Как поставить студию 2015 под вайн?
2 Кто-нибудь пробовальставить студию 2015 под вайн не веб-инсталлером, а с iso -образа?
>Если поместить обе декларации (твою и шаблонную) в начало файла, то код хэдера может заюзать твою версию, чего никто не ждал. А так - пока идет хэдер, юзается стандартная, а дальше уже ты делаешь что хочешь.
Так если при одновременном объявлении твоего и стандартного появляется неясность, то почему эта неясность не появляется уже в твоём коде? То есть, допустим, в хедере выполнилась стандартная, потом ты заспециализировал свой темплейт и использовать функцию. Откуда сейчас компилятору знать, что использовать? В чём разница-то? То есть, если твоя функция вызывает неясность, то не так важно уже, когда она появится, компилятор всё равно должен ругаться, разве нет? Я, вероятно, не до конца понял описываемую ситуацию.
Почему бы и нет?
>Ну и возможности по байтоебству тут неисчерпаемые, от битовых полей вместр вектора до SIMD-инструкций, которые за пару тактов весь твой вектор свернут в бараний рог.
Можешь привести пример, как здесь применить SIMD-инструкции? Я ньюфаг в SIMD.
Пишу в нано на арче, наслаждаюсь консолью и охуенными шрифтами. А вы говноеды. Не более.
https://ideone.com/LuCMP8
Подставил Visual Studio 2015. Что дальше?
>Сколько будет ссылок на std::make_shared<int>(arg) и почему? В каком разделе стандарта об этом читать?
Но я хотел бы увидеть какие-нибудь примеры или коммьюнити тех, кто пишет подобное. Туториалы, гайды и лекции обычно или слишком общие расчитано на разработчиков другого софта с большим опытом или слишком специфичные одна фича, которую не очень понятно как аккуратно соединить с остальными.
Так вот, может у вас завалялись ссылки на исходники проектов 3d игр, созданных новичками. Лучше небольшие, грубые, недоделанные, незапускающиеся, третий год в разработке и так далее, если вы понимаете о чем я. Хотя бы просто чтобы посмотреть как другие делают. Я пытался вникнуть в коды квейк/дум, но там во-первых си, во-вторых столько оптимизации и макросов, что без гида не разобраться как это все вообще работает.
struct Fun {
void operator()(...) { ... }
};
По-умолчанию у него размер 1 байт. Если добавить __attribute__((__aligned__(8))) то у него получается размер уже 8 байт. Имеет ли это вообще смысл по части увеличения производительности и улучшения кеширования?
1. зачем тебе функтор без членов? юзай функцию
2. никакого профита с выравниванием данных не будет --- у тебя же нет данных
- я на вахту уезжаю на месяц, тырнетов там нет и есть только некронетбук. Есть ли какие-нибудь IDE, которые смогут поставиться на хрюшку 32 разрядную?
В гугле забанен.
Тебе не приходило в голову, что я параллельно читаю несколько книг, но на код все равно хочется посмотреть?
>>826286
Пробовал сам коду ид разобраться? К тому же у них не плюсы, а чисто си.
культя. кодеблокс, эклипс, хз, но может и clion взлетит
Ставь прыщи и вим, нахуй тебе иде.
Лол, дум 5 лет назад выложили, а чувство такое, что вчера об этом читал. Как же быстро я старею. Так и до появления модулей не доживу
msvc 6
notepad++ или vim, cygwin. прыщи не обязательно ставить, можешь накатить на хрюшку
>шиндошс
>ставь цыгвин
Лучше виртуалку с линуксом, в нем виртуалку с хп, а в ней цыгвин. Вот это тру будет ебать.
Я к тому, что человек вроде с языком хочет ознакомиться, а не с анальными методами прыщесборки. И авто дополнение с дебагером тут в тему будут, а нотепад можешь в жопу запихать.
Да хватит просто в виртуалке студию под вайном поднять.
Бамп вопросу. Хочу писать йоба-сортировки с использованием SIMD.
В общем, есть шаблонная функция типа
template<typename InputIterator, typename OutputIterator
typename Foo = Bar<typename std::iterator_traits<InputIterator>::value_type>>
void my_function(InputIterator first, ..., OutputIterator out, Foo fun = Foo())
{ ... }
например я ее вызываю с аргументами по умолчанию:
my_function(v.begin(), v.end(), arr.begin());
все хорошо, но когда я хочу специлизировать параметр шаблона Foo, возникают проблемы - я не могу написать так:
my_function<MyFoo>(v.begin(), v.end(), arr.begin());
потому что первыми в шаблоне идет итераторы, но я не хочу писать специализацию к итераторам для того чтобы зада Foo
и я не могу поставить типа итераторов после Foo потому что дефолтная спецификация зависит от них.
Вопрос к знатокам: как быть?
Ну хуй знает. Самое современное из того, что я знаю с открытыми сырцами - UE4. Например, http://rutracker-pro.org/viewtopic.php?t=368955
Насколько я понял, тебе надо, чтобы одни аргументы шаблона выводились, а другие - нет? Напрямую так не сделать - если уж ты пишешь в вызове <...>, то вывод полностью отключается, и рассчитывать можно только на дефолтные параметры.
Для решения твоей задачи можно сделать так:
template<typename InputIterator, typename OutputIterator
typename Foo>
void my_function(InputIterator first, ..., OutputIterator out, Foo fun = Foo())
{ ... }
template <typename Foo>
struct MyFunctionManager
{
template <...>
void operator () (...) {return ::my_function <...> (...);}; //инлайновая обертка с идентичной сигнатурой, которая вызывает основную глобальную функцию
};
my_function(v.begin(), v.end(), arr.begin()); //в таких вызовах аргументы шаблона выводятся, поэтому дефолтные параметры вообще не нужны
MyGunctionManager <MyFoo> () (v.begin(), v.end(), arr.begin()); //а здесь получается "шаблон в шаблоне" ценой всего лишь в две лишние скобки - по производительности деградации не будет
Если бы у тебя был шаблон класса, а не функции, то все бы решалось еще проще - просто через alias template, вложенный в шаблон с единственным параметром. Писалось бы TvoyaMamka <MyFoo>::my_function (...) без всяких дополнительных оберток. Поэтому если есть выбор, лучше всегда сделать шаблон класса и работать уже с его методами. Тогда можно делать частичную специализацию, синонимы и много другой полезной хуеты, которую нельзя с функциями.
Спасибо за совет, но я уже решил это оберткой функцией в статический класс
то есть получается так:
template<typename T, typename Foo = Bar>
class A
{
public:
A() = delete;
template<typename InputIterator>
static void fun1(InputIterator first, ...);
};
вызывается все это как я и хотел: A<int, my_fun>::fun1(...)
У меня вопрос не касательно языка, но всё же около него.
Мне нравится Qt creator (исключительно как IDE, то есть фреймворком Qt я не занимаюсь), но мне не ясна их политика лицензий.
Я так понимаю их лицензии касаются ПО в котором есть какие-то компоненты фреймворка Qt?
Вроде да, у Qt Creator, по идее, должна быть отдельная лицензия. Если в ней не говорится о "только некоммерческом использовании", то можешь писать код без использования фреймворка, и все будет легально.
http://pastebin.com/kgAdLp1p
Сам в юношестве делал на GPU такую симуляцию.
Вот хорошая статья https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch31.html
int x[5][10];
Почему, когда я хочу передать этот массив в функцию, не важна первая размерность 5?
void VoidFunc(int arr[][10]);
Я понимаю, что запись int x[5][10] означает, что x - массив, состоящий из 510 элементов и занимающий 510sizeof(int) места. Но я никак не могу этого понять, не могу провести аналогию с простым массивом y[20] - например, мы передаем вообще указатель int, без указания вообще размеров этого массива. Но как это работает это с многомерными массивами?
Ну я в первом варианте не могу стукнуться к самому первому элементу вот так
y[0][0]
а во втором могу.
Это самое очевидное, что пришло в голову, а структура массива вроде бы, такая же
Это просто разная форма описания куска памяти. Доступ y[6] превращается в y + 6, в другом случае y[6][3] превращается в y + 6*x + 3 где x одна из размерностей массива. Если x неизвестно, то хуй пойми как выполнять доступ к элементам этого массива по двум индексам. Поэтому в данном случае одну размерность при передаче в метод и надо указывать. По моему, как-то так. Для трехмерного массива наверняка надо две размерности указывать. Хотя я могу и наврать.
Немного не понял вот здесь:
>y[6][3] превращается в y + 6x + 3
x - это размерность вторая, типо например y есть y[10][15], тогда y[6][3] y + 615 + 3. Так. Тогда, если мы не передадим 15, действительно, неизвестно куда стукаться? Спасибо, анон, ты действительно мне помог, спасибо большое!
>Но как это работает это с многомерными массивами?
Никакого отличия от одномерных. Когда у тебя массив T[D], то он передаётся как указатель на T. Т.е. int[10] передаётся как указатель на int.
В случае с т.н. многомерным массивом тип T это массив размерностью на единицу меньше. Т.е. для int[5][10] тип T это int[10]. Вот он и передаётся как указатель на int[10]
Ещё раз: никакого отличия от одномерных.
но тогда если decay до указателей, тогда твой ответ неверный: такой массив, например
int x[5][2];
я не смогу передать таким образом в функцию
void VoidFunc(int*);
VoidFunc(x);
>тогда твой ответ неверный
Он верный, просто ты нихуя не понимаешь, как распадается многомерный массив до указателя. До указателя на ЧТО он распадается. См. мой следущий мессадж.
Если тебе так трудно выучить правила чтения определения типа в C/C++, возьми и посмотри, во что std::decay превратит твой int[5][2]
И потом хорошо подумай, почему это верно. Почему это согласуется и с layout-ом массивов в памяти, и с арифметикой указателей, и с правилом array-to-pointer decay. И как правильно читать определение типа многомерного массива.
Ты можешь сказать, КАК распадается массив до указателя. Ты написал вот что:
>Потому что массивы decay до указателей при передаче в функцию.
Я же в посте, указал, что с одномерными все понятно, но как быть с многомерными? Ты оставил это без ответа.
Я же припизднул что твой ответ неверный, просто это вообще не ответ. По существу будет что-то а, именно, про многомерные массивы? Никоим образом не хотел тебя оскорблять.
Все работает как сказал чувак в >>828045 посте?
>Все работает как сказал чувак в >>828045 посте?
Кагбэ "чувак" это и есть я. Я же написал, читай мой следующий мессадж. Следующий за тем, на который ты ответил.
http://ideone.com/yHEV1N раз
http://ideone.com/npKCcE два
Два не компилируется специально, чтобы компилятор показал тип в сообщении об ошибке.
Вот теперь подумай, какая должна быть сигнатура у функции, чтобы туда можно было передать int[5][2]
Еще раз хочу акцентировать внимание, если тебе показалось что я хочу тебя задеть - это не так. Спасибо, реально спасибо, что тратишь на меня время.
ебать как там все сложно с темплейтами.
Ясен хуй, надо передавать int [][2], это я понял из ответа >>827988
Хули тебе блядь не нравится? Скажи блядь, заебал, хули выебываешься?
Нет, ну правда?
ебать, блядь, я чето не успел даже разобраться пока. Нихуя себе, с хуя ли это так... пдзц
Вот, если инт, то почему-то выводится 100 и 99, например. А если дабл, то ок.
пиздец, я считаю себя дауном (это я тут ебусь насчет массивов) но ты пиздец, очевидно в строке
(i/j==1)
косяк, по выводу и так ясно, что работает это у тебя так
(i/(j==1))
В скобки деление заверни
Тогда в чём проблема, мразь? Чай будешь?
Ну при целочисленном делении округляется в сторону меньшего. 100/75 = 1.(3), что есть единица в целочисленной арифметике.
Это каким хуем там 5? И вообще это законно? Как это работает? Почему темплейт схавал [5][2] как просто [5]? Это как вообще? Что почитать, чтобы перестать быть такой необразованной мразью?
Сори, бля я тупой пиздец. Получается, если
x[5][2] - это array 5 of array 2 of int,
то в аналогии, что array N of int преобразуется при передаче в функцию как int, то
x[5][2] преобразуется как int x[2] ? Это правильно?
Можно еще вопрос? Где это говно, прочитать из нормальных источников?
Расскажи еще о себе? Как стал таким пиздатым?в плюсах
разметка ебаная, в int\*!
>Где это говно, прочитать из нормальных источников?
http://unixwiz.net/techtips/reading-cdecl.html
Получается, преобразуется в массив указателей на 2 aka int (x)[2] а не указатель на массив из двух int x[2]? Почему так? Где почитать мануал об этом?
это я знаю, как читать типы. Разве там есть, как преобразуются типы при передачу в функции?
Слоуответ.
Ну, самое простое это прямо с вектором байтов (без битовых полей, чтобы на каждое число было по байту). Вот тут https://software.intel.com/sites/landingpage/IntrinsicsGuide/, например, референсы для Intel, при помощи функций с ...add... в имени можно сделать, чтобы, скажем, 16 байтов сложились в один при помощи единственной векторной инструкции. Соответственно, производительность может вырасти на порядок.
БЛЯДЬ СКА ВАКАБА ГДЕ МОИ ЗВЕЗДАЧКИ ПИДОООР
фикс, первое это указатель на массив из двух, а второе массив из двух указателей
да блядь, это хуйня, как читать названия я знаю, как происходит "decay" съебался гуглить
> как происходит "decay" съебался гуглить
Что там гуглить. "array N of T" превращается в "pointer to T"
Из-за таких как ты, сука, потом ракеты падают, а рентгеновские аппараты убивают пациентов.
> А array N of array M во что превращается?
> "array N of T" превращается в "pointer to T"
Что неясно?
Любите C++, ребятки. И когда php блядь кодер вылезет кукарекнуть сказать что-нибудь про свой любимый язык, просто напомните ему его место.
(Автор этого поста был предупрежден.)
Ах ты пидор, ты правила не чилал? тебе нельзя появляться и что-то говорить.
А почему капча не на пхп?
> Хотелось бы обратить ваше внимание, что макаба написана на C++
Может быть стоит как-то помочь родной макабе если есть какие-то интересные задумки, м?
Вот так детки, выглядит эталонная вниманиеблядь, вахтер и утенок в одном флаконе. Сути поста 0, зато плашечкой посветил.
Можешь банить, лолка, мне похуй
>Хотелось бы обратить ваше внимание, что макаба написана на C++
Оно и видно, кек. Твой пост звучит как "Иван Залупин окончил только колледж и создал Одноклассники.ру".
perl-monk
Что сказать-то хотел?
Молодец. Когда нормально вкатишься как раз модули завезут.
>9 лет с нуль.чика кун
Представь ситуацию. Господа в смокингах и цилиндрах сидят в обедне и пьют чай, обсуждая катаморфизмы, анаморфизмы, параморфизмы наконец. Тут к ним вползает пьяный вдрызг кучер Ванька. Отплевывая лошадиный навоз, он ссыт под себя, одновременно блюя на пол прокисшим борщом. Затем достает задроченный томик Александреску, найденный на помойке. "Modern C++ Design - вот где мыслЯ, блеать, вот где красота и свежесть!". Смеясь, господа растегивают ширинки и мочатся быдлу в рот. Зовут дворника Ваську - местного лисп-задрота, он спускает крестохолопа с лестницы. Он делает это с удовольствием - хоть зачем-то сгодился элите. Поднимаясь за похвалой, он начинает зациклено бормотать про жидов. Господа для острастки ссут на него, после чего возвращаются к своим светским беседам.
Благодарствую.
friend MyClassInt operator+(const MyClassInt&, const MyClassInt&). Рассмотрим следующий код
MyClassInt x{5};
MyClassInt y{1};
MyClassInt z = (x+y);
Я во всех описаниях сделал принты, соответственно я увидел, что тут сработают три дефолтных коструктора, хотя я ожидал увидеть:
два вызова дефолтных, + еще один вызов дефолтного (для результата оп+) и мув коструктор.
Что за хуйня? Почему так? Где прочитать как и когда вызываются конструкторы, четкие правила, когда и как вызываются конструкторы?
struct Functor
{
void operator()(int& i)
{
i = 0;
}
};
int main() {
while(1)
{
Functor f;
int j = 1;
f(j);
}
return 0;
}
будет ли он каждый выделять память при создании в цикле или будет просто опущено создание объекта и напрямую вызвана функция ()?
Это что, платиновый пост? Уже в каждом втором треде всплывает вопрос про copy elision. Неужели так сложно открыть стандарт и прочитать пункт 12.8/31?
В рамках описанной стандартом C++-машины каждый собственный (не являющийся объектом базового класса) объект занимает не менее одного байта в memory storage. Таким образом, у твоего функтора внутри цикла будет выделена память (и он будет иметь адрес).
Стандарт не оперирует для автоматических (стековых) объектов понятием "выделение памяти", можно говорить только о времени жизни объекта. С точки зрения времени жизни, в каждой итерации цикла объект будет новым (т.е., например, использовать объект предыдущей итерации по указателю - undefined behavior). С точки зрения конструкторов/деструкторов - при их наличии они обязаны вызваться заново в каждой итерации, но у тебя они дефолтные, без какого-либо эффекта, поэтому это несущественно.
Но это в рамках формальной модели. Для реализаций же стандарт имеет as if rule. Оно разрешает реализации делать все что угодно, если наблюдаемое поведение (грубо говоря, ввод и вывод программы) соответствует формализованному. Поэтому, например, в твоем случае все эти функторы могут находиться в одной области памяти, или вообще не иметь выделенной памяти, пока ты явно не начнешь использовать в них члены-данные, или даже весь код может удалиться, раз программа ничего не выводит. Фактически большинство компиляторов сделает ту или иную оптимизацию, в зависимости от настроек компиляции.
Спасибо за развернутый ответ. Я смотрел диссассемблер и действительно
>эти функторы могут находиться в одной области памяти, или вообще не иметь выделенной памяти, пока ты явно не начнешь использовать в них члены-данные
Пустой функтор не вызывает конструктора по умолчанию и ничего не делает а просто вызывается функция по статическому адрессу, а как только я добавил в структуру переменные, то конструктор функтора стал вызываться и все сопутствующие ему выделения памяти.
Спасибо брат, ты мне помог!
parallel_invoke в той же рекурсии то все работает нормально и создается ровно 8 потоков, независимо от глубины рукурсии.
Вот и вопрос как сделать с std::async, std::future тоже самое?
Тезис: есть лабы, которые нужно сделать (а-ля имплементить бинарное дерево или что-то подобное, не суть). На сях, разумеется. Код для проверки будем отправлять своему ТА (Teacher Assistant) c указанием где и как его компилить и запускать, что он, в последствие, и будет делать (компиляция предполагается через g++). В общем, я хочу немного похакерствовать. Что-нибудь достаточно простое, например просто встроить в код доп. функцию, которая соберёт некоторое количество инфы о его системе (какая у него система, линь, винда или макось - я не знаю) и отправит мне на сервер. Ничего серьёзного и сильно подлого. Так вот, какую инфу о системе можно собрать силами С++ (без режима рута, разумеется). Или скажите, хотя бы, как в плюсах выполнить произвольный код в консоли из программы (а-ля shell_exec в php)?
В том, что твой код будет работать в песочнице, из которой ты не откроешь никакого соединения и даже файла.
Лол, с чего ты взял?
Похоже, что некоторые байты этой строки рассматриваются как эскейп-последовательности.
Не помогает. Последовательность после ксора почти в два раза короче исходной.
https://ideone.com/UHFtNW
Лол, ты ебанутый?
Представь себе, существуют непечатаемые символы.
Если учитель продвинутый, то он, конечно использует песочницу, как говорит >>828818-кун. Так сделано в том же ejudge, например. Но часто препод бывает алтимейт совком, который вообще ничего не слышал про ИБ, и запустит он твой код на какой-нибудь хрюше из-под DevCpp. Так что попробовать можно.
За никсы не скажу, но на венде все предельно просто. Весь подозрительный код пихаешь в дллку, которую называешь наподобие msvc311.dll, гришь, что это рантайм от твоего компилятора. В коде дергаешь функцию оттуда с каким-нибудь неподозрительным названием, которая будет делать всю работу. Гуглишь доки к winapi, через его вызовы реализуешь скачивание (со своего или официального сервера) nir commander в какую-нибудь глубокую папку внутри appdata. Записываешь в строку прямо внутри dll текст батника с нужными командами nircmd (там их дохуя - можно грабить пароли, узнать полную инфу о системе, выдвинуть дисковод etc), который потом выводишь в .bat внутри той же папки. Запускаешь батник на исполнение в новом процессе, все. Отправить результаты назад можно прямо из батника, в nircmd есть для этого команды.
https://ideone.com/pPRUJ0
И странно то, что несмотря на расшифровку эйкар-последовательности без применения антиэмуляции, на мою расшифровывающую программу среагировали не все антивирусы. Но на текстовик с эйкар среагировали все. С антиэмуляцией почти никто не среагировал.
Думаю над второй реализацией. Лоадер расшифровывает прицепленный экзешник и запускает. Как реагирует антивирус на этот запуск? Сначала запускает экзешник на своей виртуальной машине и проверяет сигнатуры?
Препод не сказать, что не продвинутый, но по поводу ИБ париться не будет почти точно (молодой парень преподаёт). Вообще я как-то забыл посмотреть на паре какой у него ноут, но есть не маленькая вероятность, что МакОС ибо у нас вообще у многих преподов маки.
Ну и у него точно не древняя винда. Энивей, спасибо за ответ.
Древняя венда отличается от недревней только тем, что в новой ты сможешь работать только в рамках прав запущенного процесса, без рута, даже если он работает под рутом. Но считать, скажем, содержимое пользовательской папки ты сможешь в любом случае, а все самое интересное как раз там.
Для других осей все примерно так же, даже еще проще из-за практически гарантированного отсутствия антивируса, который может сагриться на подобное поведение. Легче всего сделать отдельные функции для каждой системы (Windows и POSIX-совместимых), и автоматически выбирать между ними при компиляции через #ifdef и макрос OS_WINDOWS (который есть только в венде).
>Легче всего сделать отдельные функции для каждой системы (Windows и POSIX-совместимых), и автоматически выбирать между ними при компиляции через #ifdef и макрос OS_WINDOWS
Да, я примерно об этом и думал.
А зачем им брать дорогого крестовика, когда могут взять более дешевого быдлокодера?
>Вот и вопрос как сделать с std::async, std::future тоже самое?
Явный планировщик с пулом потоков, явный запуск задач на планировщике.
А то я столкнулся с такой проблемой написав проект на цланге, который не компилируется без костылей на гцц...
https://ideone.com/TY2Iic
Йеп.
Ты два раза освобождаешь. В первый раз вручную, второй раз освобождает shared_ptr
Я думаю, если не использовать блоки, то они полностью совместимы.
Недавно столкнулся с тем, что то, что компилируется шлангом не компилировалось g++. Оказалось, это известный language issue и шланг с g++ ведут себя по-разному, т.к. стандарт невнятно оговаривает поведение. Пришлось чуть переписать одну строку (с инициализации с помощью = на brace initialization) чтобы стало компилироваться и там, и там.
Не планируй, пиши браузер прямо сейчас - потом не напишешь, останешься макакой на всю жизнь.
Если напишешь наскоряк хрень с асинхронной тред-базед продгрузкой страниц и поддержкой расширений, тебя возьмут куда угодно, даже если рендерятся нормально только половина страниц.
Дерзай.
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#325 промотай в конец, до Notes from the August, 2011 meeting. На этот случай с инициализацией мембера шаблоном я наткнулся.
> Раз тип начинается с нижнего_подчеркивания, а последующий симол в нижнем регистре, значит, класс по-умолчаню будет находится в глобальном неймспейсе?
Слышал звон, да нихуя не понял.
http://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in-a-c-identifier
Я тебе про это и говорю, что ты нихуя не понял.
Такие имена зарезервированы для определённых мест. Но это не значит, что если ты так назовёшь, то твои классы в эти места попадут.
Спасибо за инфу. А что насчет конкретно моей траблы?
Почему если определён move-constructor,
то синтезированный copy-constructor будет deleted?
Потому что rule of five. Считается, что если ты кастомизируешь хотя бы одну из пяти операций (копирование, перемещение, конструктор копирования, конструктор перемещения, деструктор), то с классом нельзя работать дефолтно (например, из-за членов-дескрипторов или еще чего-то), поэтому оставшиеся операции удаляются, чтобы ты не мог выстрелить себе в ногу.
Спасибо, няша.
829916
А что, тебе не выдаётся ошибка компиляции, когда ты пытаешься воспользоваться удалёнными методами?
http://ideone.com/AzHnfm
Раньше выдавалась, но я обновился до Windows 10, теперь всё нормально
Идите на хер с вашим программированием.
неосилятор
Сейчас бы метод класса вне его видимости не определить
>говноподелия
Причём здесь Windows? Ещё Code::Blocks кстати неплох, но в первых автодополнение и организация проектов лучше. Студия зашквар, под MSVC нужно переделывать все исходники и в нормальные проекты такое не пропустят.
Нахуя тебе переделывать исходники, лол? Нормальные проекты пишутся нормальными командами, с пачкой студий и TFS в комплекте. Швадобные нищепроекты пишутся на гнутых тулчейнах. Пересечения у этих экосистем практически нет, просто не нужно подменять понятия.
"С++ без страха".
Я нюфаня, но мне code blocks тоже очень понравилась, правда сравнить могу только с code lite.
Кстати да, а почему её в шапке нет?
Заебись, купил с последней зарплаты телефон с сенсорным экраном.
Ахуеть, на сколько же надо боятся легасиговна (причем такого, которое рефакторится за 10 минут в очень большом проекте 1 грепом) чтобы не зарезервировать ключевое слово языка...
Я подобные хуйню до этого видел только на хабре в срамах про добавление вывода типов в жяву: там разработчики реально трясутся что если добавить кейворд var в язык это доху всего сломает.
Поясните что означает эта конструкция: final: final final {final};
Интересует именно херня с двоеточием
Я придумал эту хуйню, когда прочитал в стандарте про идентификаторы со специальным значением.
>>830823
Помеченная меткой final локальная переменная класса final с именем final, инициализированная сама собой. using final = final нужен для большего устрашения, чтобы показать, что в контексте инициализатора имя инициализируемой переменной перекрывает имя класса, если явно не делать elaborated объявление.
http://ideone.com/fsq6MA
Полная дрянь, яннп. Я одиннадцатый стандарт то не докурил, а тут ещё этот пиздец. Можно на собеседованиях показывать, лол.
Понимаешь, нахуя такой вывод происходит?
Ну очевидно же. В деструкторе создается локальная переменная типа, который удаляется, вызывается ее деструктор, в котором создается локальная переменная... Получается банальное переполнение стека. Самый внешний файл ты создаешь своим конструктором, с i==0, выводится 0. Для всех остальных (которые создаются в деструкторах) юзается конструктор копирования из неинициализированного создаваемого объекта, поэтому в i мусор.
А, бля, просто метка. Я уж было испугался, что это какая-то новая неведомая дичь
уже полгода как вкатываюсь в кресты, собрал уже библиотеку всяких Мейерсов, Страуструпов, Сидхартхи, Павловских итд. подписался и просмотрел кучу лекций на ютубе по плюсам и алгоритмам как от доморощеных хацкеров так и от лекториума. прошел пару курсов на степике и получил сертификаты. теперь суть вопроса- где в сети можно попрактиковаться в сабже? где какие курсы есть или проекы для участия начинающих имеющих цель прокачать скилы? В сторону детородных
органов прошу не посылать - сам с них пишу, другие яп прошу не предлагать - не интересуют
Посмотри всякие попенсорц проекты на гитхабе, найди там себе что-нибудь интересное и вкатывайся туда.
Это платиновый пост?
Читай про виртуализацию памяти. Если вкратце - каждый процесс думает, что у него есть вся доступная память (и даже больше), а других процессов в системе нет. Поэтому указатель в новом процессе значит совсем другое, чем в старом (с большой вероятностью, это быдет просто нераспределенная память, поэтому ошибка сегментации).
> Читай про виртуализацию памяти
Чёт сложно. А где список всех этих страниц хранится? понял что в таблице страниц но что этоКак ос узнаёт какая память занята и кем? Куда она это пишет? Кстати если процессору якобы доступна вся память, то почему числа в указателях идут не от нуля и так сильно отличаются друг от друга?википедии наверно недостоточно. Что ещё почитать?
Ставил на нее английский языковой пак, если что.
Ньюфаня вкатывается в тред. Изучаю кресты, хотя до этого ни один язык не изучал. Мне нравится язык, но для меня он очень громоздкий совсем чуть-чуть. Планирую написать какую-нибудь серьёзную вещь, может что-то типа большого алгебраического калькулятора. Язык начал изучать месяц назад, плачу за курсы 2к рублей в месяц, их ведёт тетка, которая окончила тульский мехмат. На занятиях нам дают простенькие, на первый взгляд, задачки. Компилятор называется "Bloodshed Dev-C++". Как думаешь, анон, стоит ли писать на этом компиляторе? В данный момент только скачал изучаю книги из шапки. Может бородатые опытные дяденьки чего-нибудь посоветуют? И вообще жду от тебя советов в стиле: "вот так делай!" или "подучись немного!".
Таненбаум, "Операционные системы". Вообще, это в любом курсе по операционным системам есть.
>но что это
В современных процессорах есть аппаратно реализованная таблица, и процессор, опять же автоматически, при встрече команды с адресом 0x111222 ищет 111 (которое общее у всех адресов в пределах страницы) в левом столбце этой таблицы и заменяет на 333, которое находится в соответствующей ячейке правого столбца. Получается уже физический адрес 0x333222, который есть номер ячейки на плате, например. Это все делается специальной частью процессора одновременно с остальными вычислениями, поэтому дополнительные такты не требуются. На самом деле это очень упрощенная схема, там еще есть нюансы по поводу того, как наполняется и изменяется эта таблица, но в целом все так вот просто.
>Как ос узнаёт какая память занята и кем?
Никак, вообще говоря. Вот смотри, в однопроцессорной системе, если запущено несколько программ, они выполняются попеременно, кусочками. Например, программа TvoyaMamka.exe выполнялась 100мс. Каждые 10мс процессор автоматически получал прерывание от системного таймера и передавал управление ОС. ОС смотрела счетчики и говорила "не, еще рано". А спустя 100мс планировщик ОС решает (в соответствии с выбранным алгоритмом): "так, чота TvoyaMamka.exe долго выполняется, тут батя тоже хочет". Схороняет мамкину таблицу страниц в памяти, а назад загружает таблицу, которая принадлежит процессу TvoyBatya.exe. Эти таблицы хранятся вместе с process id, дескрипторами открытых процессом файлов и другой инфой, которая своя у каждого процесса. Вот, таблица перезагрузилась, и теперь те же адреса в командах (если даже они были одинаковыми у бати и мамки) будут отображаться на совсем другую область памяти, где лежат данные и код бати. После этого планировщик опять засекает время, управление передается коду бати, и все повторяется. Нюансов планирования и хранения много, а суть простая, опять же.
> почему числа в указателях идут не от нуля и так сильно отличаются друг от друга?
Даже виртуальные адреса (0x111222), которые имеются в программе, не задаются программистом, а определяются, фактически, ОС (диспетчером кучи либо загрузчиком). Соответственно, это уже вопрос логики ОС, однозначный ответ тут я дать не могу, ибо не профессиональный байтоеб. Может, она стремится по возможности делать соответствие виртуальных и физических адресов один к одному, чтобы не засорять таблицу. Программе-то все равно, с нуля адреса или нет.
Таненбаум, "Операционные системы". Вообще, это в любом курсе по операционным системам есть.
>но что это
В современных процессорах есть аппаратно реализованная таблица, и процессор, опять же автоматически, при встрече команды с адресом 0x111222 ищет 111 (которое общее у всех адресов в пределах страницы) в левом столбце этой таблицы и заменяет на 333, которое находится в соответствующей ячейке правого столбца. Получается уже физический адрес 0x333222, который есть номер ячейки на плате, например. Это все делается специальной частью процессора одновременно с остальными вычислениями, поэтому дополнительные такты не требуются. На самом деле это очень упрощенная схема, там еще есть нюансы по поводу того, как наполняется и изменяется эта таблица, но в целом все так вот просто.
>Как ос узнаёт какая память занята и кем?
Никак, вообще говоря. Вот смотри, в однопроцессорной системе, если запущено несколько программ, они выполняются попеременно, кусочками. Например, программа TvoyaMamka.exe выполнялась 100мс. Каждые 10мс процессор автоматически получал прерывание от системного таймера и передавал управление ОС. ОС смотрела счетчики и говорила "не, еще рано". А спустя 100мс планировщик ОС решает (в соответствии с выбранным алгоритмом): "так, чота TvoyaMamka.exe долго выполняется, тут батя тоже хочет". Схороняет мамкину таблицу страниц в памяти, а назад загружает таблицу, которая принадлежит процессу TvoyBatya.exe. Эти таблицы хранятся вместе с process id, дескрипторами открытых процессом файлов и другой инфой, которая своя у каждого процесса. Вот, таблица перезагрузилась, и теперь те же адреса в командах (если даже они были одинаковыми у бати и мамки) будут отображаться на совсем другую область памяти, где лежат данные и код бати. После этого планировщик опять засекает время, управление передается коду бати, и все повторяется. Нюансов планирования и хранения много, а суть простая, опять же.
> почему числа в указателях идут не от нуля и так сильно отличаются друг от друга?
Даже виртуальные адреса (0x111222), которые имеются в программе, не задаются программистом, а определяются, фактически, ОС (диспетчером кучи либо загрузчиком). Соответственно, это уже вопрос логики ОС, однозначный ответ тут я дать не могу, ибо не профессиональный байтоеб. Может, она стремится по возможности делать соответствие виртуальных и физических адресов один к одному, чтобы не засорять таблицу. Программе-то все равно, с нуля адреса или нет.
>какую-нибудь серьёзную вещь
>что-то типа большого алгебраического калькулятора
Это примерно уровень laba2.cpp. laba1.cpp это класс матриц, laba3.cpp - интерпретатор паскаля.
Спасибо
На ВМК было именно так, за другие вузы не скажу, но вряд ли сильно отличается.
Матрица это прямоугольная таблица с числами, как шахматная доска типа. Интерпретатор паскаля - программа, в которую загоняешь текст программы на паскале, и она ее выполняет. Как PascalABC, только самописный.
Спасибо, няша
Прочитал сегодня пару глав первой книги из шапки. И знаете? Мне захотелось стать программистом! Спасибо разработчикам этого раздела, спасибо Страуструпу за книгу и за язык, спасибо добрым анонам и отдельная благодарность пауку Аркадию.
c++17
Как же я буду угарать над толщиной священого писания крестоебов и попрекать их ересью за незнание рандомных UB в их параше. А там и до религии недалеко.
Мб зарегать свою установку надо?
2018. Много тут вмкшников, кстати, периодически всплывают в тредах. Вроде и оп был наш человек
Посоны, а давайте запилим в этом итт треде секту? Можно привлекать ньюфагов, охуенно же.
В начале была декларация. И была декларация в программе. И была декларация программой...
...
И сказал Он: "Да будут байтоебы исторгнуты из обители мономорфных вычислений". И создал Он шаблоны, и создали шаблоны шаблоны шаблонов. И были перечислены Его создания, и создания их, и создания тех созданий в Священном писании. И имя ему было Стандарт.
...
И сказал Его пророк: "Покайтесь, братья, ибо грядет Борщ, и грядут чистые нечестивцы. И с приходом нечестивцев неосиляторы будут лишены Его библиотеки, и оставит Он одни только S-выражения, и будут у несчастных не векторы, а в каждой паре по Карри".
В обеих IDE которые я использую (code::blocks и codelite) перестали работать функции. Смотрю в дебаггер, он их просто проезжает без перехода в тело фунции. Всё правильно задекларировано. Старые функции и классы с функциями которые раньше работали тоже перестали работать.
Что за хуйня? Компилятор сломался? Линукс поехал?
Я ньюфаг, но вроде ничего не ломал.
Нахуя тебе эта ШВАБОДНАЯ параша?
Используй _НОРМАЛЬНУЮ_ IDE. В никсах это QtCreator или CLion. И вообще нахуй никсы, если ты ньюфаг, накати божественную студию и не еби носорога
Навернул qt, всё заработало. Спасибо добрый человек.
В начале книги Страуступ говорит, что, мол, в свободное время изучайте. Но организовывать свой распорядок будешь сам, не маленький.
Проигрывай сколько угодно над стандартом индустрии. Только не забывай регулярно отмечаться в "МЫ ВАМ ПЕРЕЗВОНИМ"-треде.
Блять, точно. А я смотрел на этот код и не мог понять, что мне тут глаза мозолит.
Алсо,
>p = (uint8_t *)buf;
Из-за системы типов нельзя использовать без каста?
Но в принципе ключ может быть меньшей длины и размер массива может быть больше длины ключа, тогда понадобится эта ветка.
>>833716
У меня какая-то хуита. Вот так объявлены переменные в хедере:
https://ideone.com/8DnoDp
Вот так написана функция main:
https://ideone.com/36m1Rz
Почему после выполнения процедуры генерации ключа в массиве xtea_key содержится просто ноль, если во время ее выполнения выводятся элементы этого массива?
http://stackoverflow.com/a/8317056
в хидере:
extern char xtea_key[XTEA_KEY_SIZE];
в файле где gen_xtea_key:
char xtea_key[XTEA_KEY_SIZE];
В чем заключается ее говнистость, гуру ты наш?
Найди мне IDE удобнее, чем студия с решарпером С++?
>я засунул банковскую карту в таксофон на деревенской почте, и он ее зажевал, маааам! банкоматы говно!
Первые два пункта - хуйня на постном масле. Ресурсов и памяти сейчас как жопой жуй, заплатить пару гигабайт за удобство никто не против.
Про компилятор отчасти согласен. Но сейчас уже встроенный clang практически прикручен, так что очень скоро аргументов против не останется.
>Ресурсов и памяти сейчас как жопой жуй
На десктопе. 11'' планшетик с клавой и 32Гб винтом или хромогобук сейчас обычная вещь. Студию туда не поставишь, а криэйтор встает замечательно.
А, ну так-то да. Но у них и задачи разные. Студия это охуенный комбайн, который ставится на рабочий десктоп и херачит гигантские проекты своим мотовилом. А на планшетах/телефонах/ультрабуках, которые все время таскаешь с собой, все равно особо не поработаешь, банально собираться будет весь день. Поэтому там ставят что-нибудь легкое, чисто чтобы проверять короткие куски кода, типа Code::Blocks, или вообще пишут в текстовом редакторе с плагинами.
>это охуенный комбайн
кухонный. даже на небольших проектах твоя студия отсасывает у эклипса, тормознутое гиканское уебище нинужно если конечно ты не хипстер или пидор.
Emacs
Там есть решарпер для крестов, но это говно мамонта же. В новых студиях (после 2010) из коробки есть почти все его фичи.
!~x - быстрое сравнение с нулем.
Сдвиги для умножения/деления на степени двойки.
Вообще, читай Уоррена-мл., "Алгоритмические трюки до программистов", там дохуя такого.
Автодополнение в Emacs есть
>>который ломается на исходниках буста
Давай кейс, педрила. Ломается у него там, блядь. Даже если ты и нашел баг в парсере, это никак не сказывается на повседневном использовании - я уже 3 год на эклипсе сижу и все там заебись, так что не пизди.
Алсо, твоя говностудия может спокойно закрешится во время установки брейкпоинта в каком-нибудь хедере. Про охуенный встроенный дебагер, который в 2016 не умеет в function call, я вообще молчу.
Про необходимость в платных помидорах или решарперах, когда в еклипсе все идет из коробки, я тоже промолчу.
Про анальный формат проектов студии, закрытость дебажных символов и вообще всю сопутствующую инфраструктуру (начиная от безумно "логичных" обратных слешей в пути и заканчивая отсутствием валгринда) я даже не буду заикаться - ведь ты уже обосрался пару предложений назад.
Шо то хуйня шо это хуйня.
>В новых студиях (после 2010) из коробки есть почти все его фичи.
Контактирую с 2013 студией по работе. Такое же говно, как и 2010. Можешь начинать свои маневры про 15 студию.
>>834213
>так что очень скоро аргументов против не останется
А можно начать с аргументов "за"? В 2010 студии был один единственный аргумент - более стабильный дебагер, чем gdb. Но мало того, что на линуксах завезли lldb, так и gdb сейчас постабильнее. Не говоря о том, что на OS X платформе все и так работало так же стабильно, как и в VS, так еще вагон плюшек в комплекте шел.
Тредов десять назад было, посмотри там в архивах.
>ведь ты уже обосрался пару предложений назад
Ну ты меня просто растоптал, лол. Придется теперь ставить Eclipse, или еще какое гнутое дерьмо, чтобы все было как у людей.
пытаешься оправдать покупку вижулапараши кокорпорейт эдишен за пять тысяч долларов? или своровал? тогда твой хэлоуворд нелегитимный, кек
>Можешь начинать свои маневры про 15 студию
Не начну, 15 не сильно отличается, по большому счету.
>А можно начать с аргументов "за"?
Работающие из коробки автодополнение и визуальный дебаггер. IntelliTrace. Море плагинов, многие из которых не имеют аналогов. Удобная интеграция с мелкомягкими сервисами хотя это не всем надо. Стабильность ни одного краша за последние несколько лет.
Зачем своровал? Контора оплачивает софт, как и в любом цивилизованном месте.
> Контора оплачивает софт
а, я знаю такие эффективные конторы, макаке заплатить лишние 500 рублей премии хуй, а вот какой нибудь ненужной хуиты накупить всегда пожалуйста. лол
>Работающие из коробки автодополнение и визуальный дебаггер. IntelliTrace
IntelliTrace - хипсторское говно, смысла не имеет. Все остальное есть в любой ide промышленного уровня.
>Море плагинов, многие из которых не имеют аналогов
Море плагинов везде есть, про неимеющие аналогов - примеры в студию.
>Стабильность ни одного краша за последние несколько лет
Словил 3 разных краша за 7 дней работы.
А вообще давай-ка начнем с размера проекта, на котором ты работаешь. А то понабежит мудаков с проектами на 2МБ, которые рассказывают как у них стабильно и быстро работает студия.
все просто - макака уволится и лицензия останется у конторы, а вот премию платить - она и так будет, как цена этой лицензии, так и потом макака почувствует вкус денег и в следующем месяце тоже премию попросит.
Блядь, сука, ты и сюда из сишного треда протек? Я ебал твои теории заговора, мне от рабочего софта требуется удобство, а в остальном пусть он хоть в жопу залезает - никакой личной информации все равно нет на устройстве.
Ну хуй знает. Такой эффект, конечно, тоже есть, но и эффективность работы должна быть же. Я бы нахуй съебал, если бы мне предложили прийти со своим ноутом и кодить в швабодных иде.
>Я бы нахуй съебал
а как такой вариант, остаешься после работы говнокодишь, переработку не оплачивают - нету денех, потом ряяя внедрили новый корпоративный почтовый сервер за $10000, с нагрузкой аж 100 писем в день. а? лол
>смысла не имеет
В большинстве случаев да, но меня пару раз оно здорово выручало, когда были хитрожопые баги с синхронизацией тредов. Так что я бы не назвал его критичной фичей, но иметь как дополнительный инструмент - очень неплохо.
>примеры в студию
Скажем, https://visualstudiogallery.msdn.microsoft.com/2fde2c3c-5b83-4d2a-a71e-5fdd83ce6b96 . Хотя насчет этого пункта я не настаиваю - я не особо много ковырялся с Eclipse, возможно, я просто не нашел аналог.
>Словил 3 разных краша за 7 дней работы.
Попробуй на чистую сперму ставить, с последними апдейтами. От этого сильно зависит, как показывает опыт. Кококок вот еще, ради одной IDE...
>А вообще давай-ка начнем с размера проекта, на котором ты работаешь.
Приблизительно 2кк строк, насколько я помню.
ВРЕТИ
Хорошо у тебя горит, всем есть что скрывать, Я этих опрпвданий уже насмотрелся.
Виндовс - прошивка для слежки, ботнетов, игр, вирусов, для остального просто ненужно.
> Попробуй на чистую сперму ставить, с последними апдейтами. От этого сильно зависит, как показывает опыт.
Я только сменил работу, у меня новая тачка с чистой виндой сейчас.
>ArrayPlotter
Видел для gdb скриптик, который запускает gnuplot. Нормальное решение, тащемта.
Если хочется прям уж интегрированности, то у еклипса точно есть такой плагин для джавы, скорее всего есть и для c++.
Ну так уебывай в криптач, хуле ты здесь-то забыл? Тут серьезные дяди зарабатывают бабло, там таятся школьники с паранойей, все гармонично.
>у меня новая тачка с чистой виндой сейчас
Ну хуй знает тогда. Если такое происходит, то, конечно, лучше использовать какую-то другую IDE. Я бы и сам не стал кушать кактус, если бы у меня не работало идеально все.
Может это хорошая прошивка для зароботка, но плохая для работы, особенно для программирования.
Ты о GCC
Для тебя же стараются, дурачок. Без понимания таких вещей ты еще очень долго будешь пачкать штаны с реальным кодом.
а про SFINAE он уже рассказал? А про поиск зависимых имен? А про ADL? Про разложение до указателя? Про using в шаблонах?
Как в C++11 организовать такую блокировку, чтобы читать из очереди могли сколько угодно потоков, а писать — только один? Тянуть буст ради одной фичи не хочу, 17-й стандарт тоже не могу использовать.
Тоже думал над этим. Просто спиздить и вызывать mutex.lock()/unlock() при записи и lock_shared()/unlock_shared() при чтении, как-то так?
Напиши RAII-обёртку вокруг pthread_rwlock_t
Че все утверждают, что это дохуя сложный язык? Все основы по языку, которые спрашивают на собеседованиях можно выучить за день. Еще день на основные алгоритмы и еще день на основные библиотеки и фреймворки
3 дня вполне достаточно, чтобы пройти собеседование в яндекс/гугл
А чтобы научится писать код не стреляя по себе - нужно еще как минимум пара-тройка лет, в этом-то и все проблема. А потом чтобы начать писать быстрый, безопасный и тем более распределенный код - нужно еще десяток лет, потому что язык - сборище костылей.
А так сам синтасис впринцие не сложный.
А в чем смысл вышки по программированию, когда всю базу можно пройти за месяц после школьного выпускного и обкатать изученное, а писать нормальный код в любом случае научишься по ходу работы?
Чтобы на парах учить математику, а дома — практиковаться в программировании же.
Что нужно для программирования кроме линейки, дифуров, и матана, которые можно пройти самостоятельно за пол года в 10 классе?
Зависит от того, в какой сфере ты работать собрался. Где-то аналитическая геометрия нужна, где-то — дискретка и т.д.
>неизвестную в уравнении
какое нахуй уравнение, какие неизвестные? вылезишь из лабы2 и увидешь удивительный мир.
ссу матаноблядям в ротешники, заебали форсить свое говно. кудкудах интыгралы, кудкудах логарифмы, вся эта хуита не нужна.
(Автор этого поста был предупрежден.)
Значит функция берет константу. Как ее можно изменить?
Дифуры и матан не нужны, а вот теоркат нужен.
Вот тебе "читатели-писатели" из прошлого проекта. Тут есть нестандартный перехват ошибок ErrorMaster, но ты сам выпили его, мне лень править эту копипасту.
http://pastebin.com/05VkjJZK
Твой шаред мьютекс только на чтение работает медленнее, чем обычный мьютекс by design (потому что там 3 мьютекса внутри). Зачем использовать shared_mutex тогда?
Суть shared_mutex в том, что на чтение он работает быстрее обычного мьютекса, когда операция записи происходит редко. Атомик надо юзать.
Емнип там было надо специфичное поведение (блокировка поступления читателей при наличии висящих писателей), не совсем как в shared, ну и запилили наивную реализацию, оно все равно 3.5 раза использовалось, при сериализации запросов к апи или типа того. Там ответы по полсекунды и скорость вообще не важна поэтому. А так ты прав, конечно.
Мне нужна софтина (или некий редактор) для просмотра кода и навигация по нему.
Вимы и прочее предлагать не стоит. При навигации в проекте с десяток файлов ещё может и сойдет, но что-то большее это не учитывая виртуальные функции, автоматический вывод типов и прочая шаблонная магия нужна иде или около.
Использовал студию так-то мне больше криэйтор нравится да и работает он быстрее, но для просто навигации слишком она громоздка и тормознута.
Так аноны, есть ли какой нибудь сайт или форум, где нюфани помогают друг другу?
Не думаю, что здесь будут помогать мне разбираться с синтаксисом языка. Алсо, хотелось бы потестить свои новоприобретенные знания.
В общем, устроился я крестоджуном три месяца назад. Разбирался себе потихоньку с работой с видео, кодированном в h264. Вроде, набросал код, который реализует нужный конторе функционал.
И мне дают проект, который пилился до этого несколько лет намного более прошаренным челом. Чтобы, значит, этот функционал туда прикрутить.
Глянул я код, а там ехал template через typename, этим всем погоняют typedef'ы и все это внутри typeFactory. Миллион .h и еще больше #define'ов и еще какие-то кастомные статические библиотеки. Короче, ООП и сложный для нуба код во все поля и хуй пойми, как оно все работает.
Спросить не у кого, т.к. чел, который это писал, взял и помер. Второй шаристый кодер больше по чистому C и ассемблеру, ему вся эта объектная магия тоже не шибко понятна.
Я это все к чему, мне сильно не хватает практического понимания всей этой объектной поеботы, может кто посоветовать адекватные курсы по C++ в ДС2?
Конкретно мне -- трудно.
Первое задание было написать некий клиент, который ищет в сетке устройства конторы, позволяет коннектится к определенной модели и смотреть, что на этом устройстве происходит и настраивать его.
Это было легко, т.к., как оказалось, свой говнокод намного проще высирать, чем разбираться в чужом.
Потом работа с IP-камерами. Типа сервер забирает поток h264 с камер, крутит кусок в памяти (секунд 20) и по запросу начинает писать его. Ну и плеер, чтобы полученное видео просматривать.
В общих чертах, так.
Предлагаешь изобразить дауна, который бежит на занятия по первой же ссылке из гугля, не спросив рекомендаций в специализированном месте?
Даже в большей части проф. разработки разницы нет. Студенту тем более. Рекомендую Resharper C++ по студенческой почте нахаляву взять
сколько платят?
А по вопросу - почитай любую книгу про тимплиты, и потом сверху наверни Александреску - Современное проектирование. Ты охуеешь, но потом врубишься.
Зряплаты хватает на еду-проезд-аренду однушки.
Планирую полгода-год поработать, а там уже смотреть на перспективы переката в более хлебное место.
Я так-то вроде понимаю в общих чертах, например фреймворк Qt, который весь из себя объектный, использую без проблем. Но вот именно тот код, который мне дали, это какое-то ебунячье нагромождение абстракций.
Про проектирование попробую читануть, спасибо. Может там как раз такой подход объяснят.
https://moikrug.ru/vacancies/1000028597
Выучил ваш супертрудный язык за 4 дня. Правду говорят, что мужик работающий меньше чем за 50к - неудачник.
Среди всех прекрасных умений прыщей есть одно самое важное. Оно работает хорошо, стабильно, не зависит от погоды, инвестиционного климата и дружественных усилий, предпринимаемых всякими космонавтами. Так сложилось исторически, что именно это умение, технология, легли в основу нового порядка, нового мироощущения, прыщемирка.
Суть вот в чём. Попробуйте представить себе прыщемирок. У него нет границ, которые спермачи могут увидеть, зато есть границы которые они никогда не смогут преодолеть. И вот почему. Допустим, решила какая-нибудь типичная спермоблядь проникнуть в прыщемирок — не важно, будь то пубертатный школьник с истовой жаждой самоутверждения, или завхоз с экономией на бесплатном, или просто пресытившийся анальным гнётом и интересующийся не в меру хомячок; таки или иначе всех ждёт один и тот же печальный итог.
Когда типичная спермоблядь пытается, прельстившись радостями прышемирка, проникнуть в прыщемирок через «парадный вход», гордо задрав нос, её ожидает строгий досмотр, на котором моментально выявляется уровень знаний и умений убогого. В частности, выясняется во всех продробностях та самая противоестественная поза, в которую традиционно привыкла вставать спермоблядина, чтобы её начинал использовать хозяин, выясняется, что за душой у спермоблядины никаких знаний нет, кроме этих самых привычек, связанных с облегчением анального гнёта спермогосподина. И тут, поскольку вход-то «парадный», прямо на глазах тысяч обитателей прыщемирка наступает расправа. Древний и тщательно смазанный для анахронизма карательных механизм запускает свои циклопические манипуляторы прямо в анус спермоблядины и стремительно с треском и искрами разрывает его в клочья. Это одна из самых потешных вещей для всех прыщеблядков. Это то, что делает бессмысленными все прочие развлечения, то, что не сравнится по накалу страстей и силе впечатлений ни с чем. На спермоблядские крики слетается множество зевак. Жалкий опущенец кричит, обвиняет в случившимся кого угодно, но не себя, сетует и стенает о том, что прыщемирок не пригоден для жизни, что прыщеблядям, видимо, нравится перманентный разрыв ануса; всё, что угодно будет выкрикивать — лишь бы не признать собственную убогость и надёжность её определения и её очевидность в прыщемирке. Но прыщеблядям известна истина. Она проста. Тот самый надёжнейший анахронизм вычислил хроническую спермоблядь и точно поразил её. Это делает крики спермоблядыша ещё более смехотворными.
Так бы всё и продолжалось: изредка спермобляди подбираются к границам прыщемирка, получают свой заслуженный разрыв ануса, и пройдя сквозь боль и унижение, уходят не солоно хлебавши. Но для экстенсивного увеличения количества лулзов, а, стало быть, расширения круга жертв, были открыты другие входы в прыщемирок. Например, на одном из них выдают красочную табличку с надписью «инвалид» и инвалидную самодвижущуюся коляску с обещанием доставить прямо через ограду в прыщемирок, где всё будет хорошо, бесплатно и легко. Не забывают, впрочем, предупредить, что вставать с коляски нельзя ни в коем случае. Что удивительно, коляска действительно начинает своё уверенное движение со спермоблядком на борту, однако сам спермоблядок уже очень скоро начинает смутно догадываться, что его обманули, поскольку, положение, в котором он сидит в коляске не такое уж и удобное, и до боли в анусе напоминает ему то самое положение, в которое его так часто ставил спермогосподин, а сама коляска движется с ощутимыми рывками, меняя направление, да и радостей прыщемирка не особо заметно, а окружающие прыщебляди посмеиваются и указывают на спермоблядка пальцами. И тут, спермоблядок понимает, что его разоблачили, поднимается со своей коляски и начинает грозить прыщеблядкам и кричать им, что он тоже прыщеблядь, поскольку уже проник в прыщемирок, преодолев границу. Это вызывает в прыщеблядях только смех, поскольку никакую границу спермач не преодолел — он просто катается в инвалидной коляске. А когда же спермач понимает и это, то он от досады делает неловкое движение и попадает в цепкие манипуляторы, устремившиеся к его заднице. И тут происходит разрыв на потеху всем окружающим прыщеблядям. Пожалуй, вид такой спермобляди, ещё более униженной, забавит куда больше. А собравшиеся вокруг прыщебляди тыкают палочками в агонизирующую спермоблядь, пока та изрыгает проклятья, обильно поливая собственную инвалидную коляску и землю вокруг анальной кровью. Вот в этом-то и состоит мрачная суть древней кровавой традиции прыщемирка, который не прощает и не ошибается. Так и будет: спермоблядство неизбежно должно караться в прыщемирке разрывом пердака. Вот в чём самая большая потеха: дразнить спермоблядка «бесплатным сыром», твёрдо зная, что его ждёт только бесплатный разрыв жопы.
Среди всех прекрасных умений прыщей есть одно самое важное. Оно работает хорошо, стабильно, не зависит от погоды, инвестиционного климата и дружественных усилий, предпринимаемых всякими космонавтами. Так сложилось исторически, что именно это умение, технология, легли в основу нового порядка, нового мироощущения, прыщемирка.
Суть вот в чём. Попробуйте представить себе прыщемирок. У него нет границ, которые спермачи могут увидеть, зато есть границы которые они никогда не смогут преодолеть. И вот почему. Допустим, решила какая-нибудь типичная спермоблядь проникнуть в прыщемирок — не важно, будь то пубертатный школьник с истовой жаждой самоутверждения, или завхоз с экономией на бесплатном, или просто пресытившийся анальным гнётом и интересующийся не в меру хомячок; таки или иначе всех ждёт один и тот же печальный итог.
Когда типичная спермоблядь пытается, прельстившись радостями прышемирка, проникнуть в прыщемирок через «парадный вход», гордо задрав нос, её ожидает строгий досмотр, на котором моментально выявляется уровень знаний и умений убогого. В частности, выясняется во всех продробностях та самая противоестественная поза, в которую традиционно привыкла вставать спермоблядина, чтобы её начинал использовать хозяин, выясняется, что за душой у спермоблядины никаких знаний нет, кроме этих самых привычек, связанных с облегчением анального гнёта спермогосподина. И тут, поскольку вход-то «парадный», прямо на глазах тысяч обитателей прыщемирка наступает расправа. Древний и тщательно смазанный для анахронизма карательных механизм запускает свои циклопические манипуляторы прямо в анус спермоблядины и стремительно с треском и искрами разрывает его в клочья. Это одна из самых потешных вещей для всех прыщеблядков. Это то, что делает бессмысленными все прочие развлечения, то, что не сравнится по накалу страстей и силе впечатлений ни с чем. На спермоблядские крики слетается множество зевак. Жалкий опущенец кричит, обвиняет в случившимся кого угодно, но не себя, сетует и стенает о том, что прыщемирок не пригоден для жизни, что прыщеблядям, видимо, нравится перманентный разрыв ануса; всё, что угодно будет выкрикивать — лишь бы не признать собственную убогость и надёжность её определения и её очевидность в прыщемирке. Но прыщеблядям известна истина. Она проста. Тот самый надёжнейший анахронизм вычислил хроническую спермоблядь и точно поразил её. Это делает крики спермоблядыша ещё более смехотворными.
Так бы всё и продолжалось: изредка спермобляди подбираются к границам прыщемирка, получают свой заслуженный разрыв ануса, и пройдя сквозь боль и унижение, уходят не солоно хлебавши. Но для экстенсивного увеличения количества лулзов, а, стало быть, расширения круга жертв, были открыты другие входы в прыщемирок. Например, на одном из них выдают красочную табличку с надписью «инвалид» и инвалидную самодвижущуюся коляску с обещанием доставить прямо через ограду в прыщемирок, где всё будет хорошо, бесплатно и легко. Не забывают, впрочем, предупредить, что вставать с коляски нельзя ни в коем случае. Что удивительно, коляска действительно начинает своё уверенное движение со спермоблядком на борту, однако сам спермоблядок уже очень скоро начинает смутно догадываться, что его обманули, поскольку, положение, в котором он сидит в коляске не такое уж и удобное, и до боли в анусе напоминает ему то самое положение, в которое его так часто ставил спермогосподин, а сама коляска движется с ощутимыми рывками, меняя направление, да и радостей прыщемирка не особо заметно, а окружающие прыщебляди посмеиваются и указывают на спермоблядка пальцами. И тут, спермоблядок понимает, что его разоблачили, поднимается со своей коляски и начинает грозить прыщеблядкам и кричать им, что он тоже прыщеблядь, поскольку уже проник в прыщемирок, преодолев границу. Это вызывает в прыщеблядях только смех, поскольку никакую границу спермач не преодолел — он просто катается в инвалидной коляске. А когда же спермач понимает и это, то он от досады делает неловкое движение и попадает в цепкие манипуляторы, устремившиеся к его заднице. И тут происходит разрыв на потеху всем окружающим прыщеблядям. Пожалуй, вид такой спермобляди, ещё более униженной, забавит куда больше. А собравшиеся вокруг прыщебляди тыкают палочками в агонизирующую спермоблядь, пока та изрыгает проклятья, обильно поливая собственную инвалидную коляску и землю вокруг анальной кровью. Вот в этом-то и состоит мрачная суть древней кровавой традиции прыщемирка, который не прощает и не ошибается. Так и будет: спермоблядство неизбежно должно караться в прыщемирке разрывом пердака. Вот в чём самая большая потеха: дразнить спермоблядка «бесплатным сыром», твёрдо зная, что его ждёт только бесплатный разрыв жопы.
Стих придумать надо
Как земля.
>Александреску
Когда мне в очередной раз припекло во время ахуевания от проекта я зашел на лурочку. В статью "умение разбираться в чужом коде". А там картинка в статье с кодом, который как раз напоминающая код проекта (правда, в более упрощенном виде). Лезу я смотреть на подпись под картинкой и точно, Александреску блять.
Кинулся в инет, качать книжку. Приступил к чтению. И тут мысль, блять, а раз проект написан по его книжке, дай-ка я гляну в шкафчик в метре у меня за спиной. Вот она, книжка бля. Забрал домой.
Правда, из этого следует немного грустный вывод. Раз мне никто про эту книжку и методику ничего не сказал, наверное, канторе особо и не нужно, чтобы я справился с задачей. Видимо, моя задача -- изображать программиста, а не приносить некую пользу. Мысленно сделал отметку "съебаться из конторы сразу же, как будет возможность".
Вкатываюсь в геймдев, думал на дроиде ява, заебца. Таксс, движки-мейкеры, платное говно, говно, так, што тут у нас, порт с сишки. Ууу хуево.
Ладно, буду свое двигло делать. Лист двиглов на яве: говно, ..., ... ээээ, а где ява?
Эхх, походу не отвертется от крестов, это судьба.
Есть особые подводные камни? Просто скачал вижуал студио и вперед?
Вроде нет, но есть дохуя библиотек от топовых интелоских до днищенских васяновских
в том же xna фрамеворке/DIRECT3D есть какая-то параша
То что я могу где-то сделать глупую ошибку. Или криво написать. А мне нужно только динамическая матрица и метод для её транспонирования. Проще найти какой-нибудь велосипед и удалить из него всё лишнее.
Ну для этого просто пишешь один единственный шаблонный класс матрицы и метод транспозе возвращающий новую матрицу. Для проверки накидай какой-нибудь изи тест.
не думаю что можно где-нибудь обосраться кроме как в выделении памяти
Такая проблема возникала у многих и кто-то написал дохуя продуманный класс матриц где за каждую строчку пояснить может. Я хочу его, а не свой говнокод за 5 минут.
Было бы понятно из-за чего ты искал проблему если бы тебе надо было написать всю матричную алгебру. А так если что то можно взять интеловскую либу(я есличо хз где её можно спиздить).
Ок. Ввиду почту. Спасибо.
> array<array<int,n>,n> m;
Как значение оп умолчанию задать? 2 цикла в конструкторе делать?
Где перекат?
https://2ch.hk/pr/res/840964.html (М)
https://2ch.hk/pr/res/840964.html (М)
https://2ch.hk/pr/res/840964.html (М)
Это копия, сохраненная 29 сентября 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.