Задать вопрос
  • Нужно продублировать каждое третье слово в введённой строке С++. Как можно исправить мой текущий код?

    @res2001
    Mokybrow, Как-то у вас все усложнено.
    Честно говоря мне лень разбираться в вашем коде.
    Дам совет - запустите программу под отладчиком и пройдите ее по шагам, контролируя все операции. Думаю это должно вас навести на мысли где в коде ошибка.

    Почему не пользуетесь методами класса wstring? Ваш код можно сделать гораздо проще с их помощью.
    Если уж вы используете wstring, то все строковые и символьные константы должны быть с префиксом L.
    Заячем вот это делать: L"" + a Может надо просто инициализировать a пустой строкой в начале? ...
  • Как с помощью for добиться такого же результата, что и командой dir?

    @res2001
    wisgest, Из-за не стандартных символов в любом варианте могут возникнуть проблемы.
    Что, разве обычный for (или for /r или for /d) выдает имена файлов и пути с экранированными не стандартными символами? По моему, нет, хотя я не проверял. Так что проблема с нестандартными символами всплывет в любом варианте обработки таких файлов/путей в батнике.
    Решить проблему, наверное, можно, исключив из вывода dir с помощью дополнительной фильтрации все подозрительные файлы. Но, я бы не назвал это решением. Так же можно переименовывать подобные файлы/каталоги так что бы они не содержали не стандартных символов, но это надо делать не средствами cmd.
  • Член класса/структуры типа uint8_t * или int8_t *, оптимизация?

    @res2001
    floppa322, Там не обязательно не может быть this, важно, что там не может быть какого-то другого значения, отличного от того, что он прочитал при прошлом обращении к этой же памяти.
    И это он будет думать не из-за const, а из-за restrict.
    const в данном случае делает сам this константным, а не память под ним.
  • Нужно продублировать каждое третье слово в введённой строке С++. Как можно исправить мой текущий код?

    @res2001
    В чем заключается ошибка?
    Приведи пример входных данных, выходных и что должно было бы получится при нормальной работе программы.
  • Член класса/структуры типа uint8_t * или int8_t *, оптимизация?

    @res2001
    floppa322, Учитывая, что restrict в стандарте нет, то какой конкретно тип будет у this в этом случае сильно зависит от компилятора.
    const в данном примере не принципиально и никак не влияет на тему нашего обсуждения.
    Константный указатель вполне может указывать на не константный объект.
  • Член класса/структуры типа uint8_t * или int8_t *, оптимизация?

    @res2001
    floppa322, Все может быть, но в оптимизациях всегда надо тестировать до и после, иначе не понять работает ли твоя оптимизация. Так что все подобные рассуждения теоретические.
    Restrict это совсем не то что константный указатель.
    Кстати, this, является rvalue, поэтому this = something нигде и не встретишь.

    Попробуйте объявить someSelfAliasableMember из вашего последнего примера с restrictом.
  • Член класса/структуры типа uint8_t * или int8_t *, оптимизация?

    @res2001
    floppa322, Если это для вас критично, то restrict может немного добавить скорости.

    Но опять, же повторюсь, обычно нет необходимости опускаться до "оптимизации инструкций", гораздо большего эффекта можно добится оптимизируя алгоритм или структуры или архитектуру всего приложения. Даже просто оптимизиация выделений памяти может дать гораздо более существенный прирост.
  • Член класса/структуры типа uint8_t * или int8_t *, оптимизация?

    @res2001
    floppa322,
    а если у меня, например,

    Когда это происходит в пределах одной функции, то компилятор справится с этими зависимостями и оптимизирует там где можно и не оптимизирует там где нельзя.
    Но компилятор не может гарантировать, что параметры функции не ссылаются на одну область памяти, поэтому генерирует код без оптимизаций. Указывая restrict вы гарантируете компилятору от себя, что пересечений по памяти не будет и компиялтор начинает резвится как может.
    я этим просто обещаю компилятору, что именно сам this не буду менять

    restrict относится к памяти на которую ссылается указатель, а не к самому указателю.
    Так что в моем сообщении выше "закэшировать this в регистре" - не правильно. Компилятор может кешировать значение this->buffer из вашего примера, в этом случае убирается лишняя команда чтения buffer, о которой вы писали - будет использована ранее сохраненная в регистре информация.

    Тёмная материя :)
  • Член класса/структуры типа uint8_t * или int8_t *, оптимизация?

    @res2001
    floppa322, Это говорит компилятору, что других указателей, ссылающихся на ту же область памяти, что и this в функции нет. Поэтому он может уверенно закэшировать this в регистре и не перечитывать его каждый раз.
  • Почему мой вектор не работает со строками?

    @res2001
    Смесь украинского и немецкого в коде, это еще круче, чем код на русском :-)
    if(arr == nullptr){
                delete[] arr;

    arr и так nullptr, зачем вы его еще освобождаете? Для закрепления результата?
    В log() при первом вызове drauflegenZurück происходит обращение к нулевому элементу vorü. При этом память в vorü не выделена и в этом указателе содержится какое-то случайное значение. Поэтому происходит обращение к невыделенной памяти и программа падает.
    Во первых в конструкторе инициализируйте vorü = nullptr, во вторых в log() перед выводом проверяйте не равен ли указатель на массив nullptr и только после этого выводите.
  • Как через cmd и терминал удалить из папки все файлы, кроме выбранных?

    @res2001
    Damian Lewis,
    "Недопустимая попытка перехода на метку пакетного файла извне этого файла."

    Этот код точно надо запускать из батника, т.к. тут многострочник.
    Я там ошибся немного (один знак процента у переменной цикла, вместо двух), код поправил.
  • Как через cmd и терминал удалить из папки все файлы, кроме выбранных?

    @res2001
    Там вам надо еще удалить файлы размером меньше 5Мб.
    Получить размер файла можно в цикле for /f, используя модификатор для переменной цикла %%~za. Но в вашем случае проще это сделать через процедуру - в нумерованных параметрах процедуры то же работают модификаторы.
    Примерно так:
    for /f "tokens=* delims=" %%a in ('dir /b C:\Test\*') do (call:del5mb "c:\Test\%%~a")
    goto:eof
    
    :del5mb
    if %~z1 lss 5242880 (del "%~1")
    exit /b 0
  • Как через cmd и терминал удалить из папки все файлы, кроме выбранных?

    @res2001
    Damian Lewis, Я так и предполагал.
    Надо просто добавить путь c:\test к имени файла в команде удаления:
    del "c:\test\%%~a"
  • Как изолировать приложение внутри RDP сессии?

    @res2001
    Попытайтесь понять как именно программа обнаруживает, что она уже запущена.
    Вы уже выяснили, что это явно не чтение списка процессов, т.к. при переименовании exe, ничего не меняется. На самом деле это дурацкий способ и никто так не делает.
    Другие варианты: программа создает какой-то внешний именованый объект, который сама же при старте проверяет на наличие. В самом простом случае это может быть файл/каталог или ключ в реестре. Из других вариантов, например, именованные каналы ну и что там еще в винде может быть именованым. Или, например, открытый сетевой порт для прослушивания.
    Самый простой вариант, который приходит в голову - это файл, который эксклюзивно захватывается при старте, или именованный канал.

    Если получится, то, возможно, появятся идеи, как это обойти.

    Можно начать с мониторинга обращений к файловой системе и мониторинга реестра. Соответствующие утилиты есть в комплекте утилит sysinternals, который можно взять на сайте микрософт.
  • Как через cmd и терминал удалить из папки все файлы, кроме выбранных?

    @res2001
    Damian Lewis, 1. укажите полный путь к file.txt.
    2. посмотрите в каком формате dir выдает свой вывод, возможно он обрезает начало пути и соответственно, если батник не в каталоге с файлами, то файлы не найдутся.

    В общем, когда надо отвязаться от текущего каталога, нужно везде использовать полные пути.
  • Как убрать смещение символов ASCII из-за изменения разрешения окна консоли?

    @res2001
    Quark, Могу уточнить: на каждой итерации узнаете размер окна и форматируете вывод под текущие размеры, так что бы количество символов в каждой выводимой строке умещалось в оконную строку.
    Можно сделать проще - на каждой итерации принудительно задавать нужные вам размеры окна, но это так себе вариант.
  • Как через cmd и терминал удалить из папки все файлы, кроме выбранных?

    @res2001
    Damian Lewis, Эту конструкцию надо запускать из батника. Если запускать из командной строки, то нужно перед а указывать один знак процента %a, а в батнике - 2.

    Вместо del %%a, можете пока написать echo del %%a и проверьте вывод, потом echo уберете.
    Вместо %%a в команде del, можно использовать "%%~a" (вместе с кавычками), так будет корректно обрабатывать длинные имена с пробелами.
    Так же можно убрать круглые скобки вокруг команды del, но это только для случая, если в теле цикла будет только одна команда в той же строке.

    В целом все выглядит правильно для запуска из батника, но у меня по прежнему нет винды :)
  • Xeon 2244G поддерживает Регистровую память?

    @res2001
    Есть какие-то сомнения?
    Что вы понимаете под регистровой памятью?

    Вообще у всех процессоров есть регистры (регистровая память). Именно на них выполняются ВСЕ операции и только потом результаты складываются в кэш и ОЗУ. Никогда не слышал о процецессорах без регистров.