|
Asm/C++/Delphi/Py/PHP/VBA
|
||||||
Передача строки в качестве параметра07.06.2019, 16:31. Показов 8349. Ответов 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, 22:44 | ||
|
Jin X, стало ещё хуже
Добавлено через 55 секунд
0
|
||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||
| 07.06.2019, 22:47 | |||
|
При чем здесь манипуляции со строками на этапе компиляции? Вообще, давай начнем с того, что ты расскажешь чем ты компилируешь вообще?
0
|
|||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||||
| 07.06.2019, 22:52 | ||||
|
Добавлено через 2 минуты Добавлено через 2 минуты
0
|
||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||
| 07.06.2019, 23:01 | |||
|
Вот твой код показывает, что библиотечный char_traits не приводит к циклу. Ну так и реализуй свой string_view с помощью библиотечного char_traits, даже если предположить, что компилятор действительно по-разному компилирует код (хотя это нифига не так). В чем проблема-то? Где цикл?
0
|
|||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|||
| 07.06.2019, 23:06 | |||
|
0
|
|||
|
Asm/C++/Delphi/Py/PHP/VBA
|
|
| 07.06.2019, 23:08 [ТС] | |
|
Я сейчас немного потестил. В зависимости от компилятора и от разных настроек -O при использовании strlen где-то подставляется число, а где-то вызывается strlen. Аналогично и с while. Только while написан очень неоптимально. Но while чаще превращается в число, чем strlen. Вот такая ерундень. А юзать __builtin_strlen, думаю, не стоит вообще, т.к. это вне стандарта.
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||||
| 07.06.2019, 23:12 | ||||
|
В данном случае всю малину портит printf. А в 9.1 похоже просто какой-то баг. Потому что, например, GCC 8.1 вот на таком коде никаких циклов не делает: https://godbolt.org/z/NVuiSz. А 9.1 - делает. Добавлено через 37 секунд
0
|
||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 07.06.2019, 23:13 | ||
|
0
|
||
|
Asm/C++/Delphi/Py/PHP/VBA
|
|
| 07.06.2019, 23:13 [ТС] | |
|
0
|
|
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|||
| 07.06.2019, 23:17 | |||
|
Добавлено через 1 минуту
0
|
|||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|
| 07.06.2019, 23:17 | |
|
0
|
|
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 07.06.2019, 23:22 | ||
|
0
|
||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||
| 07.06.2019, 23:28 | ||
![]() Чего ты передергиваешь? __builtin_strlen - это интринсик компилятора, в специализации char_traits<char> именно он используется в реализации length(), а не цикл. Поэтому, когда разработчики в GCC 9.1 посадили баг, который проявляется при использовании циклов в constexpr - пользовательский код сломался, а библиотечный - нет. Потому как раз, что явного цикла там нет. Поэтому я говорю, что компилятор не собирает код по-разному. Если бы в библиотечной реализации тоже был цикл, библиотечная реализация тоже бы сломалась из-за этого бага. Я там выше ссылку дал на 8.1. Чего ты ее проигнорировал-то?
0
|
||
|
Asm/C++/Delphi/Py/PHP/VBA
|
|
| 07.06.2019, 23:32 [ТС] | |
|
Вот, держите: https://godbolt.org/z/cbbsjK
Всё он одинаково компилит, у вас просто constant_string_p вылетело из кода куда-то (в char_traits.h он называется __constant_string_p)
0
|
|
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 07.06.2019, 23:46 | ||
|
Добавлено через 2 минуты DrOffset, ну и что там насчёт __FILE__, сможешь сделать?
0
|
||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||
| 08.06.2019, 00:04 | |||
|
Хочешь - создай тему об этом.
0
|
|||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|||
| 08.06.2019, 00:08 | |||
|
Добавлено через 2 минуты
0
|
|||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||
| 08.06.2019, 00:22 | |||
|
Вообще не знаю как относиться к твоему примеру, учитывая, что clang даже отказывается его компилировать. Возможно GCC перестает считать строку-параметр функции Test как contsexpr из-за того, что сама функция перестает быть constexpr (из-за printf). Внутри библиотечной реализации есть builtin-помощники, которые видимо создают дополнительный критерий в случае, если строка таки на самом деле constexpr. А вот с пользовательской реализацией уже не работает - идет по runtime варианту. В чистом constexpr контексте баг проявляется только на 9.1 и выше, я показал это в своем примере. Учитывая, что изначальная цель получить constexpr вариант, рассматривать вариант с не-constexpr из-за посторонних runtime функций внутри (даже если там баг) в этой теме оффтоп. Мы и так тут отклонились сильно.
0
|
|||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 08.06.2019, 00:26 | ||
|
Добавлено через 1 минуту Проблема там в CTest::length
0
|
||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||
| 08.06.2019, 13:09 | |||
|
Библиотечный шаблон продолжает работать в compile-time вопреки этому уже засчет механизмов компилятора: constant_string_p и __builtin_strlen, которые используются в реализации. Я об этом уже говорил. Конечно, GCC, мог бы быть и поумнее, и скомпилировать этот код одинаково, но его поведение вполне согласуется с правилами языка. А вот та ситуация, которую я привел, явно ошибочная. Посмотрим что ответят разработчики. Не знаю что еще добавить. По-моему тут все понятно-прозрачно.
0
|
|||
| 08.06.2019, 13:09 | |
|
Передача строки в качестве аргумента потоку Передача функции в качестве параметра Передача файла в качестве параметра Передача функции в качестве параметра Передача CString в качестве параметра функции Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Многофункциональное здание: как одно здание порождает конфликты требований, которые никто не планировал (мат мет мод 29)
anaschu 23.06.2026
Многофункциональное здание:
как одно здание порождает конфликты требований,
которые никто не планировал
Материалы для обсуждения с МГСУ · 2026
Рисунки внутри приложенного ворд файла.
Что за. . .
|
28. Конкретное развертывание плана номер 1 из поста номер 27
anaschu 22.06.2026
Можно ли из модели получить конкретные строительные требования?
Честно — напрямую из текущей модели такие ответы не получить. Но цепочка логики есть, и она не такая длинная.
Где разрыв
. . .
|
27. Планы на разработку функциональных требований к строительству внутри модели пищеблока (или не только его?)
anaschu 22.06.2026
Что уже реализовано и даёт конфликты «бесплатно»
Самый простой конфликт уже работает — конфликт за ресурс-работника. Заданий больше, чем доступных поваров → очередь в queue1. Это прямое отражение. . .
|
26. мед мат модель.Какие типы конфликтов функциональных требований можно рассчитать через ДЕС-моделирование (СМО) в AnyLogic?
anaschu 22.06.2026
Что ДЕС/ СМО умеет считать напрямую:
Конфликты за ресурсы (очереди, узкие места). Несколько типов агентов (повара, учителя, рабочие, пациенты) претендуют на один ресурс (лифт, вход, коридор,. . .
|
|
25 модель здравосохранения и функциональных требований к пищеблоку: конфликты функциональных требований.
anaschu 22.06.2026
Есть ли данные о том, какие функциональные/ эксплуатационные требования или их сочетания труднее всего учитывать при проектировании зданий?
Да, такие данные есть, и они хорошо описаны и в российской,. . .
|
Remote Connection Manager
DevAlt 21.06.2026
Написал для себя небольшую прилагу:
https:/ / github. com/ altbodhi/ ReConMan
По итогу пришел к мысли, что DU не дружат с существующими технологиями.
От сериализации до отображения в реляционную. . .
|
Администрация Хабра удаляет новые энергоэфективные алгоритмы, которые не западной школы кода, и вовсе никак не сгенерированы
Hrethgir 20.06.2026
Делается это, как замечено, при правках - при объявлении концептуальных отличий в алгоримах. Делается это, по линейке событий - после дополнения публикации основными отличиями от основных западных. . .
|
Процесс ориентированная диалектика (не новость - просто системное обновление, философия).
Hrethgir 20.06.2026
Однажды один участник в своём блоге, на этом форуме, сделал запись "О языках замолвите слово". Понимая, что язык - важная вещь, я решил хорошо подумать, прежде чем сказать, и сказал то, что вы видите. . .
|