tipos retorno procedimientos por parametros linea lenguaje funciones ejemplos creacion con comandos c++

retorno - ¿Forzar a los constructores de argumento único a ser explícitos en C++?



tipos de funciones en c (6)

¡Creo que la respuesta es no!

Lo siento, no es una respuesta muy constructiva. ¡Espero que alguien más pueda saber más!

Por defecto, en C ++, se puede usar un constructor de argumento único como operador de conversión implícito. Esto se puede suprimir marcando el constructor como explícito.

Preferiría hacer que "explícito" sea el predeterminado, de modo que el compilador no pueda usar silenciosamente estos constructores para la conversión.

¿Hay alguna manera de hacer esto en C ++ estándar? En su defecto, ¿hay algún pragma (o similar) que funcione en Microsoft C ++ para hacer esto? ¿Qué pasa con g ++ (no lo usamos, pero podría ser información útil)?



No hay tal opción disponible en C ++ estándar, y tampoco creo que exista en Visual Studio.


No, tienes que hacerlo todo a mano. Es un dolor, pero sin duda debería tener el hábito de hacer que los constructores de argumento único sean explícitos. No puedo imaginar el dolor que tendrías si encontraras una solución y luego tuvieras que portar el código a otra plataforma. Por lo general, debes alejarte de las extensiones de compilador como esta porque harán que el código sea menos portátil.


Podría ser bastante desagradable para cualquier encabezado que tengas. Como <vector> , o cualquiera de los encabezados de Boost. También causaría bastantes informes de errores falsos. Entonces, no, no espero que un compilador agregue un #pragma así.


Si hubiera una opción pragma o de línea de comando que hiciera que los constructores fueran explícitos por defecto, ¿cómo declararía uno que no sea explícito? Tendría que haber otro token o pragma específico del compilador para poder declarar un constructor de conversión implícito.