Ответ 1
Это фактически const
в С++ 11. Версия С++ 03 является неудачной ошибкой.
У меня есть функция, аналогичная приведенной ниже, которая является константой, и необходимо проверить, что поток файлов открыт до продолжения:
bool MyClass::checkSomeStuff() const
{
// Where outputFile_ is a std::ofstream
if ( ! outputFile_.is_open() )
{
throw std::runtime_error( "Output file not open." );
}
// ... do more stuff
Однако, кажется, я не могу этого сделать, поскольку is_open()
объявлен как:
bool is_open ( );
(т.е. не const)
Мне кажется немного странным, что такая функция, которая явно является чистым аксессуаром, должна быть неконстантной. Есть ли логика, которая имеет смысл?
Это фактически const
в С++ 11. Версия С++ 03 является неудачной ошибкой.
Это известное расхождение в стандартной библиотеке. Вы можете найти дополнительную информацию об этом здесь: http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#365
is_open()
для:Поток связан с файлом, если либо предыдущий вызов член открылся успешно или если объект был успешно построен с использованием параметризованного конструктора, а close не был вызван с тех пор.
Итак, используйте его сразу после open()
/close()
. Вот почему старый is_open()
неконстантный.;)
bool good() const
.