Re: Endian Functions
Alberto Ganesh Barbati posted:
Frederick Gotham ha scritto:
Bob Bell posted:
I was talking about the fact that after reinterpret_cast'ing the
pointer, you then dereference it.
A char has no trap representations, and so it is safe to access the
bytes of any object in memory as if it were a char, signed char or
unsigned char:
Could you please quote the clause in the C++ standard that guarantees
that?
I was working off common-sense more than anything. Any object of any type
is stored in memory as a finite, fixed-length sequence of bytes, whereby
a byte consists of CHAR_BIT bits.
If the memory is ours to access, then there is no reason why we can't
access it in whatever way we please. Take a look at the following snippet
for instance:
#include <cstdlib>
int main()
{
void * const p = std::malloc(512);
if(!p) return -1;
int *p_int = (int*)p;
double *p_double = (double*)p;
void **p_voidptr = (void**)p;
*p_int = 7;
*p_double = 42.3;
*p_voidptr = p_double + 3;
p_int += 54;
p_double += 87;
p_voidptr += 123;
*p_int = 4235;
*p_double = 35.2352;
*p_voidptr = &p_voidptr;
free(p);
}
I don't know if the Standard spells it out in black and white that you
can access memory however you like, but I don't think it has to.
PS: C-style casts are of no help, as they are defined in terms of
const_cast/static_cast/reinterpret_cast (5.4/5).
The new-style casts take up too much horizontal screen space.
--
Frederick Gotham
---
[ comp.std.c++ is moderated. To submit articles, try just posting with ]
[ your news-reader. If that fails, use mailto:std-c++@ncar.ucar.edu ]
[ --- Please see the FAQ before posting. --- ]
[ FAQ: http://www.comeaucomputing.com/csc/faq.html ]