Я немного нечеток на основных путях, которыми программисты кодируют по-другому в C и C++. Одной вещью в особенности является использование строк в C++ по массивам символов, или наоборот. Так, я должен использовать строки или массивы символов, в целом, и почему?
В C ++ почти во всех случаях следует использовать std :: string
вместо необработанного массива символов.
std :: string
управляет базовой памятью за вас, что само по себе является достаточной причиной для ее предпочтения.
Он также предоставляет намного более простой в использовании и более читаемый интерфейс для общих строковых операций, например проверка на равенство, конкатенация, операции с подстроками, поиск и итерация.
Другие поставили это. По возможности используйте std :: string. Однако есть области, где вам нужен char *, например, если вы хотите вызвать некоторые системные службы.
Если вы изменяете или возвращаете строку, используйте std :: string
. Если нет, примите ваш параметр как const char *
, если вам не нужны функции-члены std :: string
. Это позволяет использовать вашу функцию не только с std :: string :: c_str ()
, но и с строковыми литералами. Зачем заставлять вызывающего абонента платить за создание std :: string
с кучным хранилищем только для передачи литерала?
Используйте std :: string
.
У вас будет меньше проблем (я думаю, почти ничего, по крайней мере, мне не приходит в голову) с размерами буфера.
В C есть char [], а в C ++ тоже есть std :: string ...
Я часто слышу, что нужно «принять язык» и, следуя этому правилу, вы должны использовать std :: string ...
Однако это в значительной степени зависит от того, какую библиотеку вы используете, как эта библиотека хочет, чтобы вы выражали свои строки и тому подобное.
std :: string - это класс контейнера, а внутри него - char []
Если вы используете std :: string, у вас есть много преимуществ, например, функции, которые помогут вам [ сравните, подстановку, как примеры]
Как и в случае со всем, что вы выбираете, зависит от того, что вы делаете с этим. std :: string имеет реальное значение, если вы имеете дело с изменяющимися строковыми данными. Вы не можете превзойти char [] по эффективности при работе с неизменяемыми строками.