Реальный вопрос: какой тип ограничения? Обычный способ
Тестирование, если есть еще место, обычно:
limit - out_stream.tellp ()> = string.size ()
Но вы должны убедиться, что лимит имеет тип, из которого
out_stream.tellp () можно вычесть.
Теоретически, streampos не конвертируемы и не сравнимы с интегралом
тип или что, преобразуется в целочисленный тип, это дает значительный
Информация. И для этого требовалось вычитание поддержки или сравнение.
иметь значение. На практике я не думаю, что вам нужно слишком беспокоиться о
преобразование в цельный тип, существующий и являющийся монотонным (хотя
возможно на каком-то экзотическом мейнфрейме ...). Но вы не можете быть уверены, что
арифметика с ним будет работать, поэтому я бы предпочел преобразовать его
явно к размеру потока (который гарантированно будет знаком со знаком
тип). (Независимо от того, как вы подходите к проблеме, вам придется иметь дело с
с тем фактом, что string.size () возвращает size_t, который требуется для
быть без знака, тогда как размер потока должен быть подписан.)
Что касается вашего второго вопроса:
size_t - это typedef для целого типа без знака, достаточно большой, чтобы
указать размер любого возможного объекта,
streamsize - это typedef для целочисленного типа со знаком, достаточно большой, чтобы
указать размер «объекта» в потоке,
streamoff - это typedef для целочисленного типа, способного указывать
положение байта в файле, и
streampos является typedef для fpos, где
что-то является типом, который может быть использован для поддержания состояния в
случай многобайтового потока.
Стандарт предъявляет очень мало требований относительно отношений
между ними (и некоторые из немногих, что это делает, математически невозможно
чтобы понять), так что вы в значительной степени самостоятельно.