С классом std::string знакомы наверное все программисты C++. Но далеко не все знают, что он может находиться в рассогласованном состоянии. Под ним я понимаю такое состояние, при котором различные способы определения длины одной и той же строки (например, метод size и функция strlen) дают разный результат. Возникать оно может по разным причинам. Но, как правило, основная причина — NULL символ в неожиданном месте.
Сегодня я хотел бы обсудить именно такие «нездоровые» состояния std::string. Мы посмотрим, как они возникают, и попытаемся понять, почему они выглядят именно так.
Дополнительно мы обсудим один весьма спорный момент, связанный с методом std::string::reserve.
