Re: conversion from array to reference to pointer
uvts_cvs@yahoo.com wrote:
Hi everybody do you think this little chunk of code is legal and leads
to defined results?
int main()
{
char v[] = "";
char *const& p = reinterpret_cast<char*const&>(v);
Legal. v is an lvalue with type char[1]. The standard says
that you can use reinterpret_cast to convert any lvalue to a reference
of any other type (practically). Of course, since v isn't a pointer, p
(which refers to it) can't be accessed.
return *p;
And this is undefined behavior. Logically, you've taken the address of
v, and told the compiler that the data at that address is a pointer.
Which you then dereference. You can't just take any random memory
address, tell the compiler its a pointer, and then deference it.
}
And the next one?
int main()
{
char v[] = "";
char *& p = reinterpret_cast<char*&>(v);
return *p;
}
No difference.
Note that these examples are syntactically legal only because the
compiler has no reason to apply the array-to-pointer conversion. I
would not be surprised if some compilers applied it anyway, and said
that the code was illegal, because you are trying to convert a
non-lvalue to a reference (which isn't allowed in a reinterpret_cast).
--
James Kanze GABI Software
Conseils en informatique orient9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S9mard, 78210 St.-Cyr-l'cole, France, +33 (0)1 30 23 00 34
---
[ 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 ]