【发布时间】:2012-07-13 08:14:41
【问题描述】:
我有一个类似于下面的函数,它是 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流可以做什么? -
在这里就这个主题进行很好的讨论:gcc.gnu.org/ml/libstdc++/2004-08/msg00105.html
-
@Nim:可能不多,但这不是重点。关键是检查流是否打开的操作不应该在逻辑上改变它——它只是一个检查。我的
checkSomeStuff函数是并且应该是 const - 它是一个访问器。我不希望它是非常量纯粹因为is_open()是非常量 - 这似乎不对。 -
如果您的编译器没有实现库 DR 365,您可以改用
outputFile.rdbuf()->is_open()