c++ performance explicit-constructor

¿Hay algún inconveniente en marcar explícitamente a todos los constructores de C++?



performance explicit-constructor (3)

Algunas veces, al refactorizar el código, me he olvidado de agregar la palabra clave explicit al agregar un parámetro a un constructor sin parámetros previamente, o al eliminar parámetros de un constructor de parámetros múltiples previamente. Para evitar esto, me he acostumbrado a marcar explicit cada constructor, sin importar los muchos argumentos que tenga. (Excepto, por supuesto, aquellos constructores para los que realmente quiero una conversión implícita).

¿Hay algún inconveniente en esto? ¿Actuación? ¿Tiempo de compilación?


No estoy seguro, pero creo que tiene algunas consecuencias inesperadas para que el constructor de copias sea explicit . Aparte de eso, creo que estás bien.


No habrá diferencia de rendimiento en tiempo de ejecución. La diferencia de tiempo de compilación es probable que no sea detectable.

Creo que no hay ningún daño en declarar a todos los constructores con argumentos explicit , excepto que puede parecer redundante para aquellos con más de un argumento.

Si declara un tipo con un constructor predeterminado explicit , puede tener problemas para usarlo con los tipos de colección.


No tiene ningún inconveniente. Será seguro para el futuro, ya que en C ++ 0x, los constructores de múltiples parámetros participan en las inicializaciones utilizando listas de inicialización de elementos múltiples y pueden prohibirse su uso en los casos en que solo se aplican conversiones implícitas utilizando explicit .

Entonces, si descubre que un constructor multiparamétrico dado no representa lógicamente el valor de su clase, creo que es bueno hacerlo explicit (ejemplo: establecería un constructor de contenedor (size_t size, T defaultValue) sea explicit , mientras que constructor de pair , (T first, U second) se establece no explícito).