Этого треда уже нет.
Это копия, сохраненная 14 июня 2017 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
C++ #51 #979476 В конец треда | Веб
Вместо шапки - https://github.com/sosachbot/cppthreadhat/wiki
Ответы на все вопросы - http://en.cppreference.com/w/ http://www.cplusplus.com/reference/

Прошлый - >>970816 (OP) (OP)

Теги: кресты, cpp
8 Кб, 161x123
#2 #979789
Есть кто в QT шарит? Есть две формы и два класса, mainwindow.ui и settingswondow.ui. Как их связать лучше? В MainWindow добавить поле-указатель и делать в конструкторе new SettingsWindow и посылать ему сигнал в слот show() когда нажата кнопка настроек? Это то что первое в голову пришло, может в Qt другая практика применяется.
А для хранения настроек насколько я понял есть QSettings, который хранит их на диске пока приложение закрыто.
979986980658
#3 #979986
>>979789
Возможно настройки лучше сделать из QDialog, и создавать и показывть его при нажатии кнопки, он будет блокировать основное окно.
А QSetting под виндой вообще хранит все в реестре, гораздо удобнее.
980272
#4 #980094
>>979476 (OP)
Может кто пояснить, как работать с функциями? Суть в том, что нужно настроить микроконтроллер следующим образом:

Есть четыре кнопки и 2х16 мониторчик. Надо вывести в первую строку название подменю, а во вторую - какое-то число, которое будет символизировать какой-то параметр настройки. Нажал ввод - вошло в функцию, можно выбирать кнопками "влево" и "вправо" параметр. Нажал отмену - вышел в главное меню, кнопками "влево" и "вправо" выбираешь подменю. Ну, например:

В меню три пункта: Звук, надпись выводимая, время очистки экрана. Нужно выбрать, в какой пункт зайти и выбрать там нужное значение. После выбора нужных значений контроллер начинает выдавать выбранный звук, надпись и через заданное время очищает экран. Скажу прямо: я студент, но не программист, хотя предмет такой есть. Преподу делал много программ, но такую хуйню один потянуть не могу, а он не хочет объяснять, как реализовать это.

Я пришел к выводу, что надо к каждому пункту задать функцию, где в ходе выбора будет задано какое-то значение переменной, которая должна выводиться в void main и выполняться. Но я не понимаю, как, во-первых, ссылаться на функции и как из них выходить в ту часть текста, где была оставлена ссылка на эту функцию. А во-вторых, не понимаю, каким образом мне реализовать выполнение программой действий, которые могут быть выбраны совершенно в рандомном порядке. Ну, то есть, мелодия может быть третьей, надпись первой, а время очистки экрана - 3 секунды. Или наоборот - единицы и одна тройка. Или как угодно.

Надеяться мне больше не на кого.
#5 #980104
>>980094
Подходя к вопросу в лоб ты ничего хорошего не на микроконтролишь. И, судя по всему, ты себе довольно сложные задачи берешь для баловства с МК и изучения С - начинай с попроще чего-то.

Как наводка - гугли "Машина Состояний" (FSM), встретишь простые реализации, и от этого начинай фантазировать.

Если же требуется просто задачу решить а не учиться - то есть готовые либы для подобной задачи - на Хабре видел, ищи.
980106
#6 #980106
>>980104
Такую задачу поставил препод. Сделать подменю я могу, а вот несколько, да еще и с переключением, и с запоминанием результата - уже никак.
Поищу на Хабре тогда. Спасибо.
#7 #980164
>>980094

> В меню три пункта: Звук, надпись выводимая, время очистки экрана.


> Ну, то есть, мелодия может быть третьей, надпись первой, а время очистки экрана - 3 секунды. Или наоборот - единицы и одна тройка. Или как угодно.


Неясно, надписи уже заданы и ты просто выбираешь номер надписи и что?
980297
#8 #980246
НУБОВОПРОСЫ
Двач, решил переписать часть прилаги на крестах и соснул невидимого и неосязаемого, только разобрался с new и delete, как stl-контейнеры:
http://cpp.sh/2bvp4

Вопросы:
1) Почему когда я кладуinsert() что-то в set, у этого чего-то вызывается деструктор?
2) Почему иногда деструктор вызывается больше раз, чем был вызван конструктор, при этом this указывает на другую область памяти?
3) Как правильно создавать объекты, которые я хочу положить в set? Через new и потом разыменовывать?
980268981606
#9 #980251
>>980094
что за МК юзаешь?
сам хочу попробовать
980298
#10 #980268
>>980246
Ты не можешь вставить в контейнер объект который создан на стеке. Вставляй указатель либо используй emplace вместо insert.
980271
#11 #980271
>>980268

>Ты не можешь вставить в контейнер объект который создан на стеке.


Может переместить temporary. Но он создал дестрактор, что отменило генерацию мув-констракторов.
#12 #980272
>>979986
Вот ещё не понял: есть окно настроек, есть чекбоксы в менюбаре, может ещё что-то, в общем по всему приложению настройки могут измениться. Как это синхронизировать с QSettings? Делать глобальный класс настроек, который будут дёргать другие классы, а он в деструкторе скинет всё в QSettings?

Получается какая-то хуита:

connect(checkbox, &QAction::toggled, settings, &Settings::change())
потом в слоте
name = qobject_cast<QAction *>(QObject::sender())->text()

зато всё взаимодействие с настройками находится в одном классе
980500
#13 #980273
В /b никого нет, поэтому
Кто тут может объяснить, какого хуя наследники дружественных классов автоматически также не становятЬся дружественными?
980275
#14 #980275
>>980273
каталог-кун пишет:
современое ООП:
толпы быдла долбятся головами об стену невидя двери -
для них выпиливают люк.
#15 #980297
>>980164
Надписи уже заданы. Но это по большому счету не важно.
#16 #980298
>>980251
На проце PIC18F4520. Саму плату назвать не могу сейчас.
#17 #980500
>>980272
У тебя все экземпляры сеттингов завязаны на одни и те же данные, ничего синхронизировать не надо, просто пиши и используй переменные где хочешь:
QCoreApplication::setOrganizationName("TestName");
QCoreApplication::setOrganizationDomain("TestDomain.ru");
QCoreApplication::setApplicationName("TestApp");
QSettings set1, set2;
set1.setValue("Var1",777);
std::cout << set2.value("Var1").toInt(); // 777
#18 #980509
>>979476 (OP)
Мне нужно написать на Qt widget, имеющий древовидную структуру и поддерживающий несколько типов данных (для начала булевые, числа, строки, но потом будет что-то еще). Нужно что бы разные типы данных по разному представлялись визуально в этом дереве, т.е. булевый параметр представлял собой QCheckBox и т.д. Визуально это должно напоминать сам Qt редактор, а именно область настроек виджета. На какие классы обратить внимание? Я примерно представляю как такое сделать, но вангую, что мой способ это кал ебаный, наверное есть уже специальные классы под это дело. Подскажите, кто знает.
#19 #980526
>>979476 (OP)
Куда делся ОП, который стихи писал? Сколько раз уже спрашивал - никто так и не ответил. Или это запретная тема?
#20 #980534
Сап. Есть ли какие-нибудь гайды по распараллеливанию для чайников? Желательно что-нибудь попроще с копипасте-макросами и общими рекомендациями, никакой многопроцессорности и инлайн-вставок не нужно, просто хочу чтобы всё чуть быстрее работало.
980563981552
#21 #980563
>>980534

> гайды по распараллеливанию для чайников


Кончилось время, когда программирование было для чайников. Теперь пока не разберёшься досконально в модели памяти плюсов, можно даже не надеяться. Короче, быдло отсеяно из индустрии.
980684
#22 #980644
http://ideone.com/GSZNT3
Ананасы, что означает строчка с new(space){t}; ? Зачем там скобки, не пойму.
980648
#23 #980648
>>980644
placement new
980649
#24 #980649
>>980648
спасибо.
#25 #980658
>>979789
Вот блин, в QDialog кнопка apply никаких сигналов не выдаёт, только QDialog::accepted после нажатия ok или cancel, придётся кучу костылей городить чтобы на кнопку apply сигнал повесить и применять изменения настроек на лету.
#26 #980684
>>980563
Толсто
980686
#27 #980686
>>980684

>Толсто


А ты прогнись и расслабься - и совсем не толсто будет :3
980820
#28 #980812
Аноны посовейте кто-нибудь тему для дипломной работы, желательно такую которая реализуема лишь на С/С++
980817
#29 #980817
>>980812

>которая реализуема лишь на С/С++


Segfault
#30 #980820
>>980686
Послушай совета бывалого человека
#31 #980821
>>979476 (OP)
ОП-пик сегфолтнулся?
981600
#32 #980867
Ещё проблема с Qt. QTabWidget при нажатии крестика на вкладке посылает столько сигналов tabCloseRequested(int index), сколько всего есть вкладок. То есть например есть 4 вкладки, закрываем первую - получаем 4 сигнала tabCloseRequested(0) и закрываем все вкладки, потому что их индекс поочерёдно меняется на 0.

Пробовал ставить локер:

connect(tabs_widget, &QTabWidget::tabCloseRequested, this, &closeTab);

void closeTab(index) {
if(_closing_tab)
return;
else
_closing_tab = true; // Блокируем функцию

tabs_widget->removeTab(index); // Удаляем вкладку

_closing_tab = false; // Разблокируем функцию
}

Но он не помогает, removeTab() работает асинхронно и функция всё равно исполняется несколько раз при закрытии одной вкладки.
Что вообще можно сделать с этим? Почему QTabWidget посылает один и тот же сигнал несколько раз?
980869
#33 #980869
>>980867
Нашёл методом тыка:

disconnect(tabs_widget, &QTabWidget::tabCloseRequested, this, &closeTab);
tabs_widget->removeTab(index);
connect(tabs_widget, &QTabWidget::tabCloseRequested, this, &closeTab);

но такое решение не внушает уверенности
#34 #980873
Ну вообщем на андроиде из коробки в Qt openssl нету. Это значит что все твои https коннекты невозможны и вообще куча шифрования недоступно.
Нашел решение - нужно привязать отдельно openssl либу в проект. На сайте qt конечно же не сказано какая версия, откуда качать и как интегрировать в проект. Естественно, готовую либу и хедеры скачать нельзя - её тупо не дистрибутируют для андроида.
Знач надо билдить из сорсов. Хорошо, смазка у меня заготовлена, кляп в рот и пагнал.
Качаю сорсы, нашел гайд по компиляции либы на сайте openssl. Делаю всё по гайду ХУЯК НЕ КОМПИЛИТСЯ ОШИБКА 0000000A. Ну че епта, гуглим ошибку, неправильная версия питона у тебя такая-то, а надо другая. Ну бля хуле ставим питон. Бля забыл зарегать его снова в гугл бля как это сделать нахуй, виден только старый питон. Нашел, зарегал, ахуеннно. Чето даже начало компилиться, целых 2 минуты компилилось ВЫЛЕЗЛА ошибка 0000000B. Блядь ну пощади меня сучара, что на этот раз. Лезу в гугл.
Оказывается, самая новая версия openssl 1.0.7.4.3.3.0.t не компилится под Android, надо только версию до 1.0.4.6.7.5.b. Блядь а где скачать? На сайте только новая и устаревшая 0.98. Ну блядь лезу ищу по всем сайтам где скачать такую-то версию. Нашел фтпшник со всеми релизами. Качаю.
Распаковал, заново начинаю компилировать. Прошло 10 минут УРА БЛЯДЬ скопилировалось, БЕЗ ОШИБОК. Стоп а куда скомпилировалось? БлЯЯЯЯЯДЬ. Оно скоплилило либу к динамическим сошкам и привязала линки на конкретную папку (то есть чтобы либа заработала, надо будет на андроид закинуть в /usr/lib эту хуйню). Ну еб твою мать мне просто нужны openssl.so без линков нахуй. Лезу в гугол. Че? Надо makefile поменять? Очищаю всё, распаковываю, меняю makefile по гайду. Жду три минуты, не компилится с ошибкой 000000000C. Лезу в гугл, ошибка известная, все кроют хуями разрабом и предлагают свои варики, нахожу гайд 4х летней давности с совсем другой последовательностью компиляции либы. Для компиляции надо скачать специальный скрипт, качаю с сайта требующим реги.
НУ ЩАС ТО ВСЁ ТОЧНО БЛЯДЬ ЗАРАБОТАЕТ!
Удаляю опять к хуям всё, распаковываю, компилирую. БЛЯДЬ опять забыл makefile поменять, пиздец.
Меняю makefile, компилирую. УРА, на выходе ва файлика - openssl.so libcrypto.so, как я и хотел епта. Линкую в Qt Creator. Он мне жалуется при компиляции, что неправильная архитектура. Ебать мой хуй, а че я скомпилил? Ну блядь канеш для x86, а на андроиде arm. Ну хуле лезу в makefile, вроде все переменные указал правильно - путь до SDK, архитектуру и тд. Вывожу на всякий случай на экран - нихуя make эти переменные не видит и юзает дефолтный конфиг. Ок, не буду гуглить и ебаться, просто захардкодю их внутрь configurate скрипта.
Запускаю и УРА блядь готовы отличьненькие либы мои милые вде сошки. Линкую в проект, всё компилится, ПИЗДЕЦ НУ АХУЕТЬ.

Деплою на устройтсво, запускаю приложуху. Вылетает при старте. ЭЭ бля че за нах. Читаю logcat: library Qt-libcrypto not found, library openssl not found. И краш, потому что либы не найти.
Как так в чем проблема?
Лезу в гугл, проблема действительно есть, дело в том, что хоть ты и сбилдил openssl статически, но всё равно там внутри прописывается версии либ, и твоя либа имеет название например openssl.so.5. А Андроид такие либы с точками линковать не умеет, потому что у них имя необычное. Одно из решений - открыть либы librypto и openssl и изменить все упоминания openssl.so.5 на openssl_5.so (например, убрать точку короче лишнюю, точный текст не скажу). Ну достаю из своего уже широкого ануса свой hex-редактор и начинаю пыхтеть над либами и искать че под замену. Раза с 3го у меня получилось всё верно и либы залинковались.
Деплою на устройство - всё видит, всё запускается, https коннект есть, всё работает короче. Слава Украине, Смерть Москалям!

Через день босс заходит недовольный - мой плеер чето не качает нихуя файлы с сервака.

Я тестил на 4м и 5м андроде, а вот у него - новенький 6й нексус, и на нем нихуя не работает. Как так то?
Оказывается вот конкретно вот эта версия openssl содержит баг, при котором не коннектится на 6й версии андроида (там чето внутри порезали в самой системе, внутри чето поменялось и openssl полетел к хуям).
Ну качаю версию openssl с фиксом, и всё проделываю заново.
Прошло еще 3 часа ебли с компиляцией, фиксами, патчами в hexредакторе и МОЯ либонька openssl готова. Пиздец.

А сука жиробас напротив js-макакич, пукич, какич - тупо блядь всё имеет из коробки. И вот тут меня накрывает нахуй завистью.

У красноглазого ублюдка который с этим сталкивается не первый раз наверное бы получилось всё быстрее, но на тот момент я вообще не был готов к такому повороту, пиздец.
#34 #980873
Ну вообщем на андроиде из коробки в Qt openssl нету. Это значит что все твои https коннекты невозможны и вообще куча шифрования недоступно.
Нашел решение - нужно привязать отдельно openssl либу в проект. На сайте qt конечно же не сказано какая версия, откуда качать и как интегрировать в проект. Естественно, готовую либу и хедеры скачать нельзя - её тупо не дистрибутируют для андроида.
Знач надо билдить из сорсов. Хорошо, смазка у меня заготовлена, кляп в рот и пагнал.
Качаю сорсы, нашел гайд по компиляции либы на сайте openssl. Делаю всё по гайду ХУЯК НЕ КОМПИЛИТСЯ ОШИБКА 0000000A. Ну че епта, гуглим ошибку, неправильная версия питона у тебя такая-то, а надо другая. Ну бля хуле ставим питон. Бля забыл зарегать его снова в гугл бля как это сделать нахуй, виден только старый питон. Нашел, зарегал, ахуеннно. Чето даже начало компилиться, целых 2 минуты компилилось ВЫЛЕЗЛА ошибка 0000000B. Блядь ну пощади меня сучара, что на этот раз. Лезу в гугл.
Оказывается, самая новая версия openssl 1.0.7.4.3.3.0.t не компилится под Android, надо только версию до 1.0.4.6.7.5.b. Блядь а где скачать? На сайте только новая и устаревшая 0.98. Ну блядь лезу ищу по всем сайтам где скачать такую-то версию. Нашел фтпшник со всеми релизами. Качаю.
Распаковал, заново начинаю компилировать. Прошло 10 минут УРА БЛЯДЬ скопилировалось, БЕЗ ОШИБОК. Стоп а куда скомпилировалось? БлЯЯЯЯЯДЬ. Оно скоплилило либу к динамическим сошкам и привязала линки на конкретную папку (то есть чтобы либа заработала, надо будет на андроид закинуть в /usr/lib эту хуйню). Ну еб твою мать мне просто нужны openssl.so без линков нахуй. Лезу в гугол. Че? Надо makefile поменять? Очищаю всё, распаковываю, меняю makefile по гайду. Жду три минуты, не компилится с ошибкой 000000000C. Лезу в гугл, ошибка известная, все кроют хуями разрабом и предлагают свои варики, нахожу гайд 4х летней давности с совсем другой последовательностью компиляции либы. Для компиляции надо скачать специальный скрипт, качаю с сайта требующим реги.
НУ ЩАС ТО ВСЁ ТОЧНО БЛЯДЬ ЗАРАБОТАЕТ!
Удаляю опять к хуям всё, распаковываю, компилирую. БЛЯДЬ опять забыл makefile поменять, пиздец.
Меняю makefile, компилирую. УРА, на выходе ва файлика - openssl.so libcrypto.so, как я и хотел епта. Линкую в Qt Creator. Он мне жалуется при компиляции, что неправильная архитектура. Ебать мой хуй, а че я скомпилил? Ну блядь канеш для x86, а на андроиде arm. Ну хуле лезу в makefile, вроде все переменные указал правильно - путь до SDK, архитектуру и тд. Вывожу на всякий случай на экран - нихуя make эти переменные не видит и юзает дефолтный конфиг. Ок, не буду гуглить и ебаться, просто захардкодю их внутрь configurate скрипта.
Запускаю и УРА блядь готовы отличьненькие либы мои милые вде сошки. Линкую в проект, всё компилится, ПИЗДЕЦ НУ АХУЕТЬ.

