C ++: Должен ли я вообще использовать строки или массивы символов? - PullRequest
15 голосов
/ 16 апреля 2010

Я немного размышляю об основных способах, которыми программисты по-разному кодируют в C и C ++. Одна вещь, в частности, это использование строк в C ++ над массивами символов или наоборот. Итак, я должен вообще использовать строки или массивы и почему?

Ответы [ 6 ]

27 голосов
/ 16 апреля 2010

В C ++ вы должны почти во всех случаях использовать std::string вместо необработанного массива char.

std::string управляет основной памятью для вас, что само по себе является достаточной причиной, чтобы предпочесть ее.

Он также обеспечивает намного более простой в использовании и более читаемый интерфейс для обычных строковых операций, например проверка на равенство, конкатенация, операции с подстрокой, поиск и итерация.

12 голосов
/ 16 апреля 2010

Если вы изменяете или возвращаете строку, используйте std::string. Если нет, примите ваш параметр как const char*, если вам абсолютно не нужны функции-члены std::string. Это делает вашу функцию пригодной для использования не только с std::string::c_str(), но и с строковыми литералами. Зачем заставлять вызывающего абонента платить за создание std::string с кучей памяти, чтобы передать его в буквальном смысле?

1 голос
/ 16 апреля 2010

Другие это ставили. По возможности используйте std :: string. Однако есть области, где вам нужен символ *, например, если вы хотите позвонить в некоторые системные службы.

1 голос
/ 16 апреля 2010

C имеет char [], в то время как в c ++ тоже есть std :: string ...

Я часто слышу, что нужно «обнять язык», и, следуя этому правилу, вы должны использовать std :: string ...

Однако все зависит от того, какую библиотеку вы используете, как эта библиотека хочет, чтобы вы выражали свои строки, и тому подобное.

std :: string - это контейнерный класс, а внутри него - символ []
Если вы используете std :: string, у вас есть много преимуществ, таких как функции, которые помогут вам [сравнить, substr, как примеры]

1 голос
/ 16 апреля 2010

Используйте std::string. У вас будет меньше проблем (я думаю, что почти нет, по крайней мере, мне не придет в голову) с размерами буфера.

0 голосов
/ 16 апреля 2010

Как и в случае со всем, что вы выбираете, зависит от того, что вы делаете с ним. std :: string имеет реальное значение, если вы имеете дело с изменяющимися строковыми данными. Вы не можете победить char [] для эффективности, когда имеете дело с неизменными строками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...