|
Asm/C++/Delphi/Py/PHP/VBA
|
||||||
Передача строки в качестве параметра07.06.2019, 16:31. Показов 8672. Ответов 66
Метки нет (Все метки)
Создаётся временный объект const std::string, конструктор которого принимает (и копирует в себя) const char*, вызывается функция test, затем объект уничтожается. Много лишних действий.Можно ли сделать так, чтобы в EXE-шнике изначально хранился объект std::string, а не создавался перед вызовом функции?p.s. В идеале – C++11, но если вариантов нет, рассмотрю что есть. p.p.s. Интересен также вариант без создания промежуточных констант, если такое возможно, потому что, понятное, дело, можно сделать const std::string text = "Hello my dear friend!\n"; и подставлять её, но это неинтересно. Да и всё равно объект создаётся динамически.
0
|
||||||
| 07.06.2019, 16:31 | |
|
Ответы с готовыми решениями:
66
Передача функции в качестве параметра Передача класса в качестве параметра Передача пути к файлу в качестве параметра через консоль |
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 08.06.2019, 14:13 | ||
|
0
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||||||
| 09.06.2019, 03:24 | |||||||
|
Короче, они говорят - это не баг. Регресс оптимизатора в 9.1 - да. Говорят, что constexpr контекст не существует из-за того, что переменная, которая инициализируется результатом Test(), сама не constexpr. По этому же получается, что отдельные вызовы в main тоже не constexpr, предвычисление в этом случае заслуга оптимизатора. Библиотечная реализация использует интринсики, которые помогают оптимизатору, но constexpr все равно не используется по причинам озвученным выше. Это хорошо видно, если выкрутить оптимизацию в ноль. Обе функции работают в runtime: https://godbolt.org/z/D1kmZN Также предлагают ждать С++20, где функция Test может быть consteval, тогда она будет вести себя как я предполагал изначально. Корректный пример с точки зрения constexpr контекста выглядит так: https://godbolt.org/z/VxjgSI Флаг оптимизации специально выкручен в ноль, чтобы показать, что оптимизация на результат не влияет. Мораль1: чтобы функция была constexpr, на всем этапе вычислений не должно быть не-constexpr сущностей, иначе работать будет в рантайме, где уже возможно поможет оптимизатор и сгладит различия, но не обязан. Мораль2: со сказанным мной выше в этой теме противоречий мало (за исключением предположений о баге). Все так же остаются верными: * Пишем все в constexpr контексте и получаем constexpr результат. * Код компилятор компилирует одинаково. * Проблемы в пользовательской Length нет никакой. Собственно теперь все понятно, кроме одного, какая собственно позиция у тебя? Ты с чем сейчас не согласен? По твоим ответам вообще не ясно, к чему мы пришли. Вот тебе реализация с вырезанием имени файла из __FILE__, вдруг мне станет понятнее чего ты вообще добиваешься. Реально, понять тебя крайне тяжело, без обид. Кликните здесь для просмотра всего текста
С++14 и выше. Написано этим утром за 5 минут, на случай, если ты все-таки решил бы создать тему. Как видно, от полного пути осталось только имя файла. Самого полного пути нигде в секции rodata нет, оптимизация выкручена в ноль, все манипуляции со строкой произведены на этапе компиляции, как ты и заказывал. Оптимизациями кода не занимался. Можно сделать лучше, но мне лень. Может быть кому-то пригодится как отправная точка.
0
|
|||||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||||||||
| 09.06.2019, 10:56 | ||||||||
|
Добавлено через 7 минут Ну и из предыстории - я делал форматирование даты-времени, типа strftime. Там нужно выделять буфер под результат. Я подумал, что так как почти всегда строка форматирования это константа, неплохо было бы этот размер вычислять в compile-time, когда это возможно. Не получилось. Сделал функцию попроще, length - то же самое. Но (!) аналогичная функция char_traits::length отрабатывает нормально Добавлено через 6 минут Вот моя реализация
0
|
||||||||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||||
| 09.06.2019, 16:02 | ||||
0
|
||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
| 09.06.2019, 16:44 | |
|
0
|
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|
| 09.06.2019, 20:25 | |
|
0
|
|
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 09.06.2019, 21:18 | ||
|
Печально, но, похоже, для строк constexpr-функции пока бесполезны.
0
|
||
| 09.06.2019, 21:18 | |
|
Передача строки в качестве аргумента потоку Передача функции в качестве параметра Передача файла в качестве параметра Передача функции в качестве параметра Передача CString в качестве параметра функции Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности.
Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
|
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version
Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|