Зачем использовать строки c в C ++? - PullRequest
18 голосов
/ 21 сентября 2008

Есть ли веская причина использовать C-строки в C ++ в наше время? Мой учебник в некоторых случаях использует их в примерах, и я действительно чувствую, что было бы проще использовать std :: string.

Ответы [ 18 ]

1 голос
/ 21 сентября 2008

c строки не несут затрат на то, чтобы быть классом.

c строки обычно могут привести к более быстрому коду, так как они ближе к машинному уровню

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

Существует множество библиотечных звонков, которые требуют их по историческим причинам.

Научитесь использовать строки c и stl и используйте каждую, когда это имеет смысл.

1 голос
/ 21 сентября 2008

Это зависит от библиотек, которые вы используете. Например, при работе с MFC часто проще использовать CString при работе с различными частями Windows API. Похоже, что он работает лучше, чем std :: string в приложениях Win32.

Однако std :: string является частью стандарта C ++, поэтому, если вы хотите улучшить переносимость, используйте std :: string.

1 голос
/ 21 сентября 2008

При таком выборе обычно нет причин выбирать примитивные строки C (char*) вместо строк C ++ (std::string). Тем не менее, часто у вас нет роскоши выбора. Например, конструкторы std::fstream принимают строки C по историческим причинам. Кроме того, библиотеки C (как вы уже догадались!) Используют строки C.

В вашем собственном коде C ++ лучше использовать std::string и извлекать строку C объекта по мере необходимости, используя c_str() функцию std::string.

1 голос
/ 01 октября 2013

Устаревший код, который не знает о std :: string. Кроме того, до C ++ 11 открытие файлов с помощью std :: ifstream или std :: ofstream было возможно только с помощью const char * в качестве ввода имени файла.

1 голос
/ 21 сентября 2008

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

1 голос
/ 22 сентября 2008

1) «строковая константа» - это строка C (const char *), преобразующая ее в const std :: string & - это процесс выполнения, не обязательно простой или оптимизированный. 2) библиотека fstream использует строки в стиле c для передачи имен файлов.

Мое эмпирическое правило - передать const std :: string &, если я все равно собираюсь использовать данные как std :: string (скажем, когда я сохраняю их в векторе), и const char * в других случаях.

0 голосов
/ 21 сентября 2008

STL-строки, безусловно, намного проще в использовании, и я не вижу причин не использовать их.

Если вам нужно взаимодействовать с библиотекой, которая принимает в качестве аргументов только строки в стиле C, вы всегда можете вызвать метод c_str () класса string.

0 голосов
/ 21 сентября 2008

Обычная причина сделать это - вам нравится писать переполнения буфера при обработке строк. Счетные строки настолько превосходят завершенные строки, что трудно понять, почему разработчики C когда-либо использовали завершенные строки. Тогда это было плохое решение; сейчас это плохое решение.

...