2010-01-27 9 views

Respuesta

50

que necesita:

  • una referencia para que pueda acceder a excepción polimórfica
  • una constante para aumentar el rendimiento, y decirle al compilador que no se va a modificar el objeto

Este último no es tanto como importante como el primero, pero la única razón real para abandonar const sería indicar que desea hacer cambios a la excepción (generalmente útil solo si desea volver a lanzarlo con cont ext a un nivel superior).

+15

'a const para aumentar el rendimiento' ¿Cómo es eso? –

+1

"decirle al compilador que no va a modificar el objeto": supongo que podría ser útil si pasa el objeto como parámetro a una llamada de función. –

+1

¿qué quiere decir con 'acceder a la excepción de forma polimórfica'? – mango

5

Se le dice al compilador que no se va a llamar cualquier función que modifican la excepción, que puede ayudar a optimizar el código. Probablemente no haga mucha diferencia, pero el costo de hacerlo también es muy pequeño.

0

Por la misma razón que usa una const.

+0

Y por la misma razón que por qué preferir referencias sobre punteros :-) –

+11

Simple y simplista, pero en realidad no es una respuesta. – Omnifarious

1

¿va a modificar la excepción? si no, también puede ser const. misma razón que usted debe usar const en otro sitio (que digo debe porque en realidad no hace mucha diferencia en la superficie, podría ayudar a los compiladores, y también ayudar a los programadores utilizar el código correctamente y no hacer cosas que no debería)

manejadores de excepciones, pueden ser específicos de la plataforma, y ​​pueden poner excepciones en lugares divertidos porque no esperan que cambien?

18

Básicamente no hay ninguna razón en absoluto.

objetos de excepción viven en su propio espacio de memoria y daga; para que no tenga que preocuparse por capturar excepciones creadas en expresiones temporales.

Todo lo que hace es prometer que no modificará el objeto de excepción, pero dado que los objetos de excepción deben tener una interfaz inmutable & Dagger;, realmente no hay nada práctico aquí.

Sin embargo, podría hacer que se sienta cálido y acogedor cuando lo lea — eso es lo que es para mí!

y daga; Tienen su propia pila especial local de subprocesos.
& Dagger;Descargo de responsabilidad: Boost.Exception rompe esto con el fin de hacer cosas funky y agregar detalles de excepción, después de la construcción. ¡Pero esto es piratería!

+0

¿Podrían detallar 'Los objetos de excepción viven en su propio espacio de memoria'? ¿Tiene una buena lectura para sugerir al respecto? –

+0

@LeFlou: Podría indicarle el estándar, pero sería un poco engañoso considerar que "una buena lectura" ...: P –

+0

Definitivamente sí, sería interesante aprender más sobre esto desde un punto estándar de ver. Estoy leyendo [Informe técnico sobre el rendimiento de C++] (http://www.open-std.org/jtc1/sc22/wg21/docs/TR18015.pdf), ¿tiene un documento más relevante? –

Cuestiones relacionadas