В настоящее время у меня есть сценарий, в котором я хочу проверить, приведет ли запись данной строки к файловому потоку к увеличению файла сверх заданного размера (это используется для ротации файла журнала ). Теперь std :: ofstream :: tellp ()
возвращает streampos
, но std :: string :: size ()
возвращает size_t
. Эффект состоит в том, что это не работает:
out_stream.tellp() + string.size() < limit
, потому что очевидно существует неоднозначная перегрузка operator +
для этих типов. Это приводит меня к двум вопросам:
size_t
, streamsize
, streampos
], streamoff
) связаны друг с другом? Когда их можно будет безопасно преобразовать, и каковы возможные подводные камни. Я вообще не понимаю эти типы. Все, что я знаю, это то, что они зависят от реализации и что они дают определенные гарантии (например, size_t
всегда достаточно велик, чтобы удерживать размер большого объекта, который поместился бы в память на архитектуре, для которой приложение было скомпилирован), но каковы гарантии взаимодействия этих типов (см. пример выше, или сравнивая streamsize
с size_t
)?