Подтвердить что ты не робот

Почему `is_open()` не-const?

У меня есть функция, аналогичная приведенной ниже, которая является константой, и необходимо проверить, что поток файлов открыт до продолжения:

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)

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

4b9b3361

Ответ 1

Это фактически const в С++ 11. Версия С++ 03 является неудачной ошибкой.

Ответ 3

  • Посмотрите на CPPReference, что есть is_open() для:

Поток связан с файлом, если либо предыдущий вызов член открылся успешно или если объект был успешно построен с использованием параметризованного конструктора, а close не был вызван с тех пор.

Итак, используйте его сразу после open()/close(). Вот почему старый is_open() неконстантный.;)

  • Вместо этого используйте bool good() const.