|
Asm/C++/Delphi/Py/PHP/VBA
|
||||||
Передача строки в качестве параметра07.06.2019, 16:31. Показов 8036. Ответов 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
|
|
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||||||||
| 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 в качестве параметра функции Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во
всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
|