为什么`is_open()`非const?

Com*_* 10 24 c++ ofstream

我有一个类似于下面的函数,它是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
Run Code Online (Sandbox Code Playgroud)

但是,似乎我不能这样做,因为is_open()声明为:

bool is_open ( );
Run Code Online (Sandbox Code Playgroud)

(即非常数)

对我来说,像这样的函数 - 显然是一个纯粹的访问器 - 似乎有点奇怪 - 应该是非常量的.背后的逻辑是否合理?

Jon*_*Jon 21

它实际上是const在C++ 11中.C++ 03版本是一个不幸的错误.


Leo*_*ard 13

这是标准库中的已知差异.您可以在此处找到有关它的更多信息:http: //www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#365