Любой недостаток использования String (C ++) - PullRequest
3 голосов
/ 15 января 2011

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

Не стесняйтесь указывать мне на обман, однако я искал и ничего не мог найти (хотя я уверен, что кто-то спросил)

Ответы [ 4 ]

11 голосов
/ 15 января 2011

Нет никаких существенных недостатков, если предположить, что реализация поставщика std::string является компетентной. Класс std::string вряд ли будет медленнее, чем простые C-строки с включенной оптимизацией компилятора.

Даже если вы окажетесь в ситуации, когда вам понадобится строка C (например, вам нужно работать с API, который принимает const char*), у вас всегда есть std::string::c_str().

Один возможный недостаток, с которым вы можете столкнуться - это реализации поставщика, которые реализуют семантику COW не поточно-ориентированным способом. (См. std :: string в многопоточной программе )

Однако, это не проблема в C ++ 0x, и даже в C ++ 03 это действительно пример проблемной реализации вендора, а не что-то не так по сути с std::string.

Другим возможным недостатком является тот факт, что существуют некоторые споры относительно того, требует ли формулировка в стандарте C ++ 03 реализации std::string для использования смежного буфера памяти. Это делает несколько сомнительным, можете ли вы делать такие вещи, как чтение непосредственно из файла в объект std::string. Однако легко утверждать, что стандарт C ++ 03 действительно фактически неявно требует непрерывного буфера, и в любом случае это в основном академический вопрос, поскольку на практике 1) большинство (или все) реализации std::string на самом деле действительно обеспечивают непрерывный буфер, и 2) проблема является спорной для C ++ 0x, который явно требует непрерывного буфера.

3 голосов
/ 15 января 2011

Единственный возможный случай, который я могу вспомнить, это когда вам нужно обрабатывать действительно огромные строки (скажем, несколько мегабайт / гигабайт).В этом случае вам нужно проделать немало трюков, чтобы избежать копирования и реализовать новое размещение, если выбран класс строки STL.Массивы char будут очень просты для подобных манипуляций.

1 голос
/ 15 января 2011

EDIT

Извините, я совершенно неправильно понял ваш вопрос. Что касается недостатков, я считаю, что некоторые реализации класса string используют подсчет ссылок, что может привести к неожиданным характеристикам производительности, когда речь идет о многопоточных приложениях.

0 голосов
/ 15 января 2011

ИМХО Ответ зависит от того, что вы делаете.Если вы полагаетесь на внешние библиотеки, которые используют C-строки, во всех случаях используйте C-строки.

Или ... Возможно, у вас есть полная библиотека C-строк, которую вы использовали годами ...

В противном случае я бы использовал строки stdlib.

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