• Что будет с объектом если вызвать несколько раз его конструкторы?

    Вторая запись это не вызов конструктора, а оператор присваивания.

    Сначала создавасться новый временный объект через второй конструктор (т.к. конструктор является implicit, то допустимо неявное преобразование из int в CClass). Затем у первого объекта вызовется оператор присваивания с временным объектом в качестве параметра.

    В C++ без сложных манипуляций невозможно второй раз вызвать конструктор.

    Фактически ваш код эквивалентен этому:

    CClass obj(); // на самом деле так писать нельзя, это не вызов конструктора а объявление функции
    
    obj = CClass(1);
    Ответ написан
    32 комментария
  • Что значит эта строчка?

    @Mercury13
    Программист на «си с крестами» и не только
    If the most significant bit is set, the key is down, and if the least significant bit is set, the key was pressed after the previous call to GetAsyncKeyState.

    Проверка на младший бит (сокращённая запись if ((GetAsyncKeyState(VK_F1) & 1) != 0). Он означает: с предыдущего вызова GetAsyncKeyState клавиша хоть раз нажималась. С одной стороны, этот бит нерекомендуемый (работает, когда нет других программ, вызывающих GetAsyncKeyState). С другой, возможно, младший бит GetAsyncKeyState() в современной реализации Windows работает именно так, как надо (если программа неактивна, GAKS возвращает 0).

    GAKS обычно используется в играх и прочих динамичных программах; в рабочем ПО используют оконные сообщения.
    Ответ написан
    1 комментарий
  • Есть ли разница между двумя функциями?

    myjcom
    @myjcom Куратор тега C++
    не изобретайте велосипед)))
    библиотека STL
    используйте std::vector
    и std::rotate

    определение и пример
    en.cppreference.com/w/cpp/algorithm/rotate
    Ответ написан
    Комментировать
  • Почему не выводится кириллица из Си в консоль windows?

    @res2001
    Developer, ex-admin
    Если совсем просто и деревянно, то сохраните исходный код в кодировке cp866 и пересоберите.
    А если по сложному и по правильному, то учите мат.часть. Можно начать отсюда, так же посмотрите мой комментарий под статьей, в очередной раз уже лень все повторять - тут не однократно этот вопрос обсуждался. Вообще это самый распространенный вопрос у русскоязычных начинающих программистов на Си.
    Ответ написан
    3 комментария
  • Возникает ошибка Ошибка C4700 использована неинициализированная локальная переменная как исправить?

    @Mercury13
    Программист на «си с крестами» и не только
    #include "stdio.h"
    #include "stdlib.h"

    Лучше это писать в угловых скобках.

    double dr(double zb)
    {
        return zb = (rand() % 100) / (100 * 1.0);
    }

    Присваиваем параметру zb что-то, чтобы его похѣрить? Параметр будет жить до конца функции и НЕ ВЕРНЁТСЯ в вызвавшую программу (параметры передаются по копии).
    Кстати, параметр zb ни на что не используется: что бы вы ни передали туда снаружи, подпрограмма в этот параметр не посмотрит.

    printf("%lf", dr(double zb));
    На G++ не скомпилировалось. Ну, написал dr(0), благо параметр не используется ни на что.

    if (d == e)
    {
        printf("Win! your cash:%lf", winWay(a, b));

    C:\TestApps\ErrUninitLocal\main.cpp|30|warning: 'd' may be used uninitialized in this function [-Wmaybe-uninitialized]|
    А действительно, переменная d нигде никому не присваивается.

    И ещё одно. Я не знаю, как действует Visual C, но модификатор l для формата %f нужен для scanf, но не нужен для printf. Вот так-то всё это дело устроено.

    double a = winWay(a, b);
    }

    Что мы делаем? Присваиваем локальной переменной, чьё имя пересекается с более ранней переменной, чтобы её сразу же похѣрить? Она доживёт до ближайшей закрытой скобки.

    C:\TestApps\ErrUninitLocal\main.cpp|33|warning: 'a' may be used uninitialized in this function [-Wmaybe-uninitialized]|
    Тут вообще забавно работает. double a — считаем, что a определилась. = winWay(a, b) — считаем, что используется ОНА ЖЕ, а не более ранняя a. Естественно, неинициализированная.

    (аналогично с loseway)
    C:\TestApps\ErrUninitLocal\main.cpp|38|warning: 'a' may be used uninitialized in this function [-Wmaybe-uninitialized]|
    Ответ написан
    Комментировать
  • Как вернуть ссылку/указатель на элемент вектора?

    @Mercury13
    Программист на «си с крестами» и не только
    1.
    bool FindElement(const string& search, CElement*& result);

    2. CElement* FindElement(const string& search);
    Ответ написан
    1 комментарий
  • Слышали ли вы об авторизации через email?

    Такой способ ещё называют "Волшебной ссылкой". Этим способом можно войти на сайте интернет-магазина mann-ivanov-ferber.ru или medium.com, например.

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

    Минус такого решения в том, что пользователю нужно входить через почту. Но на деле для многих пользователей это менее утомительно как, например, вводить и запоминать пароль. Особенно если вы не сбрасываете сессию по таймеру, а автоматически продлеваете её TTL когда пользователь что-то делает на сайте.

    Более удобным решением (для пользователей мобильных сайтов) будет разве что генерация и отправка одноразового пароля по СМС. В таком случае пользователь сразу прочитает пароль из уведомления не переключаясь ни на какие сторонние сервисы.
    Ответ написан
    3 комментария
  • Как удалить часть строки в c++?

    @Mercury13
    Программист на «си с крестами» и не только
    Так и надо, но не хватает только одного: каким-то образом обрезать строку после всего этого.
    for (…)
      s1[i] = s1[i + s2len]
    s1.resize(s1.length() - s2len);

    Не забывайте: если длина вашей строки — это strlen, то length() в цикле вызывать запрещено!

    Да, ещё вопрос: убрать ПЕРВОЕ вхождение или ВСЕ вхождения?
    Ответ написан
  • СИ и С++. Чем они так опасны, если их использовать вместе?

    GavriKos
    @GavriKos
    Так может стоит спросить у тех людей, кто это говорил?
    Потому что язык с++ как бе включает в себя язык с. Ибо является его расширением.
    Ответ написан
    1 комментарий
  • СИ и С++. Чем они так опасны, если их использовать вместе?

    saboteur_kiev
    @saboteur_kiev Куратор тега C++
    software engineer
    Если люди, от которых вы это слышали не могут объяснить чем они опасны, то не слушайте этих людей.
    Ответ написан
    Комментировать
  • Какие стратегии повышения зарплаты существуют?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Центральный показатель для бизнеса, а следовательно и руководителей, как людей представляющих интересы этого самого бизнеса - это коэффициент возврата инвестиций (ROI). Соответственно, сотрудник должен приносить компании больше денег, чем потребляет. Естественно, что чем выше разрыв между затратами и прибылью, тем лучше, поэтому фонд оплаты труда руководитель должен держать на том минимальном уровне, который гарантирует бесперебойную работу сотрудников. Один из факторов этой бесперебойности - низкая текучка. Сотрудников терять нежелательно. И чем ценнее для компании сотрудник, чем более он профессионален и/или чем больше на него завязано, тем дороже обходится его потеря. Натурально в деньгах. Придётся затратить больше, чем обычно, денег на поддержание работы без него. Придётся затратить деньги и время (те же деньги) на поиск, найм, введение в работу, возможно, обучение нового сотрудника. При этом он может оказаться совсем неподходящих и цикл придётся повторить. Или может оказаться просто хуже прошлого и эффективность отдела снизится. Поэтому, когда сотрудник приходит просить прибавку, руководитель оценивает может ли этот сотрудник уйти или только блефует, насколько легко его будет заменить, какой урон компании будет нанесён его уходом. Потом руководитель оценивает стоимость расширения ФОТ - есть ли резервы, какой сейчас ROI, будет ли больший ROI от реинвестиции этих средств во что-то другое? Если уход сотрудника будет стоить меньше, чем увеличение ФОТа, сотруднику откажут.

    Естественно, всё описанное справедливо для случая, когда руководитель - профессиональный менеджер. А то часто на месте руководителя сидит человек руководствующийся эмоциями и мутными соображениями вычитанными в сомнительной бизнес-литературе.

    Из этого вывод, стратегия проста - увеличивайте собственный профессиональный уровень на столько, чтобы свободно менять компанию, как только вас что-то перестало устраивать.
    Ответ написан
    4 комментария
  • Как убрать помехи от реле в atmega328p (arduino) во время прерывания?

    kotomyava
    @kotomyava
    Системный администратор
    У вас обмотка реле висит прямо на ногах контроллера? Это не правильно, конечно.
    Даже очень маленькое реле имеет довольно не маленький ток срабатывания и удержания. Куда больше, чем может отдать контроллер. А также большую индукцию, которая при снятии напряжения даёт выброс.

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

    Схемы можно погуглить по запросу "подключение реле к микроконтроллеру".
    Ответ написан
    2 комментария
  • Как нарисовать на курсоре в RunTime?

    @Mercury13
    Программист на «си с крестами» и не только
    Попробуйте Brush.Color := $FF000000 or clBlue;. Велика вероятность, что механизмы работы с 32-битными изображениями тут слабоваты.
    Ответ написан
    1 комментарий
  • Как ограничить число исполняемых потоков?

    AlexanderYudakov
    @AlexanderYudakov
    C#, 1С, Android, TypeScript
    Делаете очередь заданий.
    Делаете пул из N потоков (в вашем случае 2), запускаете эти потоки.
    Каждый поток ждет поступления нового задания, забирает его из очереди и выполняет.
    По окончании работы поток не завершается, а ждет поступления следующего задания.
    Задания ставятся в очередь и забираются из очереди с блокировкой этой очереди.
    Потоки в пуле завершаются только по окончании работы приложения.
    Ответ написан
    Комментировать
  • Что за странная ошибка?

    GavriKos
    @GavriKos
    Не странная. MAXLINE везде заменится на 1000. Соответственно конструкция будет int 1000, что есть определение переменной. Имена переменных не могут начинаться с цифр.

    И так, чисто для справки:
    - не кидайте ошибки и код скриншотами - ничерта не видно
    - поставьте английский язык в IDE
    Ответ написан
    Комментировать
  • Как вступить в команду разработчиков игр?

    GavriKos
    @GavriKos Куратор тега Разработка игр
    Ответ написан
    Комментировать
  • Как сейчас создают персонажей для игр?

    @GreatRash
    Сперва скульптинг.
    Потом хай-поли модельку дублируют и из дубликата делают лоу-поли модельку. Называется этот процесс - ретопология (retopology).
    Потом из хай-поли модельки запекается карта нормалей.
    Карта нормалей натягивается на лоу-поли модельку.
    Ну а потом всё - раскраска и отдача заказчику.
    Ответ написан
    2 комментария
  • Столкнулся со странным объявлением структуры - где о таком прочитать?

    @wawa
    1) Это не C, а С++ (смотрю на тег вопроса)
    2) Число полей структуры не может быть переменным. Здесь их три: NumSrtucts, Size, Offsets.
    3) Offsets это указатель, которому в конструкторе присваивается выделенная в куче память. И размер это памяти варьируется динамически на момент вызова конструктора, но хранится эта память вне структуры, а как было сказано в куче (динамической памяти) и структура лишь хранит адрес этого участка кучи в Offsets.
    Ответ написан
    Комментировать
  • Где почитать про "боевое" использование сокетов?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Еще в 2012 году парни выжимали 1 млн соединений с 1 физического сервера: https://habrahabr.ru/post/123154/
    Даже если снизить накал на порядок и предположить что у них и нагрузка была в плане количества сообщений ничтожной - все равно получается 100 000 соединений с сервера, а это больше чем средний онлайн ААА игры.

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

    "Pubg держит 3 млн игроков" - забавно). Pubg держит 100 игроков в одной сессии и это хороший результат.
    WoT держит 20 игроков в одной сессии.
    EVE в самой большой битве было ~7500 человек, и они вводили своё фирменное замедление времени - сервер обслуживающий локацию не успевал обсчитывать математику.

    А вообще, все проекты обслуживающие большое количество людей строятся изначально исходя из возможности горизонтального масштабирования. В этом смысле сессионки вообще шикарны, изолированная на долгое время группа людей, какие-то связи за пределы группы отсутствуют, никакие серьезные потоки данных из сессии перебрасывать не нужно, целостность данных тоже пофиг по большому счету - идеальная история.
    Ответ написан
    2 комментария
  • Где почитать про "боевое" использование сокетов?

    gbg
    @gbg Куратор тега Компьютерные сети
    Любые ответы на любые вопросы
    Йон Снейдер - эффективное использование TCP/IP
    Ответ написан
    2 комментария