С++: Должен ли я использовать строки или 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 [] для эффективности при работе с неизменяющимися строками.