443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,273
|
||||||
1 | ||||||
Что такое std::string30.10.2019, 21:59. Показов 10067. Ответов 68
Метки нет (Все метки)
скажите пожалуйста , что сейчас находится в s?
0
|
30.10.2019, 21:59 | |
Ответы с готовыми решениями:
68
Что такое std::string() ошибка error: cannot convert 'std::string {aka std::basic_string<char>}' to 'std::string* {aka std::basic_stri Запрошено преобразование от ‘const std::string*’ к нескалярному типу ‘std::string’ что такое std::out |
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,273
|
||||||
01.11.2019, 17:32 [ТС] | 21 | |||||
когда в С++ я делаю вот так
0
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
01.11.2019, 18:00 | 22 |
У тебя есть код реализации std::string. У тебя есть тот же отладчик. Почему ты этим не пользуешься, чтобы ответить себе на этот вопрос? Код basic_string, это не boost spirit, в нем не так сложно разобраться. В чем твоя проблема?
1
|
Комп_Оратор)
|
|
01.11.2019, 18:05 | 23 |
Vourhey, глядя в последний вопрос видно, что нет понятий о инициализации и присваивании. А ранее выяснилось, что нет понятия о с-строках и std::string. То есть, не будет толку от просмотра текстов стандартной библиотеки.
0
|
Вездепух
12793 / 6670 / 1795
Регистрация: 18.10.2014
Сообщений: 16,889
|
|
01.11.2019, 19:19 | 24 |
2
|
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,273
|
|
02.11.2019, 13:33 [ТС] | 25 |
и что происходит потом? почему я не могу прочитать после этого с присвоенного объекта, как с того объекта ,который присвоил?
0
|
"C with Classes"
|
||||||
02.11.2019, 13:45 | 26 | |||||
Сообщение было отмечено pcmax как решение
Решение
все ты можешь:
2
|
Комп_Оратор)
|
||||||
02.11.2019, 14:01 | 27 | |||||
_stanislav, си-строки смешаны со стандартными. Инициализация с присвоением. А оно и в реализации небезопасно, кстати. То есть, требует осторожности, так как массив и с-строка не отличимы по типу. Только формат (ноль-терминатор) их отличает)
1
|
"C with Classes"
|
|
02.11.2019, 14:09 | 28 |
где смешаны?
Добавлено через 4 минуты IGPIGP, так и не нужно в std::string засовывать символьный массив без терминатора, ТСу это зачем, у него в коде литерал нультерминированный.
0
|
Комп_Оратор)
|
|
02.11.2019, 16:33 | 29 |
Я не о том. Оно не нужно, конечно. Я о том, что контроль типов не отличает массивы с нулём и без (тип то один) и присваивание компилируется. Это по сути дыра, где ответственность на программере. Но наследие есть наследие. Я о том, что присвоение и инициализация это разные вещи. А вопросов по связанных с с-строками можно задать и в контексте работы с стандартными не мало. А нужно начать по порядку. Сначала уяснить что есть присвоение, а что - инициализация. А потом уже приведения типа при копировании и приравнивании. И точно отличать разные виды строк нужно, тоже. А пока нет этого нет смысла объяснять.
0
|
"C with Classes"
|
|
02.11.2019, 16:50 | 30 |
std::string это структура данных (
typedef basic_string<char> string ), Мейерс в STL говорил вроде бы, что в некоторых случаях, я пока не дочитал в каких, вместо basic_string<char> , лучше использовать std::vector<char> .
1
|
фрилансер
5848 / 5379 / 1103
Регистрация: 11.10.2019
Сообщений: 14,380
|
|
02.11.2019, 16:54 | 31 |
_stanislav, когда не нужен принудительный завершающий ноль, то вместо std::string лучше использовать std::vector<char>
но вообще, не могу придумать случая, когда это может помешать. Разве что тот случай, когда аргумент функции имеет именно тип std::vector<char>
1
|
фрилансер
5848 / 5379 / 1103
Регистрация: 11.10.2019
Сообщений: 14,380
|
|
02.11.2019, 17:03 | 33 |
_stanislav, возможно, но я только одну причину смог придумать - в предыдущем посте. Если контейнер используется как массив, то разницы нет, есть ли там ноль после гарантированного заявленного количества элементов
0
|
"C with Classes"
|
|
02.11.2019, 17:37 | 34 |
Алексей1153, читанул Мейерса, короче, цитата:
Если доступная реализация string построена на подсчете ссылок, а ее использование в многопоточной среде порождает проблемы с быстродействием, возможны по крайней мере три разумных варианта, ни один из которых не связан с отказом от STL. Во-первых, проверьте, не позволяет ли реализация библиотеки отключить подсчет ссылок (обычно это делается изменением значения препроцессорной переменной). Конечно, переносимость при этом теряется, но с учетом минимального объема работы данный вариант все же стоит рассмотреть. Во-вторых, найдите или создайте альтернативную реализацию string (хотя бы частичную), не использующую подсчета ссылок. В-третьих, посмотрите, нельзя ли использовать vector<char> вместо string. Реализации vector не могут использовать подсчет ссылок, поэтому скрытые проблемы многопоточного быстродействия им не присущи. Конечно, при переходе к vector<char> теряются многие удобные функции контейнера string, но большая часть их функциональности доступна через алгоритмы STL, поэтому речь идет не столько о сужении возможностей, сколько о смене синтаксиса.
1
|
фрилансер
5848 / 5379 / 1103
Регистрация: 11.10.2019
Сообщений: 14,380
|
|
02.11.2019, 17:56 | 35 |
_stanislav, кстати, я вот щас задумался. При многопоточности я обычно использую CString (MFC) или QString (Qt) - они юзают COW . Переменные я, конечно, синхронизирую, только сейчас что-то не пойму, почему не поломалось ничего из-за COW. А ведь ни разу не поломалось, всё чётко, проектов много, потоков в них много. Я понимаю, что магии не бывает )) Видимо, подсчёт ссылок у них внутри синхронизирован
0
|
Комп_Оратор)
|
|
02.11.2019, 18:10 | 36 |
Алексей1153 речь не о краше, а о снижении скорости. Каждая блокировка должна блокировать множество строк, если они представлены разделяемо (если речь об этом). Это моё предположение.
0
|
Вездепух
12793 / 6670 / 1795
Регистрация: 18.10.2014
Сообщений: 16,889
|
|
02.11.2019, 19:18 | 38 |
Не знаю, почему. Это уже у вас надо спрашивать, почему вы не можете.
Все прекрасно читается. Никаких проблем.
0
|
фрилансер
5848 / 5379 / 1103
Регистрация: 11.10.2019
Сообщений: 14,380
|
|
02.11.2019, 19:19 | 39 |
IGPIGP, ну, блокировка заметных тормозов не привнесёт, строка быстро скопируется и всё. У меня не было таких трафиков между потоками, чтобы заметить такие задержки. Но само копирование вне синхронизации, видимо, синхронизируется внутри класса. разработчики должны были учесть многопоточность
0
|
Комп_Оратор)
|
|
02.11.2019, 19:25 | 40 |
Если внутренне строка это кучка других строк которые хранятся по счётчикам своих ссылок (разделяемое представление строк), то трудно сказать сколько объектов будут блокировать (методами конечно) работу с одним экземпляром внешнего представления) Тут предположения - скользкая вещь.
Зачем за это платить в одном потоке? Не знаю. Вообще, разговоры о реализации (и её настраиваемых вариантах) это далеко от ТС.
0
|
02.11.2019, 19:25 | |
02.11.2019, 19:25 | |
Помогаю со студенческими работами здесь
40
Что такое std::allocator<T> ? std::map что такое и с чем это есть На основе исходного std::vector<std::string> содержащего числа, создать std::vector<int> с этими же числами Что означает std::string to_string( int value )? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |