Нет никаких существенных недостатков, если предположить, что реализация поставщика 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, который явно требует непрерывного буфера.