Деплою на устройтсво, запускаю приложуху. Вылетает при старте. ЭЭ бля че за нах. Читаю logcat: library Qt-libcrypto not found, library openssl not found. И краш, потому что либы не найти.
Как так в чем проблема?
Лезу в гугл, проблема действительно есть, дело в том, что хоть ты и сбилдил openssl статически, но всё равно там внутри прописывается версии либ, и твоя либа имеет название например openssl.so.5. А Андроид такие либы с точками линковать не умеет, потому что у них имя необычное. Одно из решений - открыть либы librypto и openssl и изменить все упоминания openssl.so.5 на openssl_5.so (например, убрать точку короче лишнюю, точный текст не скажу). Ну достаю из своего уже широкого ануса свой hex-редактор и начинаю пыхтеть над либами и искать че под замену. Раза с 3го у меня получилось всё верно и либы залинковались.
Деплою на устройство - всё видит, всё запускается, https коннект есть, всё работает короче. Слава Украине, Смерть Москалям!

Через день босс заходит недовольный - мой плеер чето не качает нихуя файлы с сервака.

Я тестил на 4м и 5м андроде, а вот у него - новенький 6й нексус, и на нем нихуя не работает. Как так то?
Оказывается вот конкретно вот эта версия openssl содержит баг, при котором не коннектится на 6й версии андроида (там чето внутри порезали в самой системе, внутри чето поменялось и openssl полетел к хуям).
Ну качаю версию openssl с фиксом, и всё проделываю заново.
Прошло еще 3 часа ебли с компиляцией, фиксами, патчами в hexредакторе и МОЯ либонька openssl готова. Пиздец.

А сука жиробас напротив js-макакич, пукич, какич - тупо блядь всё имеет из коробки. И вот тут меня накрывает нахуй завистью.

У красноглазого ублюдка который с этим сталкивается не первый раз наверное бы получилось всё быстрее, но на тот момент я вообще не был готов к такому повороту, пиздец.
#35 #980890
>>980873
Кулсторей
#36 #980891
>>980873
Сохранил даже
#37 #980929
>>980873
Я конечно не андоидщик, а js-боярин, но паста ахуенна.
#38 #980934
>>980873
Я тебе больше скажу - на андроиде вообще изкоробки ssl нету.
#39 #980935
>>980873

>0000000B


>0000000A


Шта, ты сошки под андроид msvc компилил?
#40 #980937
>>980873
бля, жиза.
#41 #980951
Есть простенький класс myString, хранящий в себе всего одну строку в качестве поля,
я хочу перегрузить для него оператор << , чтобы выводить эту строку,
сделал глобальную функцию перегрузки operator<<
friend для этого класса, но какого-то хуя я всё равно не могу обращаться к privat полям этого класса в глобальной функции

компилятор указывает на строку объявления глобальной функции в Global.h и выдает кучу ошибок, первая из которых
missing type specifier - int assumed. Note: C++ does not support default-int
какого хера, я вообще не передаю туда int, я передаю туда свой пользовательский класс

https://pastebin.com/TcF7dxCk

я реально не понимаю в чем дело, потому что я делаю всё в соответствии со всеми туториалами,
980956981263
#42 #980956
>>980951
В хедерных объявлениях пиши полные имена типа (например std::ostream). И еще - не стоит использовать using namespace в хедерах.
980975
#43 #980975
>>980956
убрал, но всё равно те же ошибки(хотя их стало не 22, а 5)
в объявлении функции
std::ostream& operator<<(std::ostream& os, const MyString& string);

он выдает на каждый std::ostream&
missing type specifier - int assumed. Note: C++ does not support default-int
и соответственно
syntax error: missing ',' before '&'
24 Кб, 328x177
#44 #981048
Почему первый вариант работает правильно, а второй - не работает? Хотя оба нормально компилируется. в v10 - цифры от 0 до 9, перемешиваю массив
981054
#45 #981054
>>981048
А, все, понял. Ступил немножко.
#46 #981067
>>980975
Используй компилятор C++ либо линкуй бинарник с libstdc++
https://pastebin.com/bjFdaGja
#47 #981125
В чем проблема?? Суть: создать двухмерный массив и умножить на число.

#include<iostream>

using namespace std;

int main()
{
int i,j,n,m;
cout<<" n="; cin>>n;
cout<<" m="; cin>>m;
int a=new int [n];
for(i=0;i<n;i++) a=new int [m];
cout<<"\n Enter elements:\n";
for(i=0;i<n;i++)
for(j=0;j<m;j++) cin>>a[j];
cout<<"\n Result;\n";
for(i=0;i<n;i++)
{
for(j=0;j<m;j++) cout<<a[j]<<" ";
cout<<endl;
}
int s = 3;
cout<<"\n Result;\n";
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
a[j]
= s; cout<<a[j]<<" ";
cout<<endl;
}
system("pause");
}
#47 #981125
В чем проблема?? Суть: создать двухмерный массив и умножить на число.

#include<iostream>

using namespace std;

int main()
{
int i,j,n,m;
cout<<" n="; cin>>n;
cout<<" m="; cin>>m;
int a=new int [n];
for(i=0;i<n;i++) a=new int [m];
cout<<"\n Enter elements:\n";
for(i=0;i<n;i++)
for(j=0;j<m;j++) cin>>a[j];
cout<<"\n Result;\n";
for(i=0;i<n;i++)
{
for(j=0;j<m;j++) cout<<a[j]<<" ";
cout<<endl;
}
int s = 3;
cout<<"\n Result;\n";
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
a[j]
= s; cout<<a[j]<<" ";
cout<<endl;
}
system("pause");
}
981129
#48 #981127
>>980975
Покажи весь изменённый код.
#49 #981129
>>981125
#include<iostream>

using namespace std;

int main()
{
int i,j,n,m;
cout<<" n="; cin>>n;
cout<<" m="; cin>>m;
int a=new int [n];
for(i=0;i<n;i++) a=new int [m];
cout<<"\n Enter elements:\n";
for(i=0;i<n;i++)
for(j=0;j<m;j++) cin>>a[j];
cout<<"\n Result;\n";
for(i=0;i<n;i++)
{
for(j=0;j<m;j++) cout<<a[j]<<" ";
cout<<endl;
}
int s = 3;
cout<<"\n Result;\n";
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
a[j]
= s; cout<<a[j]<<" ";
cout<<endl;
}
system("pause");
}
#49 #981129
>>981125
#include<iostream>

using namespace std;

int main()
{
int i,j,n,m;
cout<<" n="; cin>>n;
cout<<" m="; cin>>m;
int a=new int [n];
for(i=0;i<n;i++) a=new int [m];
cout<<"\n Enter elements:\n";
for(i=0;i<n;i++)
for(j=0;j<m;j++) cin>>a[j];
cout<<"\n Result;\n";
for(i=0;i<n;i++)
{
for(j=0;j<m;j++) cout<<a[j]<<" ";
cout<<endl;
}
int s = 3;
cout<<"\n Result;\n";
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
a[j]
= s; cout<<a[j]<<" ";
cout<<endl;
}
system("pause");
}
#50 #981157
Как создать тему без оп-пика?
981179
#51 #981179
>>981157
ОП-пик снесли, не знаю почему.

Возможно, вместе с предыдущим неудачным перекатом. В этой теме и предыдущей был один пик.
981236
#52 #981230
>>980975
Попробуй так: https://pastebin.com/KNffk3wV
Но я сам ньюфаг с дивана. Только не забудь еще прописать определения для конструкторов в файле MyString.cpp.
#53 #981236
>>980975
А вообще не стоит использовать имена переменным, которые уже есть в стандартной библиотеке, типа string. Так что я бы написал что-то типа такого: https://pastebin.com/ZAbjiPB6
Ньюфаг-кун >>981179
#54 #981244
Аноны-крестовики, дайте ссылок на всякие разные простые, но качественные проекты, где может разобраться и ньюфаг, как я, чтобы почитать, как профессионалы пишут на С++, а то заебало писать говнокод, который я даже сам понимаю, что он говно.
981256
#56 #981263
>>980951
В твоем коде ошибок нет https://ideone.com/e9V6fC ты где-то в другом месте обосрался.
#57 #981270
>>980975
https://pastebin.com/igQXunvC

Мой говнокод, студия15 пропустила. Добавлю свои 5 копеек.
#58 #981357
А у меня сейчас QtCreator крашнулся при остановке дебаггера. И тут сегфолт, вот это номер!
982354
#59 #981412
Поцоны а какую IDE выбрать?

Clion vs MS Studio 15 Community vs Kdevelop(yoba.jpg)
#60 #981418
>>981412
Clion или студия с решарпером. Только студия что без него, что тем более с ним будет куда тормознутее, так что выбор очевиден.
#61 #981438
>>981412
Clion жрёт дохуя оперативы
981442
#62 #981442
>>981438
Студия тож
А kdevelop:
а) На шинде утрахаешься;
б) Не умеет нихуя, даже с цланговским парсером.
#63 #981488
>>981412
У CLion нет отладчика для MSVC тулчейна, только MinGW.
В студию можно подключить решурпер но будет работать как CLion, хотя, я бы сказал, даже чуть шустрее. У решарпера конченые code templates (которые у всех называются сниппетами, в которых из коробки функционала нихуя почти нет и придется писать свои (не шаблончики, а именно модули для решарпера). В студии быстрее показываются подсказки по подстановке символов, в то время как у CLion'а у тебя сначала вывалятся куча дефайнов, которые тебе нахуй не нужны, а потом через 0.5 секунд что-то действительно необходимое.
CLion криво парсит названия проектов (если, например у тебя в одном проекте несколько подпроектов, то, создавая хедеры, там будет генерироваться ifndef-guard с названием корневого проекта, жутко бесит блять).
У CLion-а есть жесткие косяки с парсингом шаблонов, то есть красные линии будут вылазить там, где ты их не ждешь вообще, хотя собираться это будет даже без предупреждений.
В CLion можно делать автоматический перенос выражений и слов, даже комментарии будет переносить, хотя вот например бинарные выражения он переносит пиздец как весело, сделав, например, сделав из этого:
bool my_flag = (mask & MT_1) || (mask & MT_2) && (var_b == var_c);
вот эту хуйню:
bool my_flag = (mask & MT_1) || (mask &
MT_2) && (var_b == var_c);
То есть, перенос он есть, но семантика хотя и неизменна, становится плохочитаемой.
В то время, как в вижуал студии нихуя переноса нет, более того, нет и никогда не было ограничительной линии, поэтому щелкать будешь сам (хотя вот недавно появилось расширение, чтобы добавить вот эту самую линию без заебов, хотя переноса слов можешь и не ожидать вообще).
В CLion можно настроить кодировку файлов по-умолчанию, а вот в MSVC этот ебыч будет тебе постоянно прописывать системную кодировку (а какая же она у нас там, не CP-1251 случаем?!), в других редакторах будут ёба-символы вместо кириллицы.
В CLion ты видишь файловую структуру проекта (хотя есть и другие виды, но они мне нахуй не нужны), в то время как студия при создании нового файла серит ими в одну кучу, получается такое месиво в проекте.
В CLion есть семантическая подсветка переменных, которая нахуй никому не уперлась. От дополнительных цветов режет глаза только.
Для студии дохуища аддонов, и, как ни странно, поддержка того же CMake в плагине для студии сделана более кошерно, чем в CLion (мало того, что там все в кучу одного цвета, как в болоте, так и переменные он нихуя не подсказывает), да и многие плагины по-лучше, чем в CLion.
В CLion больше настроек форматирования текста (спасибо IntelliJ Idea), когда студия со своими полутора настройками скобочек будет постоянно твои лямбда-функции опускать на пару отступов вниз.
У CLion, не смотря на то, что богаче настройки форматирования текста, достаточно кривой format-on-type (не придумаю так быстро русичного названия этой штуке).
У CLion дохуя багов, которые правиться будут не скоро, зато поддержка тестов зачем-то пилится активнее всего (нахуя?!)
Поддержка тулчейна MSVC в CLion кривая (забавно то, что он не может найти тип size_t. SIZE_T ЕБ ТВОЮ МАТЬ!)
#63 #981488
>>981412
У CLion нет отладчика для MSVC тулчейна, только MinGW.
В студию можно подключить решурпер но будет работать как CLion, хотя, я бы сказал, даже чуть шустрее. У решарпера конченые code templates (которые у всех называются сниппетами, в которых из коробки функционала нихуя почти нет и придется писать свои (не шаблончики, а именно модули для решарпера). В студии быстрее показываются подсказки по подстановке символов, в то время как у CLion'а у тебя сначала вывалятся куча дефайнов, которые тебе нахуй не нужны, а потом через 0.5 секунд что-то действительно необходимое.
CLion криво парсит названия проектов (если, например у тебя в одном проекте несколько подпроектов, то, создавая хедеры, там будет генерироваться ifndef-guard с названием корневого проекта, жутко бесит блять).
У CLion-а есть жесткие косяки с парсингом шаблонов, то есть красные линии будут вылазить там, где ты их не ждешь вообще, хотя собираться это будет даже без предупреждений.
В CLion можно делать автоматический перенос выражений и слов, даже комментарии будет переносить, хотя вот например бинарные выражения он переносит пиздец как весело, сделав, например, сделав из этого:
bool my_flag = (mask & MT_1) || (mask & MT_2) && (var_b == var_c);
вот эту хуйню:
bool my_flag = (mask & MT_1) || (mask &
MT_2) && (var_b == var_c);
То есть, перенос он есть, но семантика хотя и неизменна, становится плохочитаемой.
В то время, как в вижуал студии нихуя переноса нет, более того, нет и никогда не было ограничительной линии, поэтому щелкать будешь сам (хотя вот недавно появилось расширение, чтобы добавить вот эту самую линию без заебов, хотя переноса слов можешь и не ожидать вообще).
В CLion можно настроить кодировку файлов по-умолчанию, а вот в MSVC этот ебыч будет тебе постоянно прописывать системную кодировку (а какая же она у нас там, не CP-1251 случаем?!), в других редакторах будут ёба-символы вместо кириллицы.
В CLion ты видишь файловую структуру проекта (хотя есть и другие виды, но они мне нахуй не нужны), в то время как студия при создании нового файла серит ими в одну кучу, получается такое месиво в проекте.
В CLion есть семантическая подсветка переменных, которая нахуй никому не уперлась. От дополнительных цветов режет глаза только.
Для студии дохуища аддонов, и, как ни странно, поддержка того же CMake в плагине для студии сделана более кошерно, чем в CLion (мало того, что там все в кучу одного цвета, как в болоте, так и переменные он нихуя не подсказывает), да и многие плагины по-лучше, чем в CLion.
В CLion больше настроек форматирования текста (спасибо IntelliJ Idea), когда студия со своими полутора настройками скобочек будет постоянно твои лямбда-функции опускать на пару отступов вниз.
У CLion, не смотря на то, что богаче настройки форматирования текста, достаточно кривой format-on-type (не придумаю так быстро русичного названия этой штуке).
У CLion дохуя багов, которые правиться будут не скоро, зато поддержка тестов зачем-то пилится активнее всего (нахуя?!)
Поддержка тулчейна MSVC в CLion кривая (забавно то, что он не может найти тип size_t. SIZE_T ЕБ ТВОЮ МАТЬ!)
0 Кб, 40x40
#64 #981522
Как в кт сделать такую маленькую кнопку сброса? В стандартных темах вроде нет. Это отдельный ресурс используется?
#65 #981552
>>980534
Бамп
981555
#66 #981555
>>981552
Ищи гайды по OpenMP, хули ты как дурак-то. Там все на препроцессорных вставках как раз и делается.
981579
#67 #981579
>>981555
Все гайды сводятся к "вот сюда вот напишите #pragma omp parallel, а перед циклами можно писать #pragma omp for. А теперь, смотрите как ОГОГО, ЁБАНЫ В РОТ, printf("Hello, world!\n") ВЫВОДИТСЯ В 50 ПОТОКОВ!!!" Организацию данных, потокобезопасность - что это вообще, кому нужно? - нихуя нигде ни одного слова нет, ебитесь как хотите. Как я мапы и векторы в распараллеленом цикле менять то буду, ёпта, как данные модифицировать?! Чё, совсем мудак что ли, покажи мне, как я буду контейнеры в многопотоке использовать, ёпта!
981597
#68 #981590
Подскажите профайлер для крестов под прыщи. Пытаюсь использовать gprof, но он, сука, нихуя не выводит вообще, с какими бы флагами я не компилил.
985364
#69 #981597
>>981579
#pragma omp critical
вам что-нибудь говорит? Прекрасная конструкция. Аллах акбар!
988011
#70 #981600
>>980821
На оп-пике было петросянство, которое не понравилось моду (скрин из стрима Outlast с крестами).

Ебал.
#71 #981606
>>980094

>а он не хочет объяснять, как реализовать это.


С вертушки въеби ему, это ненормальный препод.
>>980246
1) Потому что вставляется копия, а временное значение разрушается.
2) Потому что в строке 34 течёт память - ты создаёшь объект, который никогда не разрушится, так как ты проебал указатель на него.
3) insert(L()) нормально, ещё можно emplace(). В чём разница:
insert(L(zalupa));
emplace(zalupa).
С emplace может быть быстрее.
981627
#72 #981621
Два треда назад я тоже обосрался, кстати, и тогда я тоже запости второй тред с той же картинкой, но тогда картинка осталась на месте (мод спал и не удалил?).
#73 #981627
>>981606
2) сказано верно, но к проблеме не относится.

