Aparentemente estaba equivocado en mi corte inicial en una respuesta. Son más o menos equivalentes. Y aunque los nombres de tipos compuestos como long long
o void *
no pueden usar la sintaxis funcional directamente (es decir, long long(val)
no funciona), el uso de typedef
puede solucionar este problema.
Ambas anotaciones son muy malas y deben evitarse. Por ejemplo:
const char c = 'a';
void *fred = (void *)(&c);
funciona, y no debería.
Tanto la notación de conversión de estilo C a veces se comportan como static_cast
, a veces como const_cast
, a veces como reinterpret_cast
, o incluso una combinación de los dos dependiendo de la situación exacta en la que se utiliza. Esta semántica es bastante compleja y no siempre es fácil decir exactamente qué está sucediendo en una situación determinada.
He ido a utilizar en su mayoría modelos de estilo C++ static_cast<type>(val)
, y nunca uso yesos de estilo C. Basado en mi investigación para esta pregunta, también voy a dejar de usar moldes de función para cualquier cosa. La pregunta "C++ cast syntax styles" tiene una respuesta excelente (la aceptada) que detalla por qué.
Vea también: http://stackoverflow.com/questions/32168/c-cast-syntax-styles –