c++ - good - ofstream open
¿Por qué `is_open()` no es constante? (3)
De hecho es const
en C ++ 11. La versión C ++ 03 es un error desafortunado.
Tengo una función similar a la de abajo, que es constante y necesita verificar que una secuencia de archivos esté abierta antes de continuar:
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
Sin embargo, parece que no puedo hacer esto ya que is_open()
se declara como:
bool is_open ( );
(es decir, no constantes)
A mí me parece un poco extraño que una función como esta, que es claramente un acceso puro, no sea una constante. ¿Hay una lógica detrás de esto que tenga sentido?
Esta es una discrepancia conocida en la biblioteca estándar. Puede encontrar más información al respecto aquí: http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#365
- Veamos en CPPReference, que es
is_open()
para:
La secuencia se asocia con un archivo si una llamada previa a un miembro abierto tuvo éxito o si el objeto se construyó con éxito usando el constructor parametrizado, y desde entonces no se ha llamado a cerrar.
Por lo tanto, úselo inmediatamente después de open()
/ close()
. Es por eso que el antiguo is_open()
non-const. ;)
- Use
bool good() const
lugar.