Что такое "this указывает на другую область памяти" - я не понял.
#74 #981642
Анончик помогай. Прошёл курс молодого программиста на http://academy.cppstudio.com/. Куда двигатся дальше?
Есть вроде страничка с литературой https://proglib.io/p/cpp-books/ . Но я хз куда там лезть. В начальный, средний или продвинутый уровень? Не хочется заного читать то что уже знаю, посоветуйте плиз
981749981761982158
590 Кб, 600x590
#75 #981749
>>981642

> Куда двигатся дальше?

981837
#76 #981761
>>981642
Не ебу, но подозреваю, что тебе нужна "Лучшая практика" из начального уровня и далее.
#77 #981837
>>981749
Двачая
#78 #981839
>>981412

>а какую IDE выбрать


emacs
#79 #982143
Нужно затереть рандомные сектора на флешке. Причём сделать это нужно так, чтобы дата изменения файлов не изменилась. Как это сделать?
982255
#80 #982158
>>981642
А дальше - базовая архитектура компьютера, алгоритмы и структуры данных,
без знания этих дисциплин ты просто обезьяна
а с знанием этих дисциплин, ты обезьяна, которая их знает, но ты это поймешь только потом
982727
#81 #982167
Дайте простейший пример как поставить семафор чтобы только один тред имел доступ к участку кода (другие пускай морозятся), желательно на QT
982219
#82 #982191
Если завести массив указателей на (тип_нейм//класс_нейм), они автоматом инициализируются nullptr или останутся забиты мусором?
982215982223982249
#83 #982215
>>982191
Конструктор по умолчанию.
#85 #982223
>>982191
А, массив указателей. В ideone 0.
982255
88 Кб, 800x450
#86 #982245
Есть желающие разработать собственную IDE? Интерфейс и логика на Qt, модель кода (навигация, автодополнение, подсветка, рефакторинг) через clang api. Конфиги в json, для плагинов и сложной работы с тектом как в vim можно вставить интерпретатор скриптов. Я тут прикинул, что один буду полгода возиться с этим.
982248982344982352
#87 #982248
>>982245

>Есть желающие разработать собственную IDE?


Нет.
Для сях есть куча годных ИДЕ.
982293
#88 #982249
>>982191
В функции - мусором, если не напишешь "= {}".
C++ не делает того, о чём его не просят. Ибо скорость. Исключение - глобальные переменные. Цена инициализации нулевая, так что в этом случае инициализация будет. У Майерса про это даже видео есть.
982261
#89 #982255
>>982143
Хуйня какая-то. Читай про FAT.
>>982223
В ideone undefined behaviour.
#90 #982261
>>982249

> глобальные переменные. Цена инициализации нулевая


http://ideone.com/HbzDdv
982483
108 Кб, 1008x829
#91 #982293
>>982248
Не так уж много и у каждой свои недостатки. Сейчас единственный способ сделать всё под себя это писать плагины для вима или емакса, предварительно потратив полгода на то чтобы освоиться в редакторе, и в результате эти скрипты всё равно будут работать медленно.
Либо сделать свою IDE, шуструю и с красивым гуем на Qt, но один человек здесь не справится.
#92 #982297
>>982293
Людям не понятна твоя мотивация. Даже если ты объяснишь нормально, то не факт, что с тобой согласятся.
#93 #982298
>>982293
Проблема в том, что уже есть кдевелоп и кутикреэйтор, которые тоже на Qt и используют цланговский парсер. Чем тебя не устраивает вариант настроить их под себя или написать у ним плагины?
#94 #982314
>>982293

>и в результате эти скрипты всё равно будут работать медленно


В емаксе режимы для крестов - это обертка к тому же clang-у.

>предварительно потратив полгода на то чтобы освоиться в редакторе


>Либо сделать свою IDE


Потратив минимум пару лет
#95 #982341
>>979476 (OP)
Аноны, поясните, в чем смысл делать assert(this) в конструкторе класса?
982348
0 Кб, 225x225
#96 #982344
>>982245

>полгода


чет кек
Так и пиши, не осилил емакс, памагите написать иде
#98 #982352
>>982245

> Есть желающие разработать собственную IDE? Интерфейс и логика на Qt


Нет, только если интерфейс полностью на нативных компонентах Windows.
982483
#99 #982354
>>981357
Eclipse
#100 #982364
>>982348

> Пока даже самые новые версии распространенных компиляторов (можно проверить с помощью сервиса GCC Explorer) не выполняют таких оптимизаций, так что пока "все работает", правда же?



Уже выполняют.
982567
#101 #982431
Есть шаблонный метод(хочу сделать что-то типо фабрики), который принимает два аргумента - тип класса и инициализирующее значение. В теле стоит свитч на тип класса, и в зависимости от типа, я создаю объект с переданным в функцию значением:(Yoba1 принимает char в конструкторе, а Yoba2 - int, например)

Yoba foo(int type, T val) {
switch(type) {
case 0 : return new Yoba1(val);
case 1 : return new Yoba2(val);
...
}

Но компилятор посылает меня нахуй сообщением, что не может найти соответствующий конструктор. Поиск такой ошибки можно как-то отложить на рантайм, ведь я сам себе гарантирую, что буду передавать только корректные аргументы.
#102 #982434
>>982431
Где-то ты темнишь.
#103 #982438
>>982431
Ну если кратко, то ты не можешь этот момент отложить. Да и в каком языке ты сможешь?
982483
#104 #982443
Как упоротому сишнику быстро перекатиться в крестовики? Что читать? И чтобы были расписаны все нюансы STL.
982483
#105 #982446
>>982293
Посмотрим, как ты будешь парсер кода писать. Вот тут то ты обосрешься в первый раз.
Посмотрим, как ты будешь тефакторинг писать, тут то ты и обосрешься во второй раз.
Посмотрим, как ты будешь нарсер систем сборки писать, тут то ты обосрешься в третий раз.
Неожиданно, но тут уже полные штаны говна. несите следующие ...
#106 #982454
>>982431
Можешь попробовать конструктор на шаблонах сделать, перегружать готовые, в стандартном бросать исключение или ещё чё делать.
http://ideone.com/eD69WY

Но мне кажется, что это просто очередное место, где можно поиметь проблем и решение несколько неадекватное. Я бы постарался такого не делать оправдываю себя за говнокод ITT
#107 #982483
>>982261
Мы о POD говорим. У любого объявленного класса вызывается конструктор, в твоём посте нет смысла.
>>982352
Куты можно настроить для использования нативных элементов, ЕМНИП.
>>982438
Во многих языках с динамической типизацией.
>>982443
Я сам только на сях писал, потом начал медленно писать программу под свои нужды, и многое узнал во время гугления и чтения cppreference.com, но это было небыстро.
>>982431

>Но компилятор посылает меня нахуй сообщением, что не может найти соответствующий конструктор.


1) Какие аргументы ты передаёшь в foo?
2) У тебя не может быть ошибка типизации в функции. В C++17 завезли if constexpr, в его ветвях могут быть ошибки, и инт типа нужно будет в аргументы тимплейта пихнуть.

А без (2) можно только тимплейты плодить.

http://ideone.com/qhaNjs - ошибки начнутся только тогда, когда ты вызовешь foo с таким типом, который несовместим хотя бы с одной версией Ёбы.
982581
#108 #982484
Олсо, пихни Ёбу в тимплейт, и сделай версию Ёбы аргументом оного.
#109 #982520
Как можно просканировать строку из букв и заменить в ней некие буквы?
982529982562
#110 #982529
>>982520
В СТЛ такого нет. Цикл со свитчем.
982534982566
#111 #982534
>>982529

>со свитчем.


Дебил уровня /зк as is.
982538
#112 #982538
>>982534
Мне виднее.
982590
#114 #982566
>>982562
>>982529
Все, спасибо. Я уже сам додумался и запилил.
#115 #982567
>>982364
Дело не столько в оптимизациях, сколько в том, что это UB. А всё, что вызывает UB, нужно обходить за триллион километров. UB - это самый серьёзный косяк, хуже, чем любая ошибка компиляции, чем любая неверно вбитая формула. Нужно всегда держать в голове: "Если я пишу код, который может привести к UB, то руки мне отрубить надо".
#116 #982581
>>982483

>Во многих языках с динамической типизацией.


Я сам не особо знаком с такими языками, даже JS не трогал толком. Можно пример кода, где упоминается конструктор класса, которого не существует, и этот код работал?
982591
#117 #982590
>>982538
Угомонись, дегенерат.
#118 #982591
>>982581
Код не будет работать, но выполнится до того места.
982596
#119 #982596
>>982591
Ну анон говорил, что оно просто не дойдёт до того места. Этот конструктор "лишний"
982674
#120 #982653
2ch, можно ли как-то посмотреть что компилятор автоматически генерирует для классов?
982674
#121 #982674
>>982596
Весь код инстанциированного тимплейта компилируется. Он не скомпилируется потому, что анализ программы - не задача компилятора.

Пример языка, в котором всё ок: PHP. Динамическая типизация, тип переменной может быть любой, соседние невыполняемые строки кода не проверяются.

Это элементарное отличие динамической типизации от статической.
>>982653
Гугли default constructors/destructors. Больше компилятор ничего не генерирует (не считая тимплейты функций, в которые передавался класс).
982720
#122 #982678
Поясните за LLVM на Windows.

Скачал релиз (4), установил, но почему-то нет кучи тулз, памятных мне по llvm какой-то старой ветки (3.4 кажется), LLC, LLI, llvm-dis и многих других). Что-то изменилось или на винду это все не завезли? Тогда (году в 2014) я качал какие-то билды с гитхаба, вроде официального на тот момент не было.
982685
#123 #982685
>>982678
Быть может, они отдельно?
982686
#124 #982686
>>982685
А где?
#125 #982720
>>982674
Copy/move assignment
#126 #982727
>>982158
С базовой архитектурой всё ок. Читал с 4-8 классы хуеву гору книг по микроархитектуре ЭВМ, немного знаю ассемблер.
Как смочь в качественную алгоритмизацию если у меня школы 9 классов и в математику я можно сказать не могу совсем? Придётся учить матан?
#127 #982806
Всем инклуде. Поясните за Qt. Где лучше скачать и где вычитать про настройку и использование?
Нетбук не сможет в VS, нормально ли будет с Qt?Мне только пилить проги уровня "жмякнул кнопку - вылезла картинка"
982809
#128 #982809
>>982806
Можно и без VS, в Qt Creator-е сразу
На офф. сайте все есть
#129 #982868
Посоветуйте хороший компилятор для ньюфага
В ньюфаготреде посоветовали Visual Studio, какая версия лучше?
982880982903982945
#130 #982880
>>982868
g++ бери. В VS своя версия компилятора, ещё привыкнешь. из IDE Clion норм
#131 #982882
Есть какой-то учебник, в котором описаны фичи из с++11/14?
982890
#133 #982896
>>982890
Очень годно. Прям то, что искал. Спасибо.
#134 #982900
Посоветуйте хороший компилятор для ньюфага
В ньюфаготреде посоветовали Visual Studio, какая версия лучше?
982903
#135 #982902
Где можно почитать подробно про компиляцию, связывание, вот это вот всё. А то я вроде пишу довольно долго уже в IDE и не представляю вообще что там как происходит.
982945
#136 #982903
>>982868
>>982900
Тебе ответили уже.

>какая версия лучше


Никакая версия не лучше. Разница лишь в том, что чем позднее версия - тем больше фич он поддерживает.
Так как ты будешь там запускать только хеллоуворлды - можешь скачивать любой компилятор любой версии.
#137 #982945
>>982902
Ахо, Ульман: Компиляторы
>>982868
Есть IDE и есть компилятор. Компилятор нужен не для редактирования кода, IDE нужна не для компилирования.

Visual Studio - это IDE с компилятором. Я считаю, что в ней слишком много кнопок для ньюфага.

Идеальный вариант - ideone. НИЧЕГО лишнего, ошибки подсвечиваются после попытки компиляции.

Ещё можно Qt Creator поставить, в нём интерфейс минималистичный.
982946982976982978
#138 #982946
>>982945
ideone.com т.е.
#139 #982976
>>982945

>ideone


До первой ньюфажей ошибки. Тогда такой перец идёт в этот тред/форум или таки учится пользоваться дебаггером в своей IDE.
#140 #982978
>>982945

>Ахо, Ульман: Компиляторы


Толсто.
983023
#141 #983012
unknown override specifier
как исправить эту ошибку,
она выскакивает на 2х классах, в которые содержат вложенные классы (в том числе 1 из них вложен в другой)
с чем вообще связана эта ошибка?
983024
#142 #983023
>>982978
Чо толсто-то? Можно просто пропустить главы от лексического анализа до модулей, дальше там описано,
#143 #983024
>>983012
Либо код, либо сам ищи циклические зависимости.
983035
#144 #983035
>>983024
Да я уже нашел, всё из-за сраных заголовочных файлов - в одном подключил один, потом туда же подключил другой, где первый уже подключен и так получается два раза подключение,
нигде нормального гайда не нашел как их подключать, чтобы не запутаться и что б всё работало
983039
#145 #983039
>>983035
pragma once блет
983061
#146 #983061
>>983039
а вот нихуя~
она там стояла везде где надо
983080
#147 #983080
>>983061
вроде не все компиляторы ее поддерживают. может у тебя версия старая? пиши #ifndef HEADER #define HEADER
#148 #983675
Есть класс с полями - одно из них - указатель на некий массив, другие поля - например числовых типов. При вызове деструктора требуется удалить тот массив, что по указателю. Надо ли вдобавок к этому писать код для удаления полей самого объекта этого класса, или эту часть компилятор сам сгенерирует?
983688983836983857
#149 #983688
>>983675
Как ты собрался удалять статические поля?
983713
#150 #983713
>>983688
Ну в смысле если объект был создан в динамической памяти, он работу по удалению его самого без дополнительных указаний сделает?
983724
#151 #983724
>>983713
Нет.
На каждый new делай delete, вот и всё.
983859
#152 #983730
Анон, страуса и уильямса осилил, полистал мейерса - очевидно. Думаю углубиться в буст, но глаза разбегаются от количества либ, с какой стороны к нему подойти?
984008
161 Кб, 690x636
80 Кб, 360x219
#153 #983745
Сиплюсач, подскажи пожалуйста:
Как можно осуществить вывод двух и более связанных таблиц в один DataGridView в Visual C++?
БД - Access.
Искал - по плюсам ничего не нахожу, по шарпу информации как говна.
Пытался переписывать код с шарпа - ничего. Плюс еще надо в коллекции и коломсы прописывать связанные таблицы, а я хз что куда.
Подскажите пожалуйста, родные, последняя надежда.
Первый пик - моя прога.
Второй - то как это выглядит в моей голове и как должно будет быть. взято тут sernam(точка)ru/book_cbd.php?id=43
#154 #983836
>>983675
shared_ptr<kokoko>(new kokoko(kukarek))

