我有一个类似于下面的函数,它是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 ( );
(即非常数)
对我来说,像这样的函数 - 显然是一个纯粹的存取器 - 似乎有点奇怪 - 应该是非常量的。背后的逻辑是否合理?
答案 0 :(得分:21)
事实上,在C ++ 11中它是const
。 C ++ 03版本是一个不幸的错误。
答案 1 :(得分:13)
这是标准库中的已知差异。您可以在此处找到有关它的更多信息: http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#365
答案 2 :(得分:-1)
is_open()
的内容是什么:如果以前调用过,则流与文件关联 成员打开成功或者对象是否成功构建 使用参数化构造函数,并且尚未调用close 因为
因此,请在open()
/ close()
之后立即使用它。这就是旧is_open()
非常数的原因。 ;)
bool good() const
。