Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
29 / 1 / 1
Регистрация: 30.08.2013
Сообщений: 37
1

char* vs std::string

20.12.2013, 20:03. Показов 2613. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
При чтении чужих сорцов, обратил внимание, что в роли аргументов для функций/методов, как правило используются указатели на массивы чаров, а не СТДшные стринги. Например:

C++
1
2
WriteToFile( const char* FileName )
WriteToFile( const std::string FileName )
Лично я увидел следующие преимущества
- экономится память за счет того что передается указатель (4 или 8 байтов), а не здоровый объект класса.
- экономия времени за счет того что не вызываются конструкторы/методы копирования
и недостатки
- std::string как правило, более предсказуем чем строка, которая, как я понимаю, хранится в стеке а не в куче (если конечно, не загнать ее туда нарочно)

Насколько я прав? Может есть еще какие-то скользкие моменты?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.12.2013, 20:03
Ответы с готовыми решениями:

ошибка error: cannot convert 'std::string {aka std::basic_string<char>}' to 'std::string* {aka std::basic_stri
на вод поступают 2 строки типа string. определить количество вхождений строки 2 в строку 1 ошибка...

ошибка в программе (cannot convert 'std::string {aka std::basic_string<char>}' to 'const char*')
int main() { string fileName, currWord, currMax = &quot;&quot;; cin&gt;&gt;fileName; ...

Странная ошибка: [Error] no match for call to '(std::string {aka std::basic_string<char>}) (int&)'
У меня появляется проблема при компиляции сей программы: #include &lt;iostream&gt; #include &lt;string&gt;...

(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&
astxx::manager::connection::connection(std::basic_string&lt;char, std::char_traits&lt;char&gt;,...

6
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
20.12.2013, 20:16 2
Можно так и со string делать:
C++
1
WriteToFile( const char* FileName );
В string есть метод c_str():
C++
1
2
string FileName;
WriteToFile(FileName.c_str());
Добавлено через 4 минуты
Цитата Сообщение от Erik945 Посмотреть сообщение
- экономится память за счет того что передается указатель (4 или 8 байтов), а не здоровый объект класса.
- экономия времени за счет того что не вызываются конструкторы/методы копирования
Зачем string по значению передавать? Передавайте константную ссылку.
0
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
20.12.2013, 20:18 3
Цитата Сообщение от Erik945 Посмотреть сообщение
std::string как правило, более предсказуем чем строка, которая, как я понимаю, хранится в стеке а не в куче (если конечно, не загнать ее туда нарочно)
Этот пункт не имеет никакого смысла. String хранит в себе поинтер который содержит в себе адрес на область в куче... К тому же между программированием и предсказанием мало общего...
0
188 / 187 / 46
Регистрация: 24.03.2011
Сообщений: 670
20.12.2013, 20:20 4
Первый скользкий момент:
пишут обычно не
Цитата Сообщение от Erik945 Посмотреть сообщение
WriteToFile( const std::string FileName )
а
C++
1
WriteToFile( const std::string& FileName )
Цитата Сообщение от Erik945 Посмотреть сообщение
строка, которая, как я понимаю, хранится в стеке
Ну эт если ты ее объвлял как char s[] = "qwerty", а не выделял вручную память...

Цитата Сообщение от Erik945 Посмотреть сообщение
экономится память за счет того что передается указатель (4 или 8 байтов), а не здоровый объект класса
Поэтому и передают по ссылке, как я указал, чтоб не передавать "здоровый объект класса".
Цитата Сообщение от Erik945 Посмотреть сообщение
std::string как правило, более предсказуем чем строка
А насчет чего там гадать-то?) В string'е по сути та же самая строка, только обернутая в класс для большего удобства.

А вообще стандартные функции работают с const char* в основном, и вызывать лишний раз .c_str() как то напряжно при их использовании, да и плюсов от использования string не так уж много (естественно, если эта строка не модифицируется). В общем, смотреть по ситуации нужно.

Добавлено через 1 минуту
Цитата Сообщение от xtorne21st Посмотреть сообщение
между программированием и предсказанием мало общего
Хорошо сказал!)
0
29 / 1 / 1
Регистрация: 30.08.2013
Сообщений: 37
20.12.2013, 20:40  [ТС] 5
Это все верно, но...
Цитата Сообщение от monolit Посмотреть сообщение
А вообще стандартные функции работают с const char* в основном
Вот собственно почему? исторически сложилось, по указанным мной причинам, еще почему-то?


xtorne21st в цитатник однозначно!
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
20.12.2013, 20:42 6
Цитата Сообщение от Erik945 Посмотреть сообщение
Вот собственно почему? исторически сложилось, по указанным мной причинам, еще почему-то?
Когда-то не было string, а стандартные функции были.
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
20.12.2013, 20:56 7
Цитата Сообщение от Erik945 Посмотреть сообщение
При чтении чужих сорцов, обратил внимание, что в роли аргументов для функций/методов, как правило используются указатели на массивы чаров, а не СТДшные стринги.
Ещё для межъязыкового взаимодействия.
Код C++ можно использовать в виде .DLL, например в С# или Delphi.
С# , Delphi ничего не знают о std::string.
При передаче же указателя на char
проблем не будет.
0
20.12.2013, 20:56
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.12.2013, 20:56
Помогаю со студенческими работами здесь

Где и почему используют ту или иную строку std::string, char[], System::String^ ?
Где и почему используют ту или иную строку std::string, char, System::String^ ? Объясните...

std::string в char*
Можно ли привести std::string к указателю на нуль-терминальную строку? Как?

Std::string в const char*
можно ли std::string превратить в const char* и как это сделать?

std::string и/или char*
Здравствуйте. пишу метод построчной обработки данных из файла Вот он: bool...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
[Golang] 121. Best Time to Buy and Sell Stock
alhaos 28.01.2025
В этой задаче мы получаем слайс целых чисел, которые означают цену акции в разные моменты времени, и должны вернуть максимально возможную прибыль от купли продажи акции. / / . . .
Проектирование и моделирование
hw_wired 28.01.2025
Введение в моделирование Моделирование представляет собой один из фундаментальных методов научного познания, который позволяет изучать объекты и явления через создание их упрощенных аналогов. В. . .
Алгоритмы и исполнители
hw_wired 28.01.2025
Введение в алгоритмы В современном мире информационных технологий алгоритмы играют основополагающую роль в решении различных задач и автоматизации процессов. Алгоритм представляет собой точную. . .
Хранение информации
hw_wired 28.01.2025
Введение: Роль систем хранения информации в современном мире В современную эпоху цифровых технологий эффективное хранение информации становится одним из ключевых факторов успешного развития любой. . .
Обработка числовой информации
hw_wired 28.01.2025
Введение в обработку числовой информации В современном мире обработка числовой информации стала неотъемлемой частью как профессиональной деятельности, так и повседневной жизни. Электронные таблицы. . .
Мультимедиа
hw_wired 28.01.2025
Введение в мультимедийные технологии В современном мире мультимедийные технологии стали неотъемлемой частью нашей жизни, проникнув во все сферы человеческой деятельности. Термин "мультимедиа". . .
Обработка текстовой информации
hw_wired 28.01.2025
Введение в обработку текстовой информации В современном мире обработка текстовой информации играет фундаментальную роль в различных сферах человеческой деятельности. Текстовые редакторы стали. . .
Обработка графической информации
hw_wired 28.01.2025
Введение в компьютерную графику Компьютерная графика стала неотъемлемой частью современного цифрового мира, пройдя впечатляющий путь развития от простейших черно-белых изображений до сложных. . .
Python в Алгоритмике: Решение задач
hw_wired 28.01.2025
Введение в Python и Алгоритмику В современном мире программирование стало неотъемлемой частью образования и профессионального развития. Python зарекомендовал себя как один из самых популярных и. . .
Компьютер как универсальное устройство для работы с информацией
hw_wired 28.01.2025
Введение в устройство компьютера Компьютер представляет собой универсальное электронное устройство, предназначенное для автоматической обработки информации. В современном мире компьютер стал. . .
Информация и информационные процессы
hw_wired 28.01.2025
Понятие информации и ее виды В современном мире информация является одним из фундаментальных понятий, пронизывающих все сферы человеческой деятельности. Под информацией понимают любые сведения об. . .
Алгоритмика
hw_wired 28.01.2025
Введение: Основы алгоритмики и её роль в информатике В современном мире программирование и алгоритмическое мышление стали неотъемлемой частью образования и профессиональной деятельности. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru