Форум программистов, компьютерный форум CyberForum.ru

char* vs std::string - C++

Восстановить пароль Регистрация
 
Erik945
29 / 1 / 1
Регистрация: 30.08.2013
Сообщений: 36
20.12.2013, 20:03     char* vs std::string #1
При чтении чужих сорцов, обратил внимание, что в роли аргументов для функций/методов, как правило используются указатели на массивы чаров, а не СТДшные стринги. Например:

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

Насколько я прав? Может есть еще какие-то скользкие моменты?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.12.2013, 20:16     char* vs std::string #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 по значению передавать? Передавайте константную ссылку.
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
20.12.2013, 20:18     char* vs std::string #3
Цитата Сообщение от Erik945 Посмотреть сообщение
std::string как правило, более предсказуем чем строка, которая, как я понимаю, хранится в стеке а не в куче (если конечно, не загнать ее туда нарочно)
Этот пункт не имеет никакого смысла. String хранит в себе поинтер который содержит в себе адрес на область в куче... К тому же между программированием и предсказанием мало общего...
monolit
179 / 179 / 21
Регистрация: 24.03.2011
Сообщений: 641
Завершенные тесты: 1
20.12.2013, 20:20     char* vs std::string #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 Посмотреть сообщение
между программированием и предсказанием мало общего
Хорошо сказал!)
Erik945
29 / 1 / 1
Регистрация: 30.08.2013
Сообщений: 36
20.12.2013, 20:40  [ТС]     char* vs std::string #5
Это все верно, но...
Цитата Сообщение от monolit Посмотреть сообщение
А вообще стандартные функции работают с const char* в основном
Вот собственно почему? исторически сложилось, по указанным мной причинам, еще почему-то?


xtorne21st в цитатник однозначно!
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.12.2013, 20:42     char* vs std::string #6
Цитата Сообщение от Erik945 Посмотреть сообщение
Вот собственно почему? исторически сложилось, по указанным мной причинам, еще почему-то?
Когда-то не было string, а стандартные функции были.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.12.2013, 20:56     char* vs std::string
Еще ссылки по теме:

C++ Где и почему используют ту или иную строку std::string, char[], System::String^ ?
C++ ошибка в программе (cannot convert 'std::string {aka std::basic_string<char>}' to 'const char*')
IntelliSense: отсутствует оператор "<<", соответствующий этим операндам типы операндов: std::basic_ostream<char, std::char_traits<char> C++

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

Или воспользуйтесь поиском по форуму:
MrCold
851 / 749 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
20.12.2013, 20:56     char* vs std::string #7
Цитата Сообщение от Erik945 Посмотреть сообщение
При чтении чужих сорцов, обратил внимание, что в роли аргументов для функций/методов, как правило используются указатели на массивы чаров, а не СТДшные стринги.
Ещё для межъязыкового взаимодействия.
Код C++ можно использовать в виде .DLL, например в С# или Delphi.
С# , Delphi ничего не знают о std::string.
При передаче же указателя на char
проблем не будет.
Yandex
Объявления
20.12.2013, 20:56     char* vs std::string
Ответ Создать тему
Опции темы

Текущее время: 20:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru