2011-01-23 1055 views

Respuesta

2

No hay ninguna diferencia. Es una cuestión de preferencia. Estos son moldes antiguos

+5

-1 Esta es información falsa. – Omnifarious

+0

@Charles Bailey - Cometí un error. Ya es demasiado tarde para arreglarlo. Lo siento @ user384706. – Omnifarious

3

No hay diferencia. Oficialmente, el primero le dice al compilador que el valor es un número entero. Probablemente esto no genere ningún código adicional. La llamada de función es una llamada real que realiza internamente el otro tipocast. Un compilador inteligente optimizará esto, por lo que en realidad son lo mismo.

5

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é.

+2

Esto es completamente falso. 'clase A {operador int() const; }; int test (A a) {return int (a); } 'funciona perfectamente aunque' int' no tiene constructor. Un estilo de función emitido con un solo parámetro tiene exactamente el mismo efecto que el elenco de estilo C equivalente. –

+0

@ Charles Bailey - Leí más y descubrí que estaba equivocado. :-) Arreglé mi respuesta. – Omnifarious

+0

Fundición de estilo funcional con punteros: 'typedef void * voidp; voidp fred = voidp (&c); ' –

1

Depende de dónde lo use y cómo. Es decir, si tiene valores o punteros (o punteros de punteros).

Con C++, debe leer en * _cast <> y utilizarlos en su lugar.