Проблемы, описанные в документе, существуют для некоторых компиляторов, особенно для MSVC, но я никогда не сталкивался с реальной проблемой в реальном мире. Компиляторы GNU реализуют описанные строки «не для обмена», то есть использование неконстантных operator[]
делает строку недоступной для обмена и создает копию при необходимости.
Классы STL по определению не являются потокобезопасными и должны быть окружены блокировками при доступе из нескольких потоков; Я думаю, что это особенность, поскольку она делает их значительно быстрее и позволяет реализовать алгоритмы без блокировок.
Отношение между std
и STL в основном состоит в том, что STL был интегрирован в стандартную библиотеку C ++, которая находится в пространстве имен std
. С тех пор стандарт развился, но остается в значительной степени совместимым.
В целом это безопасно для использования в текстовых парсерах: типичный шаблон для построчного разбора -
std::istream &is;
for(std::string line; getline(is, line);)
{
// parse line
}