2011-03-08 25 views
14
virtual const char* what() const throw() 
{ 

} 

AFAIK es una función que devolverá un puntero constante a un carácter de caracteres mutable. El resto no estoy seguro. ¿Alguien podría ayudar?qué significa esta declaración de función en C++

+5

¿Qué parte de esto quieres que te expliquen? –

Respuesta

18

En cuanto a la parte const throw():

  • const significa que esta función (que es una función miembro) no cambiará el estado observable del objeto se llama en. El compilador hace cumplir esto al no permitirle llamar a métodos que no sean const, y al no permitirle modificar los valores de los miembros.
  • throw() significa que le promete al compilador que esta función nunca permitirá que se emita una excepción. Esto se llama una especificación de excepción , y (abreviatura larga) es inútil y posiblemente engañosa.
+1

Una vista interesante de las especificaciones de excepción es [aquí] (http://www.gotw.ca/publications/mill22.htm). [Larry Osterman] (http://blogs.msdn.com/b/larryosterman/archive/2006/03/22/558390.aspx) también escribió un artículo de blog sobre él, y hay una pregunta al respecto aquí en Stack Overflow: [¿Hay algún uso para C++ throw decoration?] (http://stackoverflow.com/questions/1410226/is-there-any-use-for-c-throw-decoration). –

7

Significa que what es una función de miembro virtual que devuelve const char* que se puede invocar en objetos const (la const en el extremo). throw() significa que es tipo de garantías de no tirar nada.

la salida exception specifications in C++, y tenga en cuenta que están en desuso en C++ 0x :)

+0

+1 para el enlace muy interesante. ¡No sabía de este lado! ¡Gracias! – marscode

3

función virtual que devuelve un puntero a un tampón no modificable de caracteres, sin argumentos, no modifica ninguno de variables miembro la clase pertenece (es decir, puede invocarse en instancias const) y no arrojará ningún tipo de excepción.

+0

La decoración 'throw()' significa que no arrojará ninguna excepción, no que pueda arrojar ningún tipo. –

+0

Gracias, lo cambié. – datenwolf

1

la función what() no toma ningún parámetro, devuelve pointer a (por lo que no puede modificar a lo que apunta el puntero, pero puede modificar el puntero). Es virtual, por lo que su comportamiento se puede anular en las clases derivadas. No arrojará excepciones. No modifica ningún miembro de la clase a la que pertenece.

+1

Hmm, no. La decoración 'throw()' significa que no lanzará ninguna excepción. –

+0

Sí, tienes razón. Eso es lo que tenía la intención de escribir. No tengo idea de lo que estaba pensando :) ¡Gracias! Corregido –

1

Es una función virtual que devuelve un const char *. El const al final del método significa que no está permitido cambiar el estado del objeto al que se llama. Lo que significa que no está permitido modificar ninguna variable miembro del objeto. throw() parte es la especificación de excepción que dice que el método no arroja ninguna excepción.

0

Clase base para todas las excepciones de la biblioteca.

Esta es la clase base para todas las excepciones lanzadas por la biblioteca estándar y por ciertas expresiones de lenguaje. Usted es libre de derivar sus propias clases de excepción, o usar una jerarquía diferente, o arrojar datos que no sean de clase (por ejemplo, tipos fundamentales).

0
  1. virtual: Esto significa que la función puede ser reimplantado en las subclases, y llama al método a través de un puntero de clase base va a terminar llamando a la reimplementación.

  2. const char * no es un puntero constante a un char mutable - es al revés.

  3. const significa que este método incluso se puede invocar en instancias const de esta clase.

  4. throw() significa que este método no arrojará ninguna excepción.

0

En realidad devuelve un mutable puntero a un bloque de caracteres constante.

El resto ya ha sido explicado por otros.

6

De izquierda a derecha:

  • virtual - esta función puede ser anulado en las clases derivadas
  • const char* - esta función devuelve un puntero modificable a una constante (array de) Char
  • what() - este la función no toma los parámetros
  • const - esta función no modifica los miembros (no mutable) del objeto al que se llama, y ​​por lo tanto puede ser cal led en const instancias de su clase
  • throw() - no se espera que esta función arroje ninguna excepción. Si lo hace, se llamará unexpected.
0

En cuanto a la const después de las funciones: en realidad hay dos significados, lo que entiende el compilador, y cuáles son las habituales convenciones de programación hacer que signifique. En lo que se refiere al compilador , todo lo que hace es convertir este puntero en un puntero a const. La const se puede descartar o se pueden usar varias indirecciones para modificar el estado observable del objeto. Al final, significa lo que el programador quiere que signifique.

La convención usual, hoy en día, es que significa que el estado observable del objeto no cambiará. Para algunos definición razonable de "estado observable".

En cuanto a la especificación de la excepción: una excepción vacía especificación es una garantía de no tirar, y es muy importante al considerar la seguridad de excepciones. La siguiente versión de la norma ha dejado de tener en cuenta las especificaciones de excepción, pero sí proporciona algún otro medio para especificar que una función será nunca arrojar.

Cuestiones relacionadas