En C++, la conversión de estilo C se define (§ 5.4) en términos de C++ - estilo arroja. Entonces, por cada elenco que se puede hacer al estilo C, hay un molde de estilo C++ coincidente (casi).
El "casi" es que los modelos de estilo C ignoran la accesibilidad de la clase base. Es decir, no hay un equivalente de C++ - Reparto estilo para lo siguiente:
struct foo {};
struct bar : private foo {};
bar b;
foo* f = (foo*)&b; // only way this can be done in a well-defined manner
lo tanto, no se no es estrictamente de habla completamente posible zanja de estilo C arroja. Pero la cantidad de áreas en las que una (combinación de) estilos de C++ no es suficiente es poca.
Lo anterior es la "respuesta de idioma". Lo que estás experimentando no tiene nada que ver con los lanzamientos de estilo C contra los lanzamientos de C++, sino solo con la implementación del compilador. Las advertencias son absolutamente específicas de la implementación y no tienen nada que ver con C++.
así que no hacen el error de usar sus hallazgos en este compilador particular, en esta situación particular para concluir las cosas sobre C++, en general,.
'short value_c (0xF00D)' - también: ¿qué compilador te da advertencias de truncamiento? Mi GCC es lo suficientemente inteligente como para no en las tres situaciones. –
C++ proyecta la cobertura de todos los usos del operador de elenco en C. – wilhelmtell
En lo que respecta al idioma, no hay diferencia entre 'static_cast' y un molde de estilo C en este caso.Si el compilador decidió dar una advertencia de que "son las 3AM hora local, realmente debería irse a la cama", es gratis hacerlo ... –