Задать вопрос
  • Почему я могу изменять состояние объекта хранящийся в const std::unique_ptr и const std::shared_ptr?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Можно сделать указатель на const. Вот этот ваш const, он относится к самому указателю, его нельзя менять (в смысле, на другой адрес). Но после разыменовывания получается не константная ссылка. Вот оно в документации:
    typename std::add_lvalue_reference<T>::type operator*() const


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

    Так что если вы хотите запретить менять объект, то можно сделать так:
    void foo(const std::unique_ptr<const int>& ptr) {
        if (ptr) {
            *ptr += 5; // Ошибка компиляции.
            std::cout << *ptr;
        }
    }
    
    int main() {
        std::unique_ptr<const int> ptr = std::make_unique<const int>(5);
        foo(ptr);
    }


    Правда, придется писать много лишнего кода, если будете передавать неконстантный объект внутрь функции, которая хочет ссылку на константный.

    Но вообще, обычно нет смысла передавать unique_ptr по ссылке. Можно передать по ссылке сам объект, все равно владение в функцию не передается же. И уже там можно навешивать const, если надо. Или, если передавать просто unique_ptr, без ссылки, то даже лишнего кода не надо для обработки const:
    void foo(const std::unique_ptr<const int> ptr) {
    }
    
    int main() {
        std::unique_ptr<int> ptr = std::make_unique<int>(5);
        foo(std::move(ptr));
    }
    Ответ написан
    3 комментария
  • Можно ли использовать не парные Acquire/Release порядки памяти?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    могу ли я использовать Relaxed в 3?

    Если тебе не важно то, что ты при этом можешь пропустить изменение head, то можешь. Но тебе должно быть важно, потому что это же единственная загрузка head в producer_maybe_push().
    Ответ написан
    7 комментариев
  • Как ждать в диапазоне атомарных чисел?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    То, что вы описали в комментариях, это буквально блокировка чтения-записи. Функтор читает данные и может выполнятся параллельно несколько раз, но запись может быть только одна и она блокирует все чтения. Решение описано в википедии: 2 мьютекса, один счетчик. Атомиков не надо.
    Ответ написан
    Комментировать
  • Есть ли прога для фонового доступа к удаленному компьютеру?

    @rPman
    Побуду душнилой.

    При использовании серверных версий windows (того, куда ты хочешь удаленно подключаться), штатный инструмент удаленного управления RDP позволяет подключиться к новому сеансу а администратору подключаться к чужому (mstsc /shadown), так как это штатный механизм, никаких иконок в трее не будет, но будет запрос подтверждения в момент подключения
    Ответ написан
    4 комментария
  • Как с системного SSD диска, переместить нужные файлы на другой?

    @rPman
    Настоятельно рекомендую не пользоваться проводником (майкрософт это пример самой богатой компании мира, не способной сделать адекватный софт за многие годы своего существования), а использовать какой-нибудь адекватный файловый менеджер, например Total Commander или Far Commander

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

    p.s. если пользователь исходной операционной системы в свойствах файла указал флаг - зашифрован (штатная фича ntfs), то прочитать этот файл не получится никак, нужен пароль к аккаунту этого пользователя.
    Ответ написан
    Комментировать
  • От чего зависит время пинга?

    @Akina
    Сетевой и системный админ, SQL-программист.
    На самом деле время пинга складывается из нескольких составляющих. Основные две из них:

    - время, которое тратится промежуточными узлами на передачу до пингуемого узла и обратно;
    - время, которое пингуемый узел тратит на обработку запроса и формирование/отправку ответа.

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

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

    А на скорость передачи не заморачивайтесь. Пакетики в пинге короткие, частота передачи высокая, так что время передачи пакета от узла к узлу по медному или оптическому кабелю в подавляющем большинстве случаев просто меньше точности измерения времени.
    Ответ написан
    Комментировать
  • Почему длина long int 4 байта?

    @Mercury13
    Программист на «си с крестами» и не только
    Это особенность конкретного ABI (двоичного интерфейса).

    16-битные машины: 1/2/2/4/ (char/short/int/long/long long)
    Win32/64, Linux32: 1/2/4/4/8
    Linux64: 1/2/4/8/8

    И догадываюсь, почему так — это оказался лучший способ пофиксить некоторые старые API Си: таймеры (эпоха Unix, 0=1 янв 1970 00:00) и файлы.
    Ответ написан
    Комментировать
  • Откуда у дисков в windows взялось двоеточие и зачем оно нужно?

    @rPman
    Самое великое историческое легаси, которое тянется со времен CP/M (который был до MS DOS) да и кучи тогдашних ос типа apple dos/Commodore c64/ , в 1970-ых
    Там не было каталогов но были устройства, и файлы именовались "буква устройства" : "имя файла" ну а в DOS добавили каталоги через "\"

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

    От туда же и учет больших и маленьких букв в файловой системе как одинаковых, потому что в тогдашнем fat не было длинных имен (11 символов на имя), и эту кстати лицензионную ловушку майкрософт заложили уже в win95, благодаря которой надоили со всего мира миллиарды.
    Ответ написан
    1 комментарий
  • Почему задерживаются TCP пакеты при печати?

    NeiroNx
    @NeiroNx
    Программист
    Думаю там слишком много "умного" трафика. Я бы ради эксперимента поставил роутер который отсекает весь трафик (мультикасты обязательно, так как по дефолту они умеют между сетями через роутер гулять) кроме прямых TCP 9100.
    Неизвестно какие "умности" там начали глючить после очередного обновления винды.
    Все это SSDP и Join Group по идее нафиг не нужно для печати. Оно только тормозит код прошивки принтера своим бесполезными вызовами.
    Ответ написан
    1 комментарий
  • Действительно ли это реалии рынка?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Джуны никогда не были нужны, бизнес всегда хотел зрелого спеца с боевым опытом. В последние же годы ситуация ухудшилась. Во-первых, желающих вкатиться стало очень много, что увеличило конкуренцию на входе, естественно. Во-вторых, санкции, кризис в экономике, рост ключевой ставки - всё это ещё больше снизило желание бизнеса заниматься выращиванием специалистов. В-третьих, волчистые стали накручивать опыт, наниматели увидели, что якобы годовалые стали приходить тупые, и отреагировали повышением требований к опыту. Волчистые стали накручивать ещё больше, наниматели стали дальше поднимать планку. Этот инфляционный цикл сильно обесценил и без того невостребованных новичков. К тому же, если раньше кандидатам без опыт приходилось конкурировать за место только с кандидатами без опыта, годовалым с годовалыми и т.д., то теперь все эти слои слиплись в один. Мало того, что тупо больше людей теперь дерётся за место, так ещё и есть неиллюзорный шанс неопытному попасть на собеседование сразу после трёхлетки, например, что не оставляет никаких шансов. Ну и надо понимать, что вруны только портят рынок, "взять его в руки" им не удаётся. Обманешь максимум нанимателя в лице ООО "Мир гидпроприводов", где платят ветку, заставляют овертаймить и т.п. Нормальные компании просто выписку из трудовой сверяют с резюме.
    Ответ написан
  • Как обойти ошибку создания уникального индекса?

    @Dementor
    программист, архитектор, аналитик
    Можно ли со стороны SQL это решить ? Например, с помощью скрипта SQL который бы отслеживал запись и при возникновении ошибки переименовал объект допустим ?

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

    Ошибка осталась, хотя по всем объектам дубли больше не найдены.

    Я бы на ваш месте не угадывал, а проверил бы поля из индекса IDD для таблицы dbo.SC31 - если скуль ругается, то вы точно что-то пропустили. Сделайте SELECT с GROUP BY этим полям и HAVING COUNT(*) > 1
    Ответ написан
    Комментировать
  • Как спасти SSD от гнобления со стороны ПК?

    VoidVolker
    @VoidVolker Куратор тега Windows
    Dark side eye. А у нас печеньки! А у вас?
    Вероятно диск сдох или повреждена файловая система на нём. Проверяйте, что показывает смарт и драйвер от производителя о состоянии диска. Если всё нормально - то попробуйте удалить все разделы на нём и пересоздать их заново (акронис, gparted). Если проблема останется - то скорее всего диск отправился в электронный рай.
    Ответ написан
    5 комментариев
  • Как в софтверных компаниях относятся к использованию ИИ?

    @Vitsliputsli
    Т.к. ответа на вопрос никто не дал, то
    Как в софтверных компаниях относятся к использованию ИИ?

    В нормальных компаниях всем глубоко пофиг как ты будешь выполнять задачи, главное чтобы был результат. Даже сами дадут доступ к какомунибудь внутрикомпанейскому ИИ.
    А вот сможешь ли пройти собеседование имея только навык ставить задачи ИИ, тут очень сомневаюсь.
    Ответ написан
    3 комментария
  • В чем суть логической ошибки, продемонстрированной в старинном учебнике?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    ЕСЛИ треугольник прямоугольный ТО квадрат гипотенузы равен сумме квадратов катетов
    Отсюда не следует, что
    ЕСЛИ квадрат гипотенузы равен сумме квадратов катетов ТО треугольник прямоугольный
    Правильное обратное утверждение:
    ЕСЛИ квадрат гипотенузы НЕ равен сумме квадратов катетов ТО треугольник НЕ прямоугольный

    Простейший аналог:
    ЕСЛИ животное это собака ТО у неё четыре лапы ⇏ ЕСЛИ у животного четыре лапы, ТО это собака
    ЕСЛИ животное это собака ТО у неё четыре лапы ⇒ ЕСЛИ у животного НЕ четыре лапы, ТО это НЕ собака

    Студент должен был доказать, что квадрат гипотенузы равен сумме квадратов катетов только в прямоугольных треугольниках и обосновать утверждение
    ЕСЛИ треугольник прямоугольный ТОГДА И ТОЛЬКО ТОГДА квадрат гипотенузы равен сумме квадратов катетов
    Ответ написан
    2 комментария
  • Почему зависает ноутбук Lenovo Legion 5?

    @Drno
    Либо где то железо пережато / проблема.
    Либо драйвер какой то глючит

    Мемтест еще можно прогнать.

    И тут в группе ребята хорошо разбираются, спросите
    Ответ написан
    Комментировать
  • Правильно понимаю из статьи про умные указатели?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Похоже на ошибку оформления. Это должен быть вызов функции. В тексте выше даже написано про вызов.

    Тут автор считает, что сначала выполнится new A(), потом new B(), потом конструктор unique_ptr. Если исключение бросит B(), то действительно будет утечка памяти. Объект A, полученный через new умрет еще до оборачивания в unique_ptr. Такой сырой указатель автоматически не удалится.

    Такая последовательность невозможна c С++17:
    In a function call, value computations and side effects of the initialization of every parameter are indeterminately sequenced with respect to value computations and side effects of any other parameter.


    Evaluations of A and B are indeterminately sequenced : they may be performed in any order but may not overlap: either A will be complete before B, or B will be complete before A. The order may be the opposite the next time the same expression is evaluated.


    Но до C++17, действительно, компилятор может перемешать вычисления аргументов как угодно.
    Ответ написан
    Комментировать
  • Как связаны TCP-сегменты и пакеты? Один сегмент состоит из нескольких пакетов или наоборот?

    @66demon666
    Сетевой админ, АТС-админ
    У TCP нет пакетов. У него есть понятие сегмент. Под словом "TCP пакет" подразумевают "IP пакет в котором содержится TCP сегмент". Это просто разные слова для обозначение единицы данных (DU) на разных уровнях OSI. В ethernet, например, единица данных это Кадр (Frame). В большинстве случаев вся необходимая порция данных помещается в один TCP сегмент. Если не помещается - он сегментируется на 2 и более кусков (сегментов). Контролируется максимальный размер сегмента параметром MSS (Max Segment Size)
    Ответ написан
    9 комментариев
  • Что лучше: static методы или функции?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Посмотрите в этот allStatic: https://github.com/openjdk/jdk/blob/496641955041c5...

    Там написано, почему используются статические методы: Почему-то авторы какого-то проекта HotSpot решили, что плодить namespac'ы плохо. Так что это вызвано соглашениями по стилю в конкретном проекте. Их право.

    Вообще говоря, польза от статических методов в том, что у них автоматически есть доступ к приватным членам класса и не надо каждую функцию помечать friend. Если у класса все методы статические и нет никаких данных, то использовать статические функции нет смысла.

    Еще логично сделать функцию членом класса, если она именно с классом работает. Например, функции фабрики.

    Кроме этого я не вижу особо причин использовать статические методы вместо функций.
    Ответ написан
    2 комментария
  • Объединенный буфер обмена у двух пк. Как это возможно?

    VoidVolker
    @VoidVolker Куратор тега Windows
    Dark side eye. А у нас печеньки! А у вас?
    Скорее всего там стоит какое-то приложение из категории шуток и приколов. Или какое-то из приложений для управления двумя машинами с одной машины типа InputDirector (программный KVM) - функционал общего буфера обмена там из коробки есть. Ну или ещё что-то. Смотрите какие сервисы и приложения запущены и общаются по сети на этих двух машинах - в любом файерволле или в нормальном менеджере процессов видны все сетевые соединения. Там сразу будет видно сетевое соединение между машинами.
    Ответ написан
    4 комментария
  • Как обойти блокировку 80 и 443 порта Ростелеком?

    iwantp1zza
    @iwantp1zza Автор вопроса
    В общем, всё решилось звонком в техподдержку РТК. Они там отключили какую-то фильтрацию портов и всё заработало. Всем спасибо за потраченное время.
    Ответ написан
    Комментировать