Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Какой тип надо использовать работая со стримамами?


Автор: EvilsInterrupt 28.12.2014, 16:22
Мне очень привычно использовать библиотеку потоков из стандартной библиотеки C++. Но недавно столкнулся с интересным, для меня, нюансом.

Я написал код, полагаясь на корректность константы:

Цитата

const std::streampos invalidPos = std::numeric_limits<std::streampos>::max()


Ее некорректность в том, что предполагается значение 0xFF...... или 0x7F...... . Но на деле эта константа равна 0. Проверял на Gcc, MSVS 2013, CLang.

Страничка на http://en.cppreference.com/w/cpp/io/basic_istream говорит, что надо использовать std::ios::pos_type. Но проверив чему равно :

Цитата

const std::ios::pos_type invalidPos = std::numeric_limits<std::ios::pos_type>::max()


Я снова увидел 0!

У меня непонимание, а как тогда писать код функций, который вернет константу "неправильное смещение"?
Мне это нужно, т.к. мне не всегда удобно бросать исключение.

Есть конечно решение, не спорю к примеру такое:
Цитата

const std::ios::pos_type invalidPos = static_cast<std::ios::pos_type>(-1)

Но оно мне не особо нравится

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)