В наше время delete пишут только праздникам и только.
983849
#155 #983849
>>983836
Ну не знаю. Я лично в компьютерной графике вообще не юзаю никакие фичи. Код представляет из себя си с классами + std и иногда штуки из с++11, типа unsigned long long.
983867
#156 #983857
>>983675
А нафига тебе указатель на массив? Возьми просто std::vector, он сам удалит содержимое.
Если уж очень нужно динамически распределять память, заюзай std::unique_ptr\std::shared_ptr, они сами будут удалять содержимое при вызове их деструктора.
#157 #983859
>>983724
Лол, 2017 год на дворе, если что. make_unique\make_shared и не нужны никакие delete.
#158 #983867
>>983849
Держи всех в курсе. Писать голые new и delete (не в конструкторах и деструкторах) в 2017 - зашквар зашкварыч.
983888984164
#159 #983888
>>983867

>зашквар


Если ты с пацанами крутой современный стартап мутишь, где никакая высокопроизводительность не нужна, то можешь смело обёртками оборачивать другие обёртки.
Не вижу ничего плохого в том, чтобы использовать new/delete.
983906983989
#160 #983906
>>983888
Мне очень не нравится эта тенденция, когда тупое говно типа тебя все новое, что им влом учить объявляет выдумками неких хипстеров, а ты-то олдскульный пацан, пишешь высокопроизводительный код, как деды завещали.
Только хипстеров этих зовут Страуструп и Саттер. На, читай, https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#r11-avoid-calling-new-and-delete-explicitly и просвещайся.

Я миллион раз эту хуйню слышал от динозавров за 30, которые просто слишком тупы, чтобы выучить что-то новое и пишут как деды завещали. Нет ничего хуже вот этой отстаиваемой тупости.

Все эти обертки инлайнятся и никакого влияния на производительность не дают. Есть просто тупые говнюки, которые вместо того, чтобы почитать последние статьи Страуструпа (вот уж стартаперы бугогого, самое время вставить шуточки про хипстеров и старбакспротив РЕАЛЬНЫХ ПАЦАНОВ типа тебя - мудака, ну да, куда Саттеру и Страуструпу до тебя), а есть люди, которые знают свой инструмент и как им пользоваться. Если ты думаешь, что голые указатели производительнее RAII-контейнеров, то ты тупой мудак, не знающий свой инструмент. А если ты так не думаешь, но все равно лепишь new и delete, то ты просто тупой мудак. Вот и все.
#161 #983989
>>983888
Ну если стартап, который умрет в говнокоде, не дойдя до продакшена, то может быть. Память, сука такая, олдскульно течет.
А еще, когда мне говорят о производительности, я спрашиваю, а как ты профилируешь? Средний кодер оптимизирует хуже среднего компилятора.
#162 #984008
>>983730
Бамп
984974
#163 #984164
>>983867
Так а разве он не о конструкторах и деструкторах говорит?

Я вот лично тестировал std::shared_ptr и собственную реализацию подсчёта ссылок с new и delete this. Мой вариант в полтора раза быстрее.
984171984202984974
#164 #984171
>>984164
Ну можешь предъявлять мелкомягким и получать оффер, ды.
984177
#165 #984174
Все видели этот прикол?

https://twitter.com/sebrose/status/858347156427636738
984389
#166 #984175
Господа, подскажите, пожалуйста, следующую вещь.

У меня имеется 2 массива.
Первый состоит из некоторого количества элементов определенного типа, допустим int. ArrayInt<int>
Второй является набором указателей на тип int, и каждый из его элементов хранит указатель на некий элемент первого массива. ArrayPInt<int>

В функцию вида void funcName(int & ref); передается некое значение с помощью второго массива, выглядит это так:

funcName (ArrayPInt);

, где i равен индексу заведомо существующего элемента массива

Вопрос состоит в следующем, будет ли это работать, если я хочу с помощью функции funcName изменять значения элементов исходного массива?

Спрашиваю потому что не очень понимаю, что происходит при разыменовании указателя, значение копируется в новый раздел памяти или я получаю доступ к исходному значению? И если я не получаю доступ к исходному, то можно ли как-то запихнуть в функцию, в которую передается реф переменная пихнуть эту переменную из указателя?
984176984182984253
#167 #984176
>>984175
а в самом важном-то сделал ошибку.
вот так правильно:

ArrayPInt<int*>
984178
#168 #984177
>>984171
А смысл? Различные решения, которые используются в shared_ptr, вполне имеют смысл. Стандарт обязывает его удовлетворять определённым требованиям. Если я в свою реализацию добавлю эти совершенно ненужные мне требования, думаю, я сильно отстану по скорости.

Но фишка-то в том, что тебе не всегда нужно то, что предлагает стандарт. А оверхед там просто огромный.
984192
#169 #984178
>>984176
Это не ошибка, просто вакаба ест звёздочки.
984180
#170 #984180
>>984178
и не только звездочки, лол, она мне еще съела вот что:
funcName(*ArrPInt)
984181
#171 #984181
>>984180
там [ i ] после ArrPInt

Короче, главное вопрос, при разыменовании указателя с помощью звездочки смогу ли я получить доступ к тому значению и изменить именно его?
984182
#172 #984182
>>984175

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


>>984181
Результат разыменования — ссылка.
984185
#173 #984185
>>984182
отлично! Если я правильно понял, то в таком случае у меня все должно работать. Спасибо!
#174 #984192
>>984177
Это хорошо, что вы всё понимаете. Всегда проще пользоваться стандартными решениями. В 99% случаев создание своего умного указателя не даст видимого ускорения.
984206
#175 #984202
>>984164
А твой вариант поддерживает многопоточность, например? Я shared_ptr в принципе не очень люблю, но это не значит, что нужно бежать использовать голые new и delete в коде.
984263
#176 #984206
>>984192

>В 99% случаев создание своего умного указателя не даст видимого ускорения.


Очень даже даст. Потому что shared_prt мультитредовый, и это сильно сказывается на производительности.
984226
#177 #984226
>>984206
Но разве я не прав про 99%?
984245
#178 #984245
>>984226
В 99% случаев shared_ptr между тредами не передается.
99% ресурсов имеют явного владельца, и shared_ptr не нужен.
#179 #984250
https://pastebin.com/dxESjpyV

1>------ Сборка начата: проект: B, Конфигурация: Release Any CPU ------
B.vb(38,9): error BC36595: Метод не может одновременно содержать оператор "On Error Resume Next" и определение переменной, которая используется в лямбда-выражении или выражении запроса.
========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

Что делать, аноны?
984252
sage #180 #984252
>>984250

>Что делать, аноны?


Учиться попадать в правильные треды?
984255
#181 #984253
>>984175
Если в функцию передаешь как int& ref, то получаешь доступ к исходному значению и всегда его можешь поменять. Если же в функцию передаешь как const int& ref то код меняющий переданное просто не скомпилится.
А вообще дизайн у тебя уж очень стремный, достаточно уменьшить размер первого массива и указатели в конце второго уже указывают в никуда.
984623
#182 #984255
>>984252
Я в детдом попал.
#183 #984263
>>984202
Это ты про синхронизацию доступа? Но она мне не нужна, я никогда не пытаюсь получить доступ к подобным объектам из разных потоков.

Я и не говорю, что моя реализация лучше стандартной, но в моём случае мне не нужны некоторые специфические фичи стандартного варианта, которые его замедляют.
984278
#184 #984278
>>984263
Самая частая операция умного указателя - разыменование, и оно имеет нулевой оверхед. Если же ты делаешь множество копий своего говна, и при этом взятие мьютекса/инкремент-декремент атомика составляет большую часть операции копирования, а не непосредственно копирование, значит ты копируешь безумное множество мелких объектов и тебе не нужны указатели на счетчиках ссылок в принципе. Скорее всего имеет смысл копировать сами данные и использовать unique_ptr. Если же данные крупные, то взятие мьютекса в процентном отношении ничего не замедлит.

Иными словами, там, где shared_ptr нужен, он хорош - особенно если использовать pool-аллокатор. А там, где он плох, счетчики ссылок не нужны.

Вот типичный пациент, который наступил на все возможные грабли http://webcache.googleusercontent.com/search?q=cache:2vEXBHdabHkJ:love5an.livejournal.com/365174.html+&cd=1&hl=ru&ct=clnk&gl=ru&client=ubuntu

К примеру, если у тебя есть иммутабельное AST с мелкими нодами и ты постоянно что-то там копируешь удаляешь, или же такой же граф, и ты за каким-то хуем пишешь такой код на С++, - пиши копирующий сборщик мусора. Производительность будет сумасшедшей, так как он в 99% случаев не будет отрабатывать. А указатели на счетчиках ссылок в любом случае будут сосать, даже если вырезать оттуда поддержку многопоточности.
984307
#185 #984307
>>984278

>пиши копирующий сборщик мусора


Нахуя? Достаточно двух буферов/потоков. Из одного читаешь, в другой пишешь все дерево, потом их меняешь. Для батч-процессинга вообще глупо использовать умные указатели. Они нужны, например, для гуйни, там где данные мутабельные и персистентные. И на оверхед там насрать, потому что латенси и так миллисекунды.
984316
#186 #984316
>>984307
Ты в общем-то и описал простейший сборщик мусора.
В гуйне, как правило, есть дерево овнеров, чтобы не возникло циклических ссылок. Но вообще С++ для гуйни сильно на любителя, мелкий софт ушел в инет, а крупный софт типа КАД в любом случае легаси на легаси, и ты будешь делать так, как повелось в конкретной фирме.
#187 #984389
>>984174
интерфейсы ведь заменяют абстрактные классы и множественное наследование, не?
984455
#188 #984408
Может показаться странным мой вопрос, но ладно.

У меня есть библиотечный класс. В нём есть поле float values[] , состоящее всегда из 3 элементов.
И у меня есть класс Vector3, в котором есть 3 поля x,y,z.
Можно как-то записать значения values[] из объекта первого класса в x,y,z объекта второго класса (кроме простого почленного присваивания, типа x = values[0], y=values[1]...)?
Я не знаю, с помощью там какого-нибудь memcpy или как-то еще?
984477984501984974
#189 #984455
>>984389
На этой картинке из твиттера тоже не совсем верно понимают, что такое интерфейс. Интерфейс - это совсем не абстрактный класс, нет. Интерфейс - это простое требование "класс обязан иметь такие-то методы".

Знаю, на первый взгляд разница незаметна. Но она есть:
- Абстрактный класс предполагает наличие таблицы виртуальных функций, т.е. все классы, которые от него наследуются, будут вызывать функции только через эту таблицу.
- Интерфейс же ничего такого не предполагает. Если ты видишь где-то, что такой-то объект реализует такой-то интерфейс, значит, у него есть методы этого интерфейса. И вызов метода происходит как обычно, без всякого оверхеда.

В C++ подобный функционал без оверхеда должен реализовываться через SFINAE, но никак не через абстрактные классы.
986634986793
#190 #984477
>>984408
Используй почленное присваивание, остальное может не работать на железе с другим padding'ом у полей, например. А так, memcpy можно заменить union'ом. Но не надо. Даже если у тебя там 20 полей будет. В С++, к сожалению, нет средств избавиться от копипасты при итерации полей структуры метапрограммированием.
#191 #984490
Я, конечно, очень сильно обнаглел, но как перевести строку в инт без атои(вижу точку аш в библиотеке, кудахчу про то, что пишу на плюсах а не на Си) и без подключение потоков стринговых. Должна ж быть просто какая-то функция.
984493984502984666
#192 #984492
Мне кажется или писать всю логику QMainWindow это странно? Может QApplication наследовать? Хочу оставить в основном окне только слоты и сигналы относящиеся к гую
#193 #984493
>>984490

>вижу точку аш в библиотеке, кудахчу про то, что пишу на плюсах а не на Си


Выкини точку аш и добавь в начале букву эс как русская. h — это "эйч", быдло
Всё, теперь ты пишешь на C++.
984600984682
#194 #984501
>>984408
Я бы порекомендовал std::copy , у него вполне может быть подходящая перегрузка, которая целиком через memcpy все скопипастит. Ну или вариант эту перегрузку самому написать.
#196 #984600
>>984493
Ну знаешь же песенку.
Аш - водород
Цэ - углерод и так далее. Я вот как там произношу.
984971
#197 #984623
>>984253
спасибо, и спасибо за критику.
Идея состоит в том, что первый массив остается неизменным после создания (меняются только значения его элементов).
Во втором массиве не обязательно содержатся указатели на все элементы первого, а лишь нужные в конкретный промежуток времени.
Делается это для того, чтобы каждый раз при поиске нужного элемента не было необходимости целиком пробегать первый массив, а лишь необходимую выборку, на которую указывает второй массив.
Может быть есть лучшие способы?
#198 #984666
>>984490
гугл, гугл мазарфакер, гуглить умеешь?
http://en.cppreference.com/w/cpp/string/basic_string/stol
sage #199 #984682
>>984493
"эс" - это s
c - это "си"
984699
#200 #984699
>>984682
Я пародировал "аш", если кто не понял.
#201 #984965
Народ, а почему многие main пишут на новой строке после int? Я что-то не нашёл этому логическое объяснение.
#202 #984971
>>984600
Это латынь
#203 #984974
>>984008
Мнение никогда не видевшего буст: не нужно в него углубляться, он огромен. Нужно искать в нём решения задач, с которыми не справляется STL.
>>984164

>Мой вариант в полтора раза быстрее.


В коде, состоящем только из созданий и удалений?
>>984408
memcpy непортабл. Краткий ответ - нет.
>>984965
Ни разу в жизни не видел. Разве что для того, чтобы имя читалось быстрее (нахуя?).
#204 #984982
>>984965
параметры возвращаемые функции на одной строке, а имя на другой, так писали инженеры для облегчения поиска, пока в ит не вкатились всякие хипстеры пидарасы
#205 #984986
>>984965
Я такое видел в очень старом Си.
Наверное годов 70ых.

Сейчас такое даже и не встречал.
985021
#206 #984993
>>984965
Кто все то, кто все то?! Мы тут одни с тобой епта.
#207 #985019
>>984965
Так вроде как проще грепать названия функций из исходников. Что-то в этом роде.
7 Кб, 289x143
#208 #985021
>>984986
Ещё в 90-0х такой стиль активно использовался. А в оригинальном си вообще параметры под названием объявляли и тоже на новой строке ествественно
985256
#209 #985060
>>979476 (OP)
подскажите какое приложение можно написать что бы значительно поднять скилл по плюсам, сам плюсы знаю плохо.
985068
#210 #985068
>>985060
Компилятор, лол.
985070
#211 #985070
>>985068
А какие фреймворки учить что бы устроится c++ погромистом.
985071
#213 #985074
>>985071
благодарствую
#214 #985198
class Parent {

};

class Base1 : public Parent {
public:
explicit Base1(const char c) : m_char(c) {};
const char
m_char;
};

class Base2 : public Parent {
public:
explicit Base2(int c) : m_int(c) {};
int m_int;
};

class X {
public:
template<typename T>
static Parent fabric(int t, T x) {
switch (t) {
case 0: return new Base1(x);
default : return new Base2(x);
}
}
};

int main(int argc, char const
argv[])
{
Parent* p = X::fabric<int>(1, 3);
delete p;
return 0;
}

Компилятор генерирует ошибку, мол не нашел подходящего конструктора для Base1(нельзя конвертировать инт в строку).
Почему так делать нельзя? Какого хуя компилятор за меня решает, какие типы я буду передавать? И как лучше, в таком случае, написать фабрику?
#214 #985198
class Parent {

};

class Base1 : public Parent {
public:
explicit Base1(const char c) : m_char(c) {};
const char
m_char;
};

class Base2 : public Parent {
public:
explicit Base2(int c) : m_int(c) {};
int m_int;
};

class X {
public:
template<typename T>
static Parent fabric(int t, T x) {
switch (t) {
case 0: return new Base1(x);
default : return new Base2(x);
}
}
};

int main(int argc, char const
argv[])
{
Parent* p = X::fabric<int>(1, 3);
delete p;
return 0;
}

Компилятор генерирует ошибку, мол не нашел подходящего конструктора для Base1(нельзя конвертировать инт в строку).
Почему так делать нельзя? Какого хуя компилятор за меня решает, какие типы я буду передавать? И как лучше, в таком случае, написать фабрику?
985203985225985226
#215 #985203
>>985198

