Re: static_cast vs. reinterpret_cast
"Alan McKenney" <alan_mckenney1@yahoo.com> schrieb im Newsbeitrag
news:1191250929.511833.42950@k79g2000hse.googlegroups.com...
On Sep 27, 12:46 pm, Kurt Stege <kurt.st...@siemens.com> wrote:
Alan McKenney wrote:
Unfortunately, C++ considers "char" and "unsigned char"
to be unrelated types as far as pointers to them go, so you can't
do static_cast<const char *> on a "const unsigned char *"
Yes...
So far, I know of no alternative that doesn't copy the data
I am using in these cases static cast(s), however, it does
not make things really better:
static_cast<const char *>(static_cast<const void *>(...))
This gets rid of the reinterpret cast, and covers the undefined
behaviour a little bit ;-)
There was a recent thread on this, and the general
conclusion was that your double static_cast was no
better than reinterpret_cast<> in terms
how well-defined the behavior is.
I remember a thread on this issue some time ago where the general conclusion
was that according to the standard, it is well-defined to convert a pointer
to any type to a pointer to char using the following functions:
// Converts a pointer of any non-const
// type to a non-const char pointer.
inline char* char_ptr( void* p ) throw()
{ return static_cast<char*>( p ); }
// Converts a pointer of any constant
// type to a constant char pointer.
inline const char* char_ptr( const void* p ) throw()
{ return static_cast<const char*>( p ); }
Example:
int main()
{
SomeObject* pobj = ...;
const int* pint = ...;
// Convert non-const pointer.
char* p1 = char_ptr( pobj );
// Convert const pointer.
const char* p2 = char_ptr( pint );
return 0;
}
--
Matthias Hofmann
Anvil-Soft, CEO
http://www.anvil-soft.com - The Creators of Toilet Tycoon
http://www.anvil-soft.de - Die Macher des Klomanagers
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]