|
Asm/C++/Delphi/Py/PHP/VBA
|
||||||
Передача строки в качестве параметра07.06.2019, 16:31. Показов 8707. Ответов 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 в качестве параметра функции Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . .
Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
|
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг.
Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует.
В процессе разработки. . .
|
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
|
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации:
1. Вернуть возможность использования знаков | 1 l I;. . .
|
|
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С.
Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
|
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию?
Фраза «Любая достаточно развитая технология неотличима от магии». . .
|
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль?
Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
|
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология.
«Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
|