>И как лучше, в таком случае, написать фабрику?


Писать её на другом языке. Тут уже был парень с таким же вопросом если это не ты опять
#216 #985225
>>985198
Делай абстрактную фабрику фабрик и фасоль не забудь.
#217 #985226
>>985198
Компилятор ничего за тебя не решает, он лишь проверяет валидность кода. Это не задача компилятора - анализировать программу, и если в одной из веток будет бобо, он стопорится.

Варианты:
1) Костыльный.
Сделать no-op конструкторы для всех Base*
2) Современный.
if constexpr завезли в ++2017, в его ветках могут быть ошибки типизации.
3) Сбалансированный.
template specialization.

class X {
public:
template<typename T, int t>
static Parent fabric(int t, T x) {
return new Base1(x);
}
template<typename T, 0>
static Parent fabric(int t, T x) {
return new Base2(x);
}
}
};

Или как оно там пишется? Забыл уже с тех пор, как читал об этом.
#218 #985256
>>985021

>> register


Фи
985388
#219 #985364
>>981590
Valgrind же.
988008
#220 #985388
>>985256
unregister
#221 #985449
Кто-нибудь может мне рассказать секрет того, как можно поставить визуал студию в одну папку на одном вольюме? Чтобы она не создавала кучу папок в системном вольюме.
985450985481
#222 #985450
>>985449
Виртуалочка.
#223 #985474
>>984965
потому, что это хороший кодстайл
#224 #985481
>>985449
Можешь заморочиться и перенести все компоненты в одно удобное место, а вместо них подсунуть симлинки.
985487
#225 #985487
>>985481
Один раз заморочился, даже заработало, второй раз не хочу.
985496
#226 #985496
>>985487
Достаточно было написать один раз батник.
#227 #985580
Столкнулся с тем что в цикле

int arr[256];
std::string s = text;
for(int i=0; i<s.size(); i++) {
f( arr );
}

s воспринимается как signed char, т.е. вместо какого-нибудь 252 оно принимает значение -4. Это нормально вообще?
985582985593985723
#228 #985582
>>985580

int arr[256];
std::string s = text;
for(int i=0; i<s.size(); i++) {
f( arr\[s\[i\]\] );
}

s\[i\]

fix
#229 #985593
>>985580
char - это либо знаковый, либо беззнаковый тип. Если нужно что-то одно - кастуй или используй соотв. string (не помню, есть ли он).
986009
#230 #985723
>>985580
Короче, читай вот тут, а то двач залупается про какое-то слово из спам-листа
https://pastebin.com/rK0xafPX
986009
23 Кб, 1008x829
#231 #985744
Вим и емакс скоро уйдут в прошлое
985747
#232 #985747
>>985744
Что это за параша?
985749985792
#233 #985749
>>985747
GTK, сер.
#234 #985765
есть ли какой нибудь список идей который можно реализовать на c++ для новичков?
985779
#235 #985779
>>985765
Например, 4chan programming challenges
#236 #985792
>>985747
Enterprise-ready IDE.
175 Кб, 686x822
#237 #985834
А ещё я вот такую замену QSettings запилил которая хранит данные в разных json файлах
985845
#238 #985845
>>985834
Чому бы не гонять protobuf или flatbuffers, которые позволяют генерировать схемы для настроек, пиздатая вещь, на самом деле.
985847
#239 #985847
>>985845

>> схемы сообщений


фикс
#240 #985854
что нужно подключить что бы написать просто парсер какой нибудь странички
985856
#241 #985856
>>985854
boost::spirit
#242 #985859
А если серьезно придётся использовать какой-нибудь libcurl и std::regex, но лучше сразу вкатиться в Qt и дрочить асинхронный QNetworkAccessManager
#243 #985860
стоит ли вкатываться в qt если на плюсах еще толком ничего не писал
985863985867
#244 #985863
>>985860
Если понимаешь ООП то да.
#245 #985867
>>985860
Ну а хули нет?! Только вот Шлее не читай, он пишет про устаревшие вещи, хотя, в целом, все, что там написано, применимо и по сей день.
985881
#246 #985881
>>985867
а можете подкинуть годных курсов или видосов, только не учебники, хочется сразу в практику
985886
#247 #985883
Двач, я новичок в программировании, я хочу использовать в своей коммерческой программе сторонние библиотеки под "3-clause BSD license", можешь подсказать как мне их использовать чтобы всё было без проблем?
#248 #985886
>>985881
Смотри на их вики официальной, очень много примеров с объяснениями. Когда будешь устанавливать, можешь вытянть примеры.

http://wiki.qt.io/Main
#249 #985961
Где описывается логика работы позиций считывания/записи в iostream? Стандарт читаю, но пока не нашёл.
#250 #986009
>>985593
>>985723
Благодарю
#251 #986044
Что-то я не въезжаю в иострим.

Как мне воплотить такую логику:
1 читаю файл с начала
2 почитал, скипнул (скипнуть могу только в точности за конец файла, размеры записанного известны)
3 если не eof, goto 2

КАК? peek не помогает - eof не обновляется.
986080
#252 #986080
>>986044
Попробуй get. peek просто смотрит на следующий символ, из потока его не забирает.
986087
#253 #986087
>>986080
Мне не нужен get, мне нужно только затестить.

Сделал так:
.seekg(0);
.read(...)
while(!.eof()) {
почитать
скипнуть
.read(...)
}

Нихера.
986111
#254 #986088
или .read не потребляет данные?
#255 #986095
Хочу в кресты вкатится, есть пару вопросов про область применения
Правда ли, что в основном работа на плюсах заключается в поддержке легаси кода, а что то новое пишут с крайней неохотой? Для промышленного формошлепства есть шарп и жаба, для микроконтроллеров си, для веба всякие руби\питоны\го, биг дата в основном на питоне, что делают то?
986110
#256 #986110
>>986095
Почти везде есть язык, который справляется с задачей лучше, чем кресты.
986115
#257 #986111
>>986087
Не понимаю, чего ты пытаешься добиться.
Дефайн почитать, скипнуть.
986125
#258 #986115
>>986110
Ну так вопрос про область применения крестов. Получается, что смысла особого нет, если хочешь именно писать что то новое, а не поддерживать легаси?
986122
#259 #986122
>>986115
Выходит, что так. Вроде как и пишут на крестах разные крутые штуки, но если смотреть на вещи трезво и выбирать между бедным крестовым ынтырпрайзом и жырненьким Джава интерпрайзом, например, то выбор очевиден.
#260 #986125
>>986111
Почитать: read, operator>>
Скипнуть: seekg
986129
#261 #986129
>>986125
Так тот код, который ты кинул, будет что-то делать. Сам-то что пытаешься сделать?
986183
#262 #986183
>>986129
Нет, не будет. eof() не робит.

Сейчас на ideone пульну.
#263 #986207
Не буду ничего пулять, нашёл дебильную ошибку в своём говнокоде.
50 Кб, 1008x829
#264 #986249
Солорсхемы. Присутствует уникальная возможность поменять оформление всего редактора через параетр ui. Пока просто сделал MainWindow::setStyleSheet(), надо будет ещё повозиться со стилями элементов чтобы прилично выглядело.
Паттерны для подсветки собираюсь тоже в json вынести, чтобы можно было полностью настроить. Тот же Sublime например ни в какую не хочет операторы подсвечивать
#265 #986463
Привет, плюсики. Так вышло, что мне нужно связать ООП и WinAPI. Например, некоторые методы класса мне нужно запускать в отдельном треде. Тред при этом создаётся через CreateThread() из <windows.h>, одним из параметром которого является указатель на функцию процедуру, а другой - void параметра. Другие методы нужно использовать в хуках которые SetWindowsHookEx, в частности для WH_KEYBOARD_LL. Как я понял, WinAPI ориентирован на процедурное программирование, и моя компилятор не позволяет мне скормить не статическую функцию-член в качестве адреса процедуры в CreateThread и SetWindowsHookEx. В случае с CreateThread я нашел выход костыль - сделать функцию static, а в качестве параметра void передавать объект класса, которому принадлежит функция. Однако, с SetWindowsHookEx() такая фишка не срабатывает. Отсюда у меня вопрос - как скормить этим двум WinAPI функциям процедуры-нестатические функции-
члены класса? Может быть есть какой нибудь грамотный подход к делегированию вызовов функций с аргументами или типа того?

inb4 ООП для пидоров, нахуй ООП, пиши в процедурном стиле - на данный момент интересует решение проблемы именно в контексте классов.
986506986572986582
#266 #986465
Бляхть, разметка. LPVOID параметр, а не void, указатель на void короче.
#267 #986506
>>986463
Код дай. Сдалось нам эту поляну разбирать.
#268 #986572
>>986463
Попробуй анализировать контекст, из которого вызывается процедура. Что знает процедура, когда она вызывается хуком? Сделай таблицу соответствия данных о контексте классам и в процедуре ищи класс в этой таблице, во время добавления хука добавляй данные в таблицу.

Олсо, что такое HOOKPROC? В дефайнах MinGW не нашёл. Это может быть метод COM?
986593986597
#269 #986573
>>981412
Имею опыт в Code::Blocks, Codelite и DevC++.
Первый мощен, но часто сильно тупит и подсказки говно.
Второй ничего так, но серьёзные проекты ему лучше не доверять.
Третий красив и аскетичен, но подсказок нет от слова совсем. Т.е. что-то есть, но хз.

До этого была студия и дотнет, можешь себе представить, как это всё больно.
#270 #986582
>>986463

>Тред при этом создаётся через CreateThread()


пизда тебе

>>986463

>Может быть есть какой нибудь грамотный подход к делегированию вызовов функций с аргументами или типа того?


Обычно делают С-функцию коллбек, в которой как-либо получают указатель на экземпляр класса, и дергают его метод. Опционально коллбек объявляют френдом класса, чтобы дергать приватные методы.
986593
#271 #986593
>>986582
friend, ебаный насрал, я совсем про него забыл. Спасибо тебе.

>пизда тебе


Ды епта, лабораторная на WinAPI, простите-извините.
>>986572
Процедура для хука ничего не знает для выполнения необходимой задачи, потому что даже будучи статической функцией класса, this у меня всё равно не будет. Вот сейчас про friend мне напомнили, мб прикручу по уму, а то я уж отчаялся и в main захуярил всё.
986614
9 Кб, 973x176
#272 #986597
>>986572

>что такое HOOKPROC

#273 #986614
>>986593

>Процедура для хука ничего не знает для выполнения необходимой задачи



Не может быть. Неужели нету функций для получения информации о среде? О стеке вызовов, например.
180 Кб, 826x1024
#274 #986634
>>984455

> В C++ подобный функционал без оверхеда должен реализовываться через SFINAE, но никак не через абстрактные классы.


Скажи, что ты так пошутил. Или что SFINAE стоит применять для оптимизации уже существующего кода, использующего абстрактные классы как описание интерфейсов.
Если же ты прав, то зачем тогда вообще нужны абстрактные классы в крестах? Как внедрять зависимости, не используя их? Я испытываю когнитивный диссонанс, мой уютный мир умных указателей типа интерфейсов на объекты в куче рушится. Я ньюфаг, не бей если несу чушь.
986770
#275 #986668
Дайте пример лабы с которой сюда приходят студентота.
986669986717
#276 #986669
>>986668
введи и помножь две матрицы.
986729
#277 #986673
>>979476 (OP)
Подскажите, плз:
есть строка (массив char) - "МАМА_ПАПА_ЕСЬЖИ"
Как мне проверить каждое слово (разделитель "_") с текстовым файлом?

Вот код, который проверяет одно слово
if (strcmp(str1, str2) == 0) {
printf("Совпало" %s, str1);
}
986706986717986730
#278 #986706
>>986673
ты че спросить хотел?
проверить каждую букву на символ "_"?
#279 #986717
986729
#280 #986729
>>986717
>>986669
То есть мою лабу будет е стыдно вгитхаб залить и на собеседованиях показыввать? Там что-то около 800 строк кода.
986732
#281 #986730
>>986673
Распидорашиваешь строку на слова (strtok если ты решил угореть по С строкам, или std::istringstream + std::getline) и ищешь их в словаре. strcmp тебе ничем не поможет, если только твой словарь не вектор строк в котором ты ищешь вхождения линейным поиском.
#282 #986732
>>986729
Хуям на собеседовании будет интересно увидеть что ты пишешь также как они (например правильно разбиваешь код на модули, используешь нужные идиомы), то есть тебя не придется учить писать код. Сколько там у тебя строк и вообще что там написано имеет мало значения. Естественно, кроме случая какой-то твоей собственной уникальной разработки.
986735
#283 #986735
>>986732
Ага, то есть стоит его красиво оформить?
986738
#284 #986738
>>986735
Имелась ввиду хуйня типа https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md/
Естественно это не высеченная в камне истина, у парней на собеседовании могут быть противоположные мнения по не которым пунктам, и они даже могут оказаться правы.
#285 #986768
>>979476 (OP)
Сап, анон. Помоги разобраться в том, почему цикл в этом примере написан именно так: http://ru.cppreference.com/w/cpp/algorithm/adjacent_find

>for (next != last; ++next, ++first)


Для чего в блоке инициализации написано сравнения? Что это дает?
Каким образом условие ++next может стать ложным? Если, например, итератор end() контейнера можно интерпретировать как false, то для произвольного диапазона это неверно (допустим, если диапазон выбран в середине контейнера).
986775
#286 #986770
>>986634
Давай объясню подробнее. Наследование от абстрактного класса переводится как "B является A". Реализация интерфейса - как "B может то, что говорит A". Никакого "является" тут нет.

На программном уровне разница будет в том, что в случае абстрактного класса в наследниках функция остаётся виртуальной.

Вот примерное объяснение в коде:
https://pastebin.com/1cSV7itY

Сейчас это можно сделать через SFINAE. И вместо

`void Func(Interface* A)`

где Interface имеет метод F, писать

`template<typename Interface>
void Func(Interface A)
{
if constexpr(Has_Method(Interface, "F"))
{
//Blablabla
}
}`

Ничего, скоро добавят концепты, с ними будет возможно то же самое.
986788
#287 #986775
>>986768

>ru


Не читай ru-сайты, а то постоянно будешь иметь подобные проблемы. Они забыли ; в начале условия.

Читни на ангельском, там всё правильно: http://en.cppreference.com/w/cpp/algorithm/adjacent_find
#288 #986788
>>986770
каталог-кун пишет:

современое ООП:
толпы быдла долбятся головами об стену невидя двери - для них выпиливают люк.
986792
#289 #986792
>>986788
Я не знаю, к чему ты это сказал, но иногда бывает нужно знать, что переданный объект точно-точно содержит такой-то метод. А наследование в данном случае будет костылем.
986879
#290 #986793
>>984455

>Абстрактный класс предполагает наличие таблицы виртуальных функций


но ведь в стандарте про vtable ничего нет, и компиляторы свободны имплементировать нахождение виртуальных функций как хотят.
986794986795
#291 #986794
>>986793
так что все вопросы к компиляторам
#292 #986795
>>986793
Тогда просто "Абстрактный класс предполагает, что все его методы виртуальные". Всё равно это не всегда то, что нужно.
#293 #986807
>>979476 (OP)
Обычно экземпляр шаблона создается с указанием типов или значений в треугольных скобках. Каким образом компилятор здесь https://ideone.com/BDfVA6 вычисляет длину массива и подставляет ее вместо N? Как вообще создается экземпляр шаблона без треугольных скобок, как выводятся типы, как подставляются значения и почему она встают на правильные места?
986813986815
#294 #986813
>>986807
Длина статического массива, который создаётся на стеке, известна компилятору с самого начала. Он же в 13-й строке откуда-то узнаёт размер? Вот и при передаче в функцию знает.

Типы в угловых скобках указывать не нужно, потому что есть единственный вариант типа и размера. А значит, компилятор и так знает, что нужно подставить туда.
#295 #986815
>>986807

>вообще создается экземпляр шаблона без треугольных скобок


Выводится тип переданного аргумента (гугли template deduction).

>как выводятся типы


По типу выражения в правой части.

>почему она встают на правильные места?


