Compartir a través de


Cómo los bloques Catch son Evaluated (C++)

C++ permite producir excepciones de cualquier tipo, aunque en general se recomienda para producir los tipos que son derivados de std:: excepción.La excepción de C++. se puede detectar mediante un controlador de Catch que especifique el mismo tipo que la excepción, o por un controlador que puede detectar cualquier tipo de excepción.

Si el tipo de excepción es una clase, que también tiene una clase base (o clases), se puede detectar por los controladores que aceptan las clases base del tipo de excepción, así como referencias a las bases del tipo de excepción.Observe que cuando se detecta una excepción por una referencia, está enlazada al objeto iniciado real de la excepción; si no, es una copia (igual que un argumento de una función).

Cuando se produce una excepción, se puede detectar por los siguientes tipos de controladores de Catch :

  • Un controlador que acepte cualquier tipo (mediante la sintaxis de puntos suspensivos).

  • un controlador que acepta el mismo tipo que el objeto de excepción; dado que es una copia, se omite const y modificadores de volatile .

  • Un controlador que acepta una referencia al mismo tipo que el objeto de excepción.

  • Un controlador que acepta una referencia a un formulario de const o de volatile el mismo tipo que el objeto de excepción.

  • Un controlador que acepta una clase base del mismo tipo que el objeto de excepción; dado que es una copia, se omite const y modificadores de volatile .El controlador de Catch para una clase base no debe preceder al controlador de Catch para la clase derivada.

  • Un controlador que acepta una referencia a una clase base del mismo tipo que el objeto de excepción.

  • Un controlador que acepta una referencia a un formulario de const o de volatile de una clase base el mismo tipo que el objeto de excepción.

  • Un controlador que acepta un puntero al que un objeto iniciado el puntero se puede convertir mediante reglas de conversión de puntero estándar.

El orden en que los controladores de Catch aparecen es importante, porque examinan controladores para un bloque dado de intento en orden de aparición.Por ejemplo, es un error para colocar el controlador para una clase base antes del controlador para una clase derivada.Una vez encontrado un controlador coincidente de Catch , no examinan controladores subsiguientes.Como resultado, un controlador de Catch de puntos suspensivos debe ser el último controlador para el bloque de intento .Por ejemplo:

// ...
try
{
    // ...
}
catch( ... )
{
    // Handle exception here.
}
// Error: the next two handlers are never examined.
catch( const char * str )
{
    cout << "Caught exception: " << str << endl;
}
catch( CExcptClass E )
{
    // Handle CExcptClass exception here.
}

En este ejemplo, el controlador de Catch de puntos suspensivos es el único controlador se examina que.

Vea también

Referencia

Control de excepciones de C++