2011-07-19 8 views

Respuesta

0

Si realmente necesita hacer eso, reinterpret_cast. Es mucho más comprensible que el baile static_cast.

4

reinterpret_cast se debe utilizar para devolver un tipo integral a su tipo original. Si el char * realmente fue originalmente T *, entonces reinterpret_cast hará lo correcto. Si está jugando a otros juegos, entonces debe usar static_cast

+0

¿qué tal este caso? Aquí tengo algo diferente de lo que dijo, tengo un grupo de memoria creado de esta manera 'new char [size]' y allí estoy creando objetos de tipo T a través del operador de ubicación new, y para determinar el lugar donde se debe crear el nuevo objeto Estoy usando 'some_cast (buffer) + next_object_position' y esto ** some_cast ** es lo que estoy preguntando. –

2

Use reinterpret_cast porque eso es lo que está haciendo conceptualmente. static_cast se usa cuando espera que el compilador sepa cómo hacer la conversión. Es un mecanismo de seguridad porque el compilador generará un error si realmente no sabe cómo hacerlo. Reinterpret_cast se usa cuando quieres decir "créeme, los bits aquí son de este tipo".

1

Nadie es mejor, la pregunta es cuál es menos malo.

Se garantiza que el static_cast funciona si el búfer es realmente una T. Puede convertir su dirección a void* y viceversa. Si es de otro tipo, depende de la implementación si funciona o no. Los problemas de alineación son solo uno de los posibles problemas.

El uso de un reinterpret_cast siempre depende de la implementación. Como tal, no funciona mejor, pero al menos hace que sea obvio que este no es un código portátil.

Por lo tanto, usaría el reinterpret_cast aquí.