|
Asm/C++/Delphi/Py/PHP/VBA
|
||||||
Передача строки в качестве параметра07.06.2019, 16:31. Показов 8131. Ответов 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
|
||
| 07.06.2019, 16:34 | ||
|
В 17-ом стандарте появилась std::string_view - void test(const std::string_view& str) Добавлено через 15 секунд С ней этих проблем нет
0
|
||
|
Asm/C++/Delphi/Py/PHP/VBA
|
||||||||
| 07.06.2019, 16:41 [ТС] | ||||||||
string.string нужен для того, чтобы хранить строки, которые могут быть удалены. Иначе можно было бы вообще const char* использовать.Например:
string_view, как я понимаю, может быть.Добавлено через 31 секунду Может, через constexpr как-то можно? Но constexpr std::string сделать не получится...
0
|
||||||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|||
| 07.06.2019, 16:43 | |||
|
Добавлено через 43 секунды
0
|
|||
|
Asm/C++/Delphi/Py/PHP/VBA
|
||
| 07.06.2019, 16:45 [ТС] | ||
|
Т.е. если передаём
const char*, то строка копируется, и пусть исходная удаляется, фиг с ней.А если зашитую в код как константу, то никуда она не денется, можно и ссылку передать на оригинал. Добавлено через 41 секунду char* ?
0
|
||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 07.06.2019, 16:45 | ||
|
Можешь const char * поставить, и сделать test(std::string("1111").c_str()); Пока функция test не завершится, строка не будет удалена.
0
|
||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|||
| 07.06.2019, 16:48 | |||
|
Добавлено через 1 минуту
0
|
|||
|
Asm/C++/Delphi/Py/PHP/VBA
|
|||||||
| 07.06.2019, 16:50 [ТС] | |||||||
Good bye!, а не Hello World!
0
|
|||||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 07.06.2019, 16:58 | ||
|
На самом деле, скорее всего для const std::string & и константы компилятор у тебя просто подставит эту константу в выражение
Добавлено через 1 минуту Добавлено через 4 минуты А, ну да, ты имел ввиду, что передашь c_str(), а потом изменишь std::string. Ну, так делать плохо.
0
|
||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
| 07.06.2019, 17:03 | |
|
0
|
|
|
Asm/C++/Delphi/Py/PHP/VBA
|
||
| 07.06.2019, 17:04 [ТС] | ||
|
0
|
||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 07.06.2019, 17:07 | ||
|
Но, способов писать плохие программы очень много и пытаться строить от них всех защиту - дело неблагодарное
0
|
||
|
Asm/C++/Delphi/Py/PHP/VBA
|
||||
| 07.06.2019, 17:10 [ТС] | ||||
|
Добавлено через 1 минуту Добавлено через 1 минуту constexpr вместе с std::string. Как быть?
0
|
||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|||
| 07.06.2019, 17:19 | |||
|
Добавлено через 5 минут Добавлено через 1 минуту Само-собой он оптимизирует вызов - например, если в твоей функции будет вызываться только c_str() для параметра, то, думаю, даже объект не будет создаваться
0
|
|||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
| 07.06.2019, 18:02 | |
|
0
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
||||||||
| 07.06.2019, 18:08 | ||||||||
Если же речь о константе с automatic storage duration, то это такой же объект на стеке. Он живет в области видимости функции и будет создаваться каждый раз, когда поток управления дойдет до этого места. Строковый литерал константен и имеет static storage duration, поэтому его как раз можно "зашить в exe". Лучше опишите конкретно ту задачу, где вам это понадобилось.
0
|
||||||||
|
Asm/C++/Delphi/Py/PHP/VBA
|
|||||
| 07.06.2019, 20:37 [ТС] | |||||
![]() const std::string&. А ещё вот на такую строку тоже написал: std::this_thread::sleep_for(std::chrono::milliseconds(1000)); (причём, ткнул на число 1000).
0
|
|||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
| 07.06.2019, 20:55 | |
|
0
|
|
| 07.06.2019, 20:55 | |
|
Помогаю со студенческими работами здесь
20
Передача строки в качестве аргумента потоку Передача функции в качестве параметра Передача файла в качестве параметра Передача функции в качестве параметра Передача CString в качестве параметра функции Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|