С++: Должен ли я использовать строки или char массивы, в общем?
Я немного нечеткий по основным способам программирования программистов по-разному в C и С++. В частности, речь идет об использовании строк в С++ поверх массивов char или наоборот. Итак, следует ли использовать строки или char массивы, в общем и почему?
Ответы
Ответ 1
В С++ вы почти всегда должны использовать std::string
вместо массива raw char.
std::string
управляет основной памятью для вас, что само по себе является достаточно хорошей причиной для ее предпочтения.
Он также обеспечивает гораздо более простой в использовании и более читаемый интерфейс для общих операций с строками, например. тестирование равенства, конкатенация, операции подстроки, поиск и итерация.
Ответ 2
Если вы изменяете или возвращаете строку, используйте std::string
. Если нет, примите свой параметр как const char*
, если вам не нужны функции-члены std::string
. Это делает вашу функцию полезной не только с std::string::c_str()
, но и строковыми литералами. Зачем нужно, чтобы ваш вызывающий абонент заплатил цену на создание std::string
с хранилищем кучи только для того, чтобы перейти в литерал?
Ответ 3
Используйте std::string
.
У вас будет меньше проблем (я думаю, почти нет, по крайней мере, никто не приходит мне на ум) с размерами буфера.
Ответ 4
C имеет char [], а С++ имеет std::string тоже...
Я обычно слышу, что нужно "Embrace the language", и, следуя этому правилу, вы должны использовать std::string...
Однако, в значительной степени зависит от того, какую библиотеку вы используете, как эта библиотека хочет, чтобы вы выражали свои строки, что-то вроде этого.
std::string - это контейнерный класс, а внутри него - char []
Если вы используете std::string, у вас есть много преимуществ, таких как функции, которые помогут вам [сравните, substr, в качестве примеров]
Ответ 5
Другие выразили это. Используйте материал std::string, где это возможно. Однако есть области, где вам нужно char *, например, если вы хотите вызвать некоторые системные службы.
Ответ 6
Как и в случае с тем, что вы выбираете, зависит от того, что вы делаете с ним. std::string имеет реальное значение, если вы имеете дело со строковыми данными, которые меняются. Вы не можете победить char [] для эффективности при работе с неизменяющимися строками.