И почему же он ошибаться-то должен? Подставляет по типу, логично жи.
#296 #986879
>>986792
Есть мнение, что наследование в принципе всегда является костылём. Недаром в этих ваших новомодных Rust и Go их заменили интерфейсами и трейтами.
986912986929
#297 #986912
>>986879
У наследования есть пара преимуществ, когда нужно вынести общий код, а публично доступным для всех его делать не нужно. Но это мне нужно было довольно редко, часто наследование выглядит каким-то натянутым. Как будто кто-то очень хотел прикрутить наследование, но не совсем понимал, зачем оно в этом случае нужно.
987340
#298 #986922
Help.
Возможна ли активация ToolTip'a без наведения на заданный
Button - мыши.
##########
ToolTip1->SetToolTip(button1, "Text1");
При наведении мыши на button1 - Открывает ToolTip1 с Text1.
Возможна ли активация ToolTip1 без наведения на button мыши?
К примеру, добавляю метод Button1_Click по нажатию на который высвечиваются все заданные ранее ToolTip'ы.
987333
#299 #986929
>>986879
Вот этот вроде не совсем дебил, и мнение не совсем говно - что удивительно для параши уровня /зк.
#300 #987333
>>986922
Не знаю с какой технологией ты работаешь, но у tooltip'а нет свойства/поля isVisible или метода типа show()/enable()?
#301 #987340
>>986912
Я тебе больше скажу: оно так вообще везде.
Во всех новых языках наследование давно заменили композицией.
987419
#302 #987419
>>987340
Проблема композиции в том, что внутренние классы должны торчать полями и методами наружу, чтобы их мог использовать внешний класс. Особенно это хреново, когда кроме как внешнему классу, никому больше эти методы и не нужны.
987446
#303 #987446
>>987419
Это везде решается модулями, но для плюсов это пока что больная тема, да.
987641
255 Кб, 469x500
#304 #987457
Может кому пригодится. Не отображался текст в консоли MS Visual C++ 6. Перерыл весь интернет, програмистские форумы, ничего не помогало, и вот сегодня, о чудо, нашел в Ответах.Мэйл.ру рабочее решение. Удивляюсь с этого сайта, не раз уже выручает, там рили ответы на все вопросы вселенной, хех.
Подключение кириллицы в консоль С++
https://pastebin.com/Pc5jM2VG
Залил на пастебин для удоства.
987513987544987559
#305 #987513
>>987457
Лучше бы ОС поставил.
987585
#306 #987544
>>987457
не знаю можно ли в c++ 6 так, но попробуй
setlocale(LC_ALL, "");
987585
sage #307 #987559
>>987457
Хорошая попытка, mail.ru, но нет.
987585
127 Кб, 228x512
#308 #987585
>>987544

>не знаю можно ли в c++ 6 так, но попробуй


>setlocale(LC_ALL, "");


В том то и дело, 99% советов, которых я нашел в интернете, были про это но это не помогло(см. пик).
>>987559
Ты и так на нем сидишь.
>>987513
ОС? Сижу на семерке, а на ней виртуалка ХР(а в ней висуал с++ 6).
987586987622
#309 #987586
>>987585
Оно еще и гатарипидор.
Это ВСЕ обьясняет.
#310 #987600
>>987589

>титосов


>наруту


И даже эти черви-пидоры все еще лучше гатариговна.
#311 #987619
Как конвертнуть сорцы в 866-кодировку?
987620
#312 #987620
>>987619
Иди уже нахуй, гатаридебил.
#313 #987622
>>987585
А че это у нас локали выкинули уже что ли из стандарта?!
http://ideone.com/t0jzwb
#314 #987628
>>987623

>На хуе


>вазелин


Сразу видно - ОПЫТ
#315 #987641
>>987446

>модулями


Цпп макакичам даже нормального способа переключения кодировки твывода в терминал не завезли, модулями ему косяки композиции прикрывать видите-ли надо.
189 Кб, 853x693
#316 #987649
Сап, аноны. Пытаюсь, значит, выучить C++ за 21 день, дошел до очередных заданий, и сразу же возникло непонимание. Следовал указаниям, но у меня не запускается и не компилируется. Может, проблема в компиляторе? Использую Dev cpp. И еще вопрос - у нас главный файл use.cpp, к нему подключается my.h, как компьютер поймет, что нужный код еще в my.cpp есть?
987655987656987662
#317 #987655
>>987649
Проблема в std_lib_facilities.h обычно, не инклудь его.
987657
#318 #987656
>>987649
Обычно каждый исходный файл компилируется отдельно в объектный код (что типа g++ -o user.o -c user.cpp), дальше линкеру скармливаются все файлы с объектным кодом и он уже и собирает готовый исполняемый бинарник (g++ -o myapp user.o my.o)
987657
#319 #987657
>>987655
Я его и не использую.

>>987656
Что-то как-то сложна. И, в любом случае, они у меня не копилируются (или не собираются, я хз, в эти тонкости еще не вникал) никаким образом.
#320 #987660
Здрасьте. Я тут учусь помаленьку и у меня возник вопрос. Вот код:
https://pastebin.com/JcFdXneJ

Это задание на наследование и прочее. И вот возникает странная ошибка из-за делегирования конструкторов и значений по-умолчанию. Если вы скомпилируете, то увидите, что цепочка, в итоге, приводит к обнулению переменных w,d,h. При том weight, которая находится всего на один уровень выше - задаётся корректно.

Что это и как это исправить?

Ну, в смысле, вон, если убрать комментарий в конструкторе UberBox, то, несомненно, я получу нужные значения. Но мне бы хотелось воспользоваться предыдущими конструкторами.
987666987667
#321 #987662
>>987649

> Dev cpp


Это IDE, а не компилятор, проверь, возможно ты скачал версию без компилятора. То что нужно два файла компьютер не поймет никак. Обычно за этим следит IDE - ты создаешь проект, добавляешь в него файлы, а IDE уже скармливает компилятору все файлы в проекте. Посмотри, возможно стоит Qt Creator использовать - потом сразу в Qt вкатишься.
987668
#322 #987666
>>987660
Используй для Box дефолтный (без параметров) конструктор. А вообще наследование ромбом хреновая идея.
987671
#323 #987667
>>987660

>обнулению переменных w,d,h


Они не обнуляются, а изначально равны 0 - в твоем классе есть два набора переменных w,d,h. Один ты изменяешь, а второй нулевой.
У тебя РОМБ КЛАССИЧЕСКИЙ. Енджой йор МНОЖЕСТВЕННОЕ НАСЛЕДОВАНИЕ.
987671
#324 #987668
>>987662
А почему Qt Creator, а не какую-нибудь Visual Studio? И нет, версия у меня точно с компилятором, и я эти файлы и через проект создавал, и по отдельности - никак не работает.
987673
#325 #987671
>>987666
>>987667

Такс. А ромбы нельзя? У нас в примере с лекции было такое, там про virtual, собственно, только сказали.

За просто Box спасибо
987672
#326 #987672
>>987671
Ромб можно, но только в С++. В нормальном обществе за ромбы бьют якорем по яйцам.
987675
#327 #987673
>>987668
В студии специфическая версия плюсов, и она несколько жирнее креатора (с учетом фреймворка). Так-то студия это оптимальный вариант, если тебя не смущают нюансы. И ты на используешь операционную систему виндоуз.
#328 #987675
>>987672
Ну, в моей любимой джавочке это в принципе невозможно.

Такс. А как мне избавиться от второго набора переменных сохранив ромб (лол. Никак, да?)? Или как мне ,однозначно, обратиться к тому набору переменных который инициализировал тот конструктор?
987680987682987686
4 Кб, 499x85
#329 #987680
>>987675
мдя. Чому так сложно? Не хочу заниматься памятью:\
#330 #987682
>>987675
Избавиться нельзя. Обращаться указывая нужный класс, что-то типа BoxWeight::w = 77;
987684
#331 #987684
>>987682
понятно. Спасибо большое.

А.. Как сделать приведение типа, скажем, от BoxNamed к Box? Я не совсем понимаю как это именно написать, видимо, косячу с самим синтаксисом перегрузки оператора. Оно то предлагает сделать его void, то говорит, что "'Box' is an inaccessible base of 'BoxNamed'"
987735
#332 #987686
>>987675
virtual наследование
987687
#333 #987687
>>987686
Оно там есть. Куда его ещё запихать?
987695
#335 #987715
Поясните, зачем вкатыватся в кресты, если на на них пишется только легаси?
987719987728
#336 #987719
>>987715
Потому, что этого легаси ещё лет на 10 хватит. А в странах третьего мира и на все 30. Но офк глупо ограничиваться этой еботекой с указателями(не в обиду, господа)
#337 #987725
>>987695
не понимаю. А в чём разница того что уже есть с тем, что в статье?
#338 #987728
>>987715
Это универсальный переносимый язык с промышленным стандартом и довольно небольшим оверхедом.
Легаси это не про языки, легаси это про подход к разработке (куча горизонтальных зависимостей, протекшие абстракции, отсутствие тестов).
987754
#339 #987735
>>987684
Если у тебя приведение типов происходит снаружи (а не в имплементации класса) то наследование нужно делать публичным.
987742
17 Кб, 742x127
#340 #987742
>>987735
О... Да. Это помогло. Теперь я немного лучше понимаю табличку и вообще, что именно та ошибка имела ввиду. Спасибо.
#341 #987754
>>987728
Легаси это именно что совокупность говна мамонта.

Помню где-то скрин видел с форума, где был запечатлен пост защитника VB6 относительно свежей даты, который рассказывал что ЯП это тебе не залупа и в нём новых косяков не появляется со временем, то есть он не стареет эх, а ведь он даже не подозревал насколько неправ.
#342 #987892
В win32 приложении я повесил hook через SetWindowsHookEx на клавиатуру. Больше приложение не делает ничего, только ждёт нажатия на клаву с последующим обработчиком события. Как теперь поддерживать процесс в рабочем состоянии чтоб не вышел и способном принимать сообщения через хук? Желательно не что нибудь типа while (true);
987914
#343 #987914
>>987892
Ладно, с этим вроде понял, для хука нужна прослушка сообщений через GetMessage(). Теперь другой вопрос: если я закончил прослушивать нажатия клавиш, как мне из другого треда послать в основной сообщение WM_QUIT? Всякие PostMessage, PostQuitMessage, судя по описанию на msdn, посылают сообщение в своём треде.
В наличии есть id обоих тредов а может еще что то, о пользе чего я не знаю
987927
#344 #987927
>>987914
Всё, проблема решена. PostThreadMessage в совокупности с GetMessage работает пэрэекарасно.
#345 #987954
>>979476 (OP)
https://pastebin.com/NMEs8XK3 - где ошибка в моей рекурсии?
Всегда 1 в ответе
988257
#346 #988008
>>985364
Это немного не то. И думает он по полтора часа. Да и с гпрофом я уже разобрался - надо было просто статически слинковать.
#347 #988011
>>981597
Ботлнек получается и в итоге все работает медленнее чем в однопотоке. Если б на каждый поток можно было завести по пайпу, в который скидывался бы результат, а потом по окончании их работы эти пайпы собрирались бы в контейнер, может и вышло что-нибудь.
#348 #988106
ребят, помогите пожалуйста, это интерполяционный метод Ньютона, и я не могу понять, где моя ошибка. После десятого dx на экран выводятся слишком большие значения. Проблема, по моему скромному мнению, находится в рекурсивной функции, помогите пожалуйста. Не ругайтесь насчет ненужной переменной в функции, я знаю она не нужна. https://pastebin.com/edit/fQ50AM5R
988241
#349 #988190
Сейчас будет тупой вопрос, как называются переменные в классах? Гугление только усугубило проблему, мне кажется что у них десятки наименований которые все обозначают тоже самое, говорит ли что-то об этом стандарт?
988219988244
#350 #988219
>>988190

>Сейчас будет тупой вопрос, как называются переменные в классах? Гугление только усугубило проблему, мне кажется что у них десятки наименований которые все обозначают тоже самое, говорит ли что-то об этом стандарт?


ЧЛЕНЫ! ИХ МОЖНО ДЕРГАТЬ!

— Смотри, я… вот у нас здесь функций много… ой-ой… функций много, понимаешь? Смотри, функции, они тебе спать мешают. А я вот, давай вот я функции прямо в структуре объявлю, и они все в структуре будут, и мы их методами назовем, слышишь, членами назовем? И тебе тогда спать, ой, спать будет хорошо. Давай? Ну, куда им ещё, ихнее место-то тока здесь. А структуру - классом.
— Ты можешь просто помолчать, всё, пиздец?!
— А еще в классе два члена сделаем, конструктор и деструктор, и они сами собой эти члены дергаться будут. Вот так, дерг, дерг.
— Заебал, блядь!
— А еще у класса родитель может быть, а этот класс тогда дочка. И у дочки тогда все члены родителя будут, ну они же наследуются, ну. Понимаешь, братишка. У дочки члены родителя будут. И их тоже дергать можно будет.
— Ёб твою мать! Блядь! Иди отсюда на хуй, блядь!
— Но не все члены дергать можно будет, будут публичные члены, которые все могут дергать, вот ты мой публичный член, например, можешь подергать.
— Сука, блядь, пидорас, блядь!
— А другой член только родитель сможет дергать, и больше никто. А еще будут члены, которые только родитель и дочка дергать смогут. Братишка, братишка... Дочка у родителя член дергать сможет, понимаешь, братишка.
— Иди под струю, сука! Мойся!
— А еще можно будет класс-дружочек сделать. И тогда этот дружочек все членики у своего дружочка дергать сможет.
— А блядь на хуй! Ну, иди сюда сука, блядь! Дерьмо собачье, блядь! А блядь!
— А у дочки много родителей будет, и все членики родителей у дочки тогда будут. Их можно будет дергать и другим не мешать дергать, понимаешь?
— Мудак, блядь, ну ты мудак. Я тебя сейчас убью нахуй, а тебя, бля, сейчас убью, блядь!
#351 #988241
>>988106

>https://pastebin.com/edit/fQ50AM5R


To get to the requested page you must first login.

>После десятого dx на экран выводятся слишком большие значения.


Возможно где-то переполняется переменная. (или становится равной нулю)
Или, со знаком что-то происходит.
Убедись, что у тебя все переменные double.

Запиши все значения всех переменных на каждой итерации в лог.
988371
#352 #988244
>>988190
Называешь как хочешь. Я предпочитаю _field_name или _fieldName, подчёркивание отделяет приватные от публичных в автодополнении и всяких списках в IDE если такие есть.
#353 #988257
>>987954
Тип sum.
#354 #988259
Сап, крестовый, как записать объект в файл чтобы потом его прочитать?
988263988265
#355 #988263
>>988259
toJson
fromJson
988288
#356 #988265
>>988259
Если в объекте нет ничего виртуального и нет указателей: file.write((char*)object,sizeof(object));

А по-взрослому это делается так: для кажлого объекта надо определить operator>> и operator<<, в которых ты ручками пишешь порядок вывода всех членов, и делаешь их френдами объектов, если есть приват-члены.
https://isocpp.org/wiki/faq/serialization
988288988289
#357 #988288
>>988263
Какие библиотеки норм для json?
>>988265
При такой записи ( не по-взрослому ) ошибка при чтении и гроб-гроб
#358 #988289
>>988288
>>988265
Только я делал (char *)&object
988316
#360 #988316
>>988289
Нутыпонел.
>>988288

>При такой записи ( не по-взрослому ) ошибка при чтении и гроб-гроб


??? Оберни в trycatch.
988390
#362 #988371
>>988241
https://pastebin.com/fQ50AM5R

>https://pastebin.com/edit/fQ50AM5R


верхняя ссылка должна работать
149 Кб, 1432x566
124 Кб, 642x642
76 Кб, 980x354
#363 #988390
>>988316
Попробовал я с JSON в Qt разобраться. Записать-то я записываю. Но по клику мышки можно записать хоть сколько json-ов. Как мне их теперь читать-то?
988694988705990812
167 Кб, 800x600
#364 #988396
Здаров, хочу вкатиться в сетевое(серверное) программирование... Мол сокеты беркли, высокопроизводительные сервера, вся хуйня, желательно кросплатформенными примерами на бустеА не много ли я хочу?. Подскажите плз что почитать?
988564
#365 #988564
>>988396

>> высокопроизводительные


>> бусте



Проиграл
988653
#366 #988653
>>988564
А что по твоему более производительнее??
988683
#367 #988655
по интерполяции ньютона есть кто? https://pastebin.com/fQ50AM5R
988677
#368 #988677
>>988655

>по интерполяции ньютона есть кто?


Я тебе вроде уже отвечал.
Чтобы ты все расчеты залогировал.

Ты на листике считать можешь эту интерполяцию?
#369 #988683
>>988653
epoll
libevent
да libuv тот же производительнее будет, другое дело, что все это ЦЭ
988802
#370 #988686
Как найти работу в ДС на 170+ штук?
#371 #988694
>>988390
Ты походу с самим json не разобрался, неправильно ты пишешь в файл, батенька.
Тебе нужно создать массив объектов в json.
Либо:
[
{
//good1
},
{
//good2
}
]

Либо:
{
"goods": [
{
//good1
}
]
}

А ты пишешь в json:
{
"price": 10,
"count": 50
...
}
{
"price": 50
}
что валидным json не является.
#371 #988694
>>988390
Ты походу с самим json не разобрался, неправильно ты пишешь в файл, батенька.
Тебе нужно создать массив объектов в json.
Либо:
[
{
//good1
},
{
//good2
}
]

Либо:
{
"goods": [
{
//good1
}
]
}

А ты пишешь в json:
{
"price": 10,
"count": 50
...
}
{
"price": 50
}
что валидным json не является.
33 Кб, 513x219
#372 #988705
>>988390
А вообще, как-то так, в случае, если в jsonе у тебя структура вида:
{
"goods": [
{
//good1
}
]
}
988919
#373 #988802
>>988683
спс анон
#374 #988881
В чем разница между
const int size = 7;
int i_array[size];
и
int i_array[7];
988937
#375 #988919
>>988705
Ничего непонимаю.
Это С++ на пикрелейтед?
Почему не макароны, как у анона которому ты отвечаешь?

И что за подсветка синтаксиса, и откуда?
988927
#376 #988927
>>988919
Да, С++, QtCreator.
Подсветка илитная.
998382
#377 #988937
>>988881
В проекте лаба_1 нивчем.
988940
#378 #988940
>>988937
А в проекте yoba_kursach_v_2.4.3_FINAL?
мимо уровнем чуть выше чем лаба1, но отличий не вижу
988944
#379 #988944
>>988940
Представь себе:
1) что этот волшебное число 7 у тебя по всему проекту в 256 местах.
2) что у тебя в одном хедере написано конст нормально имя переменной, четко понятное размер чего это и зачем = 7

Теперь тебе надо сменить это значение на, допустим 9. Или даже не тебе адруглму уебку, тошо ты давно уволился.

В каком случае уебок соснул?
988947
#380 #988947
>>988944
Зачем я должен помогать уёбку не соснуть?
988953
#381 #988953
>>988947
А что ты сам можешь задержаться на этом месте дольше месяца ты не рассматриваешь как вариант, я полагаю? За такой код тебя пидарнет нахуй сеньер помидор после первого же код ревью, быдлокодеров типо тебя в любой шараге можно набрать за 100$ пучек. А пояснять инвестору почему сменить количество рабочих часов в дне займет 3 месяца и еще 2 месяца багтестинга ему не захочется.
#382 #989083
Граф без весов можно хранить списком смежности. А как СПИСКОМ хранить взвешенный граф?
989100
#383 #989100
>>989083
Список пар смежностей и весов, лол.
#384 #989142
сложно ли найти работу на плюсах? Какие обычно требования к с++ погромисту, что нужно уметь.
989154
#385 #989146
Антоны, прогавшие под Android NDK, поделитесь впечатлениями. Много ли проблем с адаптацией кода под разные архитектуры? Много ли гемора с дебагом? Как на андроиде дела с STL? Что менее проблемно, писать NativeActivity (всё приложение написано на C/C++ и из него, возможно, иногда вызываются методы Java) или дёргать функции либы из простого Java-wrapper-а (конкретно, функцию, рендерящую сцену - 1 раз за кадр)? Какие подводные камни?
989322
#386 #989154
>>989142
Знать фишечки новых стандартов, понимать наследование\тимплиты\эксепшены. Знать алгоритмы хоть немного, заглядывать в многопоточку.
#387 #989157
Использует ли тут кто Makefile? Я что-то ни черта понять не могу, что делают шаблонных правила? Можете объяснить своими словами?
989209
#388 #989207
Анон, помоги разобраться в ошибках. Есть такой код: https://ideone.com/Mq06WN

Функция check принимает ссылку на строку с информацией об исключении. Операторы ++ и -- вызывают ее в самом начале. При компиляции этих операторов возникла ошибка "Нелья преобразовать const char * в std::string&", связанная с передачей ASCII-строки. Чтобы избавиться от этой ошибки, пришлось явно создавать объект std::string. Почему возникла эта ошибка?
989214989331
#389 #989209
>>989157

>Использует ли тут кто Makefile?


Я.

> Я что-то ни черта понять не могу, что делают шаблонных правила? Можете объяснить своими словами?


Ну работают по шаблону)))00

В большинстве случаев лезть в шаблонные правила не нужно, они и так есть неявно. Достаточно переопределить всякие CPPFLAGS, CXXFLAGS, LDLIBS и указать зависимости бинарников от объектных файлов. А остальные зависимости находить с помощью компилятора и подключать *.d-файлы.

Ах, да. Самое главное — не забыть написать
LINK.o=$(LINK.cc)
#390 #989214
>>989207

>"Нелья преобразовать const char * в std::string&"


Каждый божий день такой вопрос, блеать.
Потому что неконстантные ссылки не биндятся к временным объектам.

> Чтобы избавиться от этой ошибки, пришлось явно создавать объект std::string


Если компилятор пропустил что у тебя в 15-й строке, то это значит, что у тебя MSVC.
8 Кб, 370x396
1 Кб, 305x122
#391 #989248
>>979476 (OP)
Сап
Нужно заменить первый столбец матрицы "x" на столбец матрицы "у",выполнить функцию, вернуть все обратно, заменить второй столбец, функцию и все эти действия до конца матрицы "x".
Как заменить конкретный столбец? А то у меня вообще все заменяются
https://pastebin.com/C3D8yjeP
989269989275989323
#392 #989255
>>979476 (OP)
За сколько времени можно вкатитсья в кресты, если буду хуярить по 4-5 часов в день?
989258
#393 #989258
>>989255
Зависит от того, чем раньше занимался и для чего хочешь использовать C++
989299
#394 #989269
989271
#395 #989271
>>989269
Это не лаба.
А смысл тогда этих тредов? Вверху один срач, и я не думаю, что мой вопрос требует много времени для ответа более опытных кодеров.
989275
#396 #989275
>>989271
>>989248
Двумерный массив - это может быть указатель на массив чисел, он же двойной указатель он же указатель на массив указателей, каждый из которых является адресом первого элемента массива.
Короче, тебе надо сделать что то типа такого:
for (auto i = 0;i<2;i++)
X=Y;//Или Y[0], если у тебя Y - не одномерный массив, а двумерный.
989277989279989283
#397 #989277
>>989275
проебался. в цикле X конечно же.
#398 #989279
>>989275
Ах блять, разметка. В цикле X квадратная скобочка открывается))) i квадратная скопочка закриваеться))0.
#399 #989283
>>989275
Спасибо, вот что получилось, если интересно.
https://pastebin.com/U36eqSWY
#400 #989299
>>989258
Ничем вкатываюсь с нуля. Пока правда не думал чем буду заниматься. Хотел с лаб начать, потом уже определиться что хочу на нем делать.
989306989327
#401 #989306
>>989299

>с лаб


Щас местный контингент тебя нахуй пошлет.
989319
#402 #989319
>>989306
А с чего тогда лучше начать?
989330
#403 #989322
>>989146
STL - это такая вещь, которую, грубо говоря, можно хоть из другого компилятора взять. Если есть компилятор, есть и STL.
989368
7 Кб, 346x392
5 Кб, 584x163
25 Кб, 807x508
4 Кб, 398x145
#404 #989323
>>989248
Бляя, все через пизду, еще один тупой вопрос, не ругайте. Замена работает правильно но ебучий детерминант считается правильно только для первой замены, дальше все по пизде едет.
При втором вызове функции det_x присваивается значение первого детерминанта, а не единица, как исправить?
989332
#405 #989325
Майки добавили модули!
989342
#406 #989327
>>989299
Имхо, учить плюсы с нуля плохая идея. Я сам начинал в универе с плюсов, потом продолжил на С#, и только потом совсем недавно вернулся на кресты. Тебе тоже посоветую начать с шарпа, потому что на шарпе ты сразу же будешь учиться именно программировать, а не ебать мозги с особенностями синтаксиса и компиляции крестов. А потом, когда на шарпе разберешься с ООП, паттернами программирования, многопоточностью/асинхронность, сетевым программированием и почувствуешь, что шарпа тебе недостаточно для твоих целей, тогда можешь осваивать синтаксис и тонкости крестов. А так, бросясь с нуля сразу в кресты, ты только усложнишь своё обучение программированию и повысишь риск того, что тебе оно надоест/станет слишком сложным для освоения.

Вообще, шарп тоже неплохой язык и на нем можно делать деньги, правда делают на нём в основном не то, что на крестах.
989362989417989434
#407 #989330
>>989319
Ну с лаб и начинай.
Есть много литературы по плюсам с теорией и самостоятельными заданиями, их и решай
#408 #989331
>>989207
Потому что "строка" - это куча символов где-то с нулём в конце, а std::string - объект известного размера, и компилятор не обязан создавать string из "строки" (ака строчный литерал).
989771
#409 #989332
>>989323
Вот мой полный говнокод
https://pastebin.com/TSsnwiXs
#411 #989343
>>989342
a, ok.
#412 #989362
>>989327
Вот тут мнения почему-то расходятся. Одни говорят, что надо с чего-то сложного начинать типа крестов. Другие наоборот - с простого.
989372
#413 #989368
>>989322
Имелась в виду не только библиотека шаблонов контейнеров, а вообще вся плюсовая (C++11 хотя бы) библиотека: <thread>, <atomic>, <chrono> и т. д.
https://developer.android.com/ndk/guides/cpp-support.html
Тут, например, про LLVM libc++ они пишут, что она у них нихрена не стабильная. И вообще предлагают выбирать из нескольких плюсовых библиотек. Значит у всех них, вероятно, есть какие-то проблемы, иначе они бы написали "юзайте вот эту библиотеку и всё будет нормально".
#414 #989372
>>989362

>Одни говорят, что надо с чего-то сложного начинать типа крестов.


Покажи мне эту суку.
989376
#415 #989376
>>989372
Это я :3
989460
#416 #989417
>>989327
Начинать программировать с ооп макарон и тонны ключевых слов? Пускай учит Perl/Python
#417 #989434
>>989327
Учу плюсы с нового года (медленно и неторопливо), все никак понять не могу, почему кодеры используют char* вместо string?
#418 #989460
>>989376
Головка от хуя.
>>989434
ЕМНИП, потому, что, если надо передать часть строки, надо копировать её. Олсо, некоторым больше нравится набор str*(), чем методы string, а результат всё равно один - байтоёбство и хорошая скорость.

В C++17 завезли string view, вот тут и заживём (что мешало сделать const string-конструкторы, которые ничего не меняют?).
#419 #989462
>>989434
Тому что стринг это не базвый тип. Не у всех подключено. Даже если ты в своем проектике и пользуешься каким-либо библиотечным стрингом, всеравно любые связи с другими либами будут через чар указатель, тошо каждый мудак мечтает написать свою реализацию стринги.
989467
#420 #989465
>>989434
Без надобности тратится процессорное время и память на создание и удаление объекта string.
#421 #989467
>>989462

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


Из чего делать связи со статическими либами - пофигу (хоть через std::set, хоть через vector, хоть через аллаха), а вот с динамическими могут быть проблемы.
#422 #989522
здравствуйте, посоветуйте как мне научиться создавать рекурсивные функции для расчета всяких сложных вещей типа полинома Ньютона когда там одно на другое накладывается?
989539989587989611
#423 #989529
>>989434
обратная совместимость с C.
#424 #989539
>>989522
нахуй иди пёс
989603
#425 #989587
>>989522
С такой прямотой тебе секс никогда не обломится.
989603
#426 #989603
>>989539
неверно, пошел ТЫ
>>989587
обломится, я знаю, это тебе он не обломится

но все же помощь с пониманием рекурсии и формул ньютона была бы замечательной
989619
#427 #989611
>>989522
Так рекурсия или полиномы? Судя по всему, нет даже базовых навыков? Сходи на Степик, найди курс Шеня. Через месяц инварианты начнёшь видеть даже в небе.
Ну или Кормена почитай, например.
989654
#428 #989619
>>989603

>была бы замечательной


Это верно.
Жаль что ты её не получишь.
#429 #989654
>>989611
у меня есть базовое понимание рекурсии, но я не знаю как превратить полином в рекурсию
989685
#430 #989668
Как создать load-time DLL в visual studio? Проект win32 → статическая библиотека, это оно? Формат у load-time .Lib или тоже .dll должен быть? И как её потом в приложение добавить? С runtime dll проще - просто в коде вызываешь WinAPI'шный LoadLibrary или аналог на любой другой ОСи указываешь путь к файлу .dll, а с run-time что? На msdn для load-time только описание, а для runtime описание и пример.
989688
#431 #989685
>>989654
Я бы тебе даже ответил, но я не знаю, что ты спрашиваешь. Начни с википедии.
#432 #989688
>>989668
Библиотека может быть статической и динамической. Динамическая библиотека может быть прописана в зависимостях PE, а может подгружаться кодом.

Для того, чтобы динама подгрузилась сама, тебе не нужно ничего делать в коде.
http://stackoverflow.com/questions/32562242/static-and-dynamic-linking-in-visual-studio
Дальше сам гугли.
#433 #989746
Когда код C++ компилируется, какие данные об именах можно найти в исполняемом файле в машинном коде? Есть ли там имена классов и их членов, переменных, функций, пространств имён, структур и их членов? Имена исходных файлов и хэдеров?
989748
#434 #989748
>>989746
Только если компилируешь с дебуг-информацией.
989753
#435 #989753
>>989748
Это параметр на картинке?
С одним из параметров есть информация об именах всего мною перечисленная, а при другом - вообще никакой информации?
989754989757
37 Кб, 844x603
#436 #989754
>>989753
Картинку забыл, блять.
#437 #989757
>>989753
Информацию о том, что ты использовал, можно выудить косвенно, но намеренно вписывать её, если вот эта шняга выключена, компилятор не будет.
989760
#438 #989760
>>989757
Я спрашиваю, потому что читал про использование уточнение декларации extern "C" { }, но не особо въехал в причины необходимости. На msdn'е что то говорится, что компилятор C++ имена функций и переменных являются не то виртуальными не то еще какими то, а в C, мол, такого нет, и чтоб C мог подхватывать функции из хэдеров C++ нужно их вот так объявлять. Так во что или как тогда компилируются имена переменных и функций в крестах и на си?
989762989770989775
#439 #989762
>>989760
что компилятор C++ имена функций и переменных делает не то виртуальными, не то еще какими*
#440 #989770
>>989760
Так бы и сказал, что либу пишешь. В выводе компилятора будут все extern-переменные с именами и все extern-функции с именами. С extern C они могут быть использованы программой, собранной любым компилятором (аргументы не включены в описание процедур, вроде), без него - только с тем компилятором, который шифрует имена таким же образом (гугли name mangling, это кодирование аргументов функций).

В статических либах это неважно.
989791
#441 #989771
>>989331

>и компилятор не обязан создавать string из "строки" (ака строчный литерал).


Обязан, см. 5-й конструктор http://en.cppreference.com/w/cpp/string/basic_string/basic_string
Зачем ты лезешь с умозрительными рассуждениями? Проследуй в ньюфаг-тред.
989773
#442 #989772
Типы возвращаемых значений тоже включены в код, вроде. Это всё нужно для overload-ов и аргументов-тимплейтов.
989774
#443 #989773
>>989771
Тупой ебанат. Прочти сообщение, на которое я отвечал - чувак хочет передавать строчный литерал вместо std::string без создания std::string.

Нассал тебе в ушко.
989778
#444 #989774
>>989772
overload-ов по возвращаемому значению в C++ нет.
#445 #989775
>>989760
Речь видимо идёт о name mangling. Смотри, вот тебе пример на крестах ( https://godbolt.org/g/A1D5Bp ):

int add(int x, int y) { return x + y; }
int add(int x, int y, int z) { return x + y + z; }

Эти функции не могут храниться под одинаковыми именами. Поэтому компилятор генерирует функции с именами, в которых содержится дополнительная информация о типе аргументов например. Но сишка-то об этом не знает, в сишке mangling'а нет, так что для сишки нужно объявлять без mangling'а.

https://en.wikipedia.org/wiki/Name_mangling#C.2B.2B
989791
#446 #989778
>>989773
Тупой ебанат. Компилятор создаёт временный std::string, если ты передашь const char[N] в месте аргумента std::string.

А теперь вернись в php-тред.
#447 #989791
>>989775
>>989770
Благодарю, разобрался. Да, mangling.
15 Кб, 200x267
#448 #989956
>>979476 (OP)
Посоны, дайте наиболее правильный и простой пример заполнения динамического массива с задаваемой пользователем размерностью рандомными ДЕЙСТВИТЕЛЬНЫМИ числами.
989958989976990083
#449 #989958
>>989956
С каким распределением?
989965990000
#450 #989965
989967989998
#451 #989967
>>989965
Идиот, блядь.
#452 #989976
>>989956

>ДЕЙСТВИТЕЛЬНЫМИ числами


Современная вычислительная техника все еще находится на приблизительно уровне каменного века, и работать с действительными числами не умеет. Еще даже вроде 128-битных регистров нет. Жди появления процессоров с бесконечным размером регистров.
#453 #989998
>>989965
KEK
Создаёшь указатель
float* floatArray = new float[n]
на массив чисел типа float (или double для большей точности). n - переменная, определяемая пользователем, необязательно константная. А если хочешь поведения как у vector, но создавай структуру-обёртку типа
struct myVector<T>
{
}
и определяй в нём методы push, pop, reserve. Думаю, в STL'овских векторах там либо те же new-delete, либо через WinAPI VirtualAlloc какой нибудь.
#454 #990000
>>989958
А на самом деле, rand() какое распределение имеет?
990002990083
#455 #990002
>>990000

> 2k17


> rand()

990140
#456 #990067
Помогите, пожалуйста, нюфане.
Как правильно иницировать цикл от нажатия определенной клавиши до нажатия другой?
Если я допустим делаю
char y = getch();
while (y = 'y'){}
То как я смогу изменить значение y, не заставляя цикл остановиться?
990073990077990083
#457 #990073
>>990067

>getch


Ололо.
#458 #990077
990080
#459 #990080
>>990077
Но он же начинает работу, когда нажата любая кнопка, а мне определенная нужна.
990081
#460 #990081
>>990080
а ты ебани while (kbhit()=='y') или VK_Y, что он там возвращает
#461 #990083
>>990000
>>989956
http://en.cppreference.com/w/cpp/numeric/random/
>>990067

>То как я смогу изменить значение y, не заставляя цикл остановиться?


Ты либо хочешь бесконечный цикл, либо ты перепутал = с ==, либо тебе нужно сохранять y во вторую переменную, менять и восстанавливать в конце тела цикла из копии.
990086990093
#463 #990089
990091
#465 #990093
>>990083
Как я могу в цикле изменить значение у, не заставляя его остановиться.
Ведь если я сделаю
char y = getch();
while(y == 'y'){
/*/
y = getch();}
он выполнит цикл однажды, а затем будет ждать другого нажатия кнопки.
990456
#466 #990094
>>990086
Убери слеш последний в адресе.
990095
#467 #990095
>>990094
Давно убрал. Просто я люблю тыкать людей в их незначительные ошибки.
#468 #990140
>>990002
А что модно в 2к17?
#469 #990147
>>990140
Дело не в моде, а в гарантиях.
990367
#471 #990178

> std::mt19937 mt(time(NULL));


В голос.

Не слушай этого >>990166 идиота.
990182990367
142 Кб, 1366x768
#472 #990182
>>990178
Пожалуйста, скажите это же пузырек?
#473 #990184
>>990182
Не скажу.
#474 #990189
>>990182
Под этой плашкой я приравниваю i к 0
990191990677990717
#475 #990191
>>990189
Всем пофиг
990193
#476 #990193
>>990191
Мне тожея пришел повниманиеблядствовать
#477 #990296
990367
#478 #990297
>>990182
Бля почисти интерфейс и настрой подсветку
#479 #990330
>>990182
нет
#480 #990367
>>990147
>>990166
>>990296
>>990178
Так и что в итоге лучше rand()?
990387990456
#481 #990387
>>990367
Тебя это ебать не должно.
990417
#482 #990417
>>990387
Почему?
#483 #990427
Как в map в качестве значения использовтаь массив? Как объявить?
990428990429990456
#484 #990428
>>990427
Тип и две звёздочки
#485 #990429
>>990427
Используй std::array
#486 #990451
Можно ли в Notepad++ сделать так, чтобы в списке функций класса (по кнопке "список функций") были также конструкторы и деструкторы класса?
#487 #990456
>>990093
Порядок изложения вопроса - пиздец. Тебе не переменную менять нужно, тебе нужно асинхронно читать из stdin. Нет способа для того, чтобы посмотреть, есть в stdin новые символы или нет. stdin - это не интерактивная сущность, у него есть только два состояния: eof и "щас прочитай что-нибудь, и если появится eof, я те скажу". Для интерактивной работы с клавиатурой нужны другие инструменты, и для того, чтобы сделать то, что ты хочешь, и именно через stdin, где-то в этом инструменте должна быть асинхронность (два потока - один main, другой читает).
>>990140>>990367
В глазки любишься? Посмотри все овтеты на свои посты.
>>990182
Родина дала тебе std::swap. Олсо, за один проход пузырёк не работает, так что нет.
>>990427
std::array - его можно использовать везде, где ты можешь использовать сишный массив.
990677
#488 #990670
Посоветуйте хороший мануал по работе с MMF на c++
#489 #990677
>>990182
>>990456
Это чистый СИ, в стандартных библиотеках нет Swap'a. А проход не один, после каждого выполнения условия счётчик обнуляется >>990189
990717990749
#490 #990715
Помогите, плез, с Qt и SQL.
Вообще, проблема, кажется, в tableView...
Вылетает на
"
ui->tableView->setModel(model);
ui->tableView->show();
"
https://pastebin.com/NpNtPs2b
Вот исходники
990749990750990852
#491 #990717
>>990677

> проход не один, после каждого выполнения условия счётчик обнуляется >>990189


Похоже на сортировку выбором
#492 #990749
>>990677

>Это чистый СИ,


Это крестотред. Очень приятно, чаю хотите?
>>990715
Всё-таки, на какой из двух?
990765
#493 #990750
>>990715
И что такое ui_dialog? Самое главно ты не показал.
990765
#494 #990765
>>990750
Не понял вопроса.
Форма и класс под нее, по сути, автосгенерированы QtCreator'ом
>>990749
На setmodel вылет.
990776
#495 #990776
>>990765
Ага, так этот код не запустить без кода, который по твоей форме сгенерировался.
990813
#496 #990812
>>988390
Что за цветовая схема? Поделись, пожалйста
#497 #990813
>>990776
Тогда можно потелепатировать: как сделать в QtC такую форму, с которой программа будет вылетать?
990959
#498 #990852
>>990715

>private Ui::Dialog


Зачем наследовать сгенерированный класс? Никогда такого не видел, он должен быть полем в классе (указатель на не существующий в хедере тип), а "ui_dialog.h" подключается в cpp файле. setupUi(this); вызывается в самом начале конструктора.
Если что-то другое сегфолится - запускай дебаггер и смотри где проблема.
990959
#499 #990959
>>990852
>>990813
https://yadi.sk/d/mFpUP-fP3JA3eW

Вот файл проекта. Наследование прописалось автоматически при , опять же, создании формы в QtC
#500 #991168
Делаю тестовое задание. Считается ли std::pair контейнером?
991188991192
#501 #991188
>>991168
Если тебе на мейлаче скажут, что нет, а работодатель скажет, что да - будешь в этот тред ссылаться?
#503 #991193
Где найти последнюю версию стандарта плюсового в pdf, бесплатно, без регистрации и смс?
991200
#504 #991200
>>991193
В гугле и на рутрекере.
991326
20 Кб, 734x368
#505 #991326
>>991200
Такая хуйня вместо стандарта пойдёт?
991344
#506 #991344
>>991326
Подойдёт для 99,999% применений.
Олсо http://eel.is/c++draft/ - драфт 2017го.
#507 #991492
Сап. Вот у нас есть допустим int x = 4; то есть обычная переменная. И есть ссылка const int &ref = x. Всегда думал, что const у ссылки означает только, что через данную ссылку изменять то, на что она ссылается, не получится. В то же время, если x поменяется, x = 10, ref должна тоже быть 10, так как ссылается на x. Но вот один коллега утверждает, что ссылки на константу в некоторых случаях могут "оптимизироваться", то есть не обновляться от изменения переменной, на которую ссылаются. Я вот думаю, что это чушь, никогда не встречал упоминаний о таком поведении и ни разу не сталкивался на практике, но на всякий случай, ткните носом в учебник/стандарт, где написано что такого действительно не может быть.
991694991752991913
#508 #991694
>>991492
Если у тебя есть два потока, которые, для примера, должны выполняться на разных ядрах процессора, то вполне может сложиться ситуация такая:
на первом ядре:
1. значение х считывается из памяти
2. что-то делается со значением х
на втором ядре (и втором потоке соответственно):
1. переменная х изменяется
2. что-то еще
Так вот, синхронность операций между потоками не оговорена, поэтому первый поток может считать устаревшее значение, даже если второй поток уже изменил его, потому что первый поток на своем первом ядре полезет в горячую память кэша, не промахнется при этом и увидит, что там значение, скажем 2. А второй поток уже в тот момент времени записал в ту же ячейку памяти значение, скажем 3. Так вот до тех пор, пока область кэша, где хренится х не инвалидирована, каждое ядро будет видеть такое значение х, которое было получено при предварительной выборке.
Для этих дел уже издревле придумали атомарные операции. Но с "небольшим" промедлением они попали в 11 стандарт.
991752
#509 #991752
>>991492
А своего воображаемого коллегу ты не можешь спросить про то, на чём он основывает свой бред?
>>991694
Это не специфично для ссылок.
991809
#510 #991809
>>991752
Любой объект можно хранить по ссылке. Тот же указатель только со слегка измененной семантикой.
Ничто не мешает тебе сделать такое, к примеру:

class A {
public:
A(int &x) : _x(x) { }
private:
int &_x;
};
#511 #991913
>>991492
Конкретно ссылка не может не "обновиться", потому что ссылка реализуется через указатель. Но в некоторых ограниченых случаях компилятор действительно может соптимизировать и закешировать значение переменной (в регистре процессора). Для таких случаев есть ключевое слово volatile которое запрещает кеширование. Но это касается переменных вообще всех, а не именно костантных ссылок. Очень маловероятно что константные ссылки как-то еще более агрессивно оптимизируются, так как это будет приводить к слишком не предсказуемым результатам, причем в и так изначально очень ошибконебезопасной ситуации (многопоточность с разделяемым состоянием).
#512 #991937
Как можно очистить массив произвольных элементов без лишних затрат на выделение памяти?
991987
#513 #991984
Ананасы, как в qt влепить поверх виджета анимированный кружок Ну типа как в винде, когда что-то подгружается такая залупа крутится?
991989
#514 #991987
>>991937
delete [] arrayName;
#515 #991989
>>991984
Нарисуй макет крутяшки, в ФШ или еще где сотри весь фон (шоб прозрачно всё было, кроме рисунка), потом налепи на canvas/image и крути его изменением угла наклона
50 Кб, 1160x573
42 Кб, 1247x478
#516 #992000
блять. я просто добавил второй проект в решение, добавил в первый проект ссылку на второй, потом удалил ссылку а затем и весь проект. теперь я вижу пикрелейтед. что за хуйня и как это исправить?
992003
#517 #992003
>>992000
всё, отбой. нашел решение.
992247
#518 #992247
>>992003
Мы очень за тебя рады.
19 Кб, 1109x215
#519 #992317
Объясните мне, зачем сишники кастуют результат всяких системных функций, если не присваиваете значение?
#520 #992357
Я собрался делать свой простой ЯП на С++, который будет включть строки, числа, if/else, for, списоки, работа с http, компиляция в бинарник. КАКИЕ ПОДВОДНЫЕ? Что нужно изучить?
992384
#521 #992366
Читаю в цикле символы из файле с помощью get (ifstream), но упираюсь в нулевой байт и зацикливаюсь, почему get не переходит на новую строку а проскакивает её неизвестно куда?
992373
#522 #992373
>>992366
Ничего не понятно.
992379
#523 #992379
>>992373
В общем как мне посимвольно считывать текстовый файл? Функция get из библиотеки ifstream упирается в конец первой строки не переходя на новые строки.
992382
#525 #992384
>>992357
Гугли Ахо, Ульман Компиляторы. Принципы, технологии и инструменты
#526 #992431
Панове, смотрите, функция WriteConsoleOutputA пишет в сосноле системной кодировкой с кириллицей. Как сделать так, чтобы она писала cp850? Пробовал SetConsoleOutputCP и SetConsoleCP - ничего не меняется, что бы я там ни ставил - все равно кириллица дефолтная.
#527 #992439
А ты там вручную в main не локаль не устанавливаешь на LC_ALL, "russian"? И вообще, посмотри что возвращает SetConsoleOutputCP. Если 0 - выведи/посмотри в дебаге что выдаст GetLastError()
992452
#528 #992452
>>992439
Не устанавливаю никакие локали. Пробовал даже английскую ставить специально - хуй. Проверял, и SetConsoleOutputCP, и SetConsoleCP обе возвращают тру. Пробовал проверять кодировку GetConsoleCP, она говорит, что все норм и кодировка действительно 850.
992464992470
#529 #992464
>>992452
Попробуй чисто для прикола создать буфер, заменить им текущий, а для оригинального - закрыть хэндл и удалить, и уже на новом буфере воткнуть новую кодировку.
#530 #992470
>>992452
Это зашитый текст в исходниках неправильно выводится (попробуй сменить кодировку исходников)? А если считать строку и вывести?
992496
7 Кб, 642x296
#531 #992496
>>992470
Короче, вот код:

[CODE]void main(void)
{
HANDLE wHnd = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCP(850);
SetConsoleOutputCP(850);
CHAR_INFO consoleBuffer [256];
for(int i = 0; i < 256; i++)
{
consoleBuffer.Char.AsciiChar = i;
consoleBuffer.Attributes = 15;
}
COORD charBufSize = {64, 4};
COORD characterPos = {0, 0};
SMALL_RECT writeArea = {0, 0, 64, 4};

WriteConsoleOutputA(wHnd, consoleBuffer, charBufSize, characterPos, &writeArea);
COORD cursorPos = {0, 4};
SetConsoleCursorPosition(wHnd, cursorPos);

printf("%d\n",GetConsoleCP());
printf("%d\n",GetConsoleOutputCP());
char str[80];
scanf("%79s", str);
printf("%s\n", str);
system("pause");
}[/CODE]

Пикрелейтед - результат его работы. Символы кириллицы при печати отображаются вопросами, но через WriteConsoleOutputA настойчиво печатаются именно они, какая бы кодировка не стояла. Пробовал даже греческую ставить - хуй там, кириллица.
7 Кб, 642x296
#531 #992496
>>992470
Короче, вот код:

[CODE]void main(void)
{
HANDLE wHnd = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCP(850);
SetConsoleOutputCP(850);
CHAR_INFO consoleBuffer [256];
for(int i = 0; i < 256; i++)
{
consoleBuffer.Char.AsciiChar = i;
consoleBuffer.Attributes = 15;
}
COORD charBufSize = {64, 4};
COORD characterPos = {0, 0};
SMALL_RECT writeArea = {0, 0, 64, 4};

WriteConsoleOutputA(wHnd, consoleBuffer, charBufSize, characterPos, &writeArea);
COORD cursorPos = {0, 4};
SetConsoleCursorPosition(wHnd, cursorPos);

printf("%d\n",GetConsoleCP());
printf("%d\n",GetConsoleOutputCP());
char str[80];
scanf("%79s", str);
printf("%s\n", str);
system("pause");
}[/CODE]

Пикрелейтед - результат его работы. Символы кириллицы при печати отображаются вопросами, но через WriteConsoleOutputA настойчиво печатаются именно они, какая бы кодировка не стояла. Пробовал даже греческую ставить - хуй там, кириллица.
992565992854993063
#532 #992565
>>992496
setlocale(LC_ALL, "Russian");
992756
#533 #992756
>>992565
И что это должно было поменять?
#534 #992854
>>992496
Что будет, если выводить коды символов а не сами символы (выводи вместо символов числа, проще говоря). И второе, какого хуя вонючий WinAPI делает в треде про кресты, это ж ЦЭ!
992901
#535 #992901
>>992854
Тогда он выводит числа с 0 по 127 по порядку, затем идет -128, -127, -126 и так до -1. При любой кодировке.
43 Кб, 1281x444
#536 #993063
>>992496
У меня все норм(кроме ру ввода). Зачем тебе 850ср если есть юникод?
993099993342
#537 #993099
>>993063
Ну вот почему у тебя норм, а у меня - нет? Я это хочу понять. В гугле вообще инфы нет.
993141
#538 #993141
>>993099
Попробуй может шрифт в консоли поменять
993327993342
#539 #993200
какой смысл сидеть на qt если вакансии практически нет
993220
#540 #993220
>>993200
Ну вообще на крестах нет смысла сидеть, если хочешь какой-то бабос получать.
#541 #993327
>>993141
как?
#542 #993342
>>993141
Действительно, после смены шрифта работает. Только в других шрифтах первые символы, которые заменяют непечатные (☺☻♥♦♣♠ и тд) отображаются квадратами. Какой шрифт у этого >>993063 ?
993369
#543 #993369
>>993342
Consolas, похоже
#544 #993448
Перекат >>993446 (OP)
#545 #998382
>>988927

>Подсветка илитная.


У нее название есть?
998618
#546 #998618
>>998382
Вангую что-то из base16
#547 #1000432
Хаюхай

Такой вопрос: Почему для инстанцированных классов создаются только те методы, которые были использованы?
Тред утонул или удален.
Это копия, сохраненная 14 июня 2017 года.

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

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