studio - visual c++ descargar
¿Por qué std:: exception tiene constructores adicionales en VC++? (2)
Deshacerse de la especificación de tiro fue una buena idea. Aunque no deberían arrojarse, las especificaciones de proyección generalmente son malas.
Poner extensiones hará que el código no sea portátil, pero es probable que solucione los problemas de corte donde las personas "atrapan" una excepción std :: por valor y puede copiar la cadena localmente desde lo que está copiando.
No veo la ventaja en el int, ni de los constructores no explícitos que toman un parámetro.
Algo que noté hace un momento. Definición de exception
en la norma (18.6.1):
class exception {
public :
exception() throw();
exception(const exception &) throw();
exception& operator=(const exception&) throw();
virtual ~exception() throw();
virtual const char* what() const throw();
};
Definición de exception
en MSDN :
class exception {
public:
exception();
exception(const char *const&);
exception(const char *const&, int);
exception(const exception&);
exception& operator=(const exception&);
virtual ~exception();
virtual const char *what() const;
};
Parecería que la versión de Microsoft le permite especificar el mensaje de error para un objeto de exception
, mientras que la versión estándar solo le permite hacer eso para las clases derivadas (pero no le impide crear una exception
genérica con un mensaje no definido).
Sé que esto es bastante insignificante, pero aún así. ¿Hay alguna buena razón para esto?
Realmente no hay una buena razón. La implementación de MS ha elegido poner el manejo de cadenas en std :: exception en lugar de en cada clase derivada de él (<stdexcept>).
Como en realidad también proporcionan la interfaz requerida por el estándar, esto puede verse como una extensión conforme. Los programas que siguen el estándar funcionan como se esperaba.
Otras implementaciones no lo hacen de esta manera, por lo que los programas portátiles no deberían usar los constructores adicionales.