From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.4 X-Google-Thread: 103376,703c4f68db81387d X-Google-Thread: 109fba,703c4f68db81387d X-Google-Thread: 115aec,703c4f68db81387d X-Google-Thread: f43e6,703c4f68db81387d X-Google-Attributes: gid103376,gid109fba,gid115aec,gidf43e6,public X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news1.google.com!news3.google.com!news.glorb.com!newsread.com!news-xfer.newsread.com!nntp.abs.net!attws2!att542!ip.att.net!newsfeed3.global.lmco.com!svlnews.lmms.lmco.com!not-for-mail From: "REH" Newsgroups: comp.lang.ada,comp.lang.c++,comp.realtime,comp.software-eng Subject: Re: [OT] Re: Teaching new tricks to an old dog (C++ -->Ada) Date: Mon, 28 Mar 2005 16:52:50 -0500 Organization: Earth Message-ID: References: <4229bad9$0$1019$afc38c87@news.optusnet.com.au> <1110032222.447846.167060@g14g2000cwa.googlegroups.com> <871xau9nlh.fsf@insalien.org> <3SjWd.103128$Vf.3969241@news000.worldonline.dk> <87r7iu85lf.fsf@insalien.org> <1110052142.832650@athnrd02> <1lr611thktbau$.1dj95z21h7l5v.dlg@40tude.net> <1112022773.497341@athnrd02> <1112026376.920221@athnrd02> <1112034544.645999@athnrd02> <1112039976.169686@athnrd02> <1112045099.679682@athnrd02> NNTP-Posting-Host: 158.187.64.144 X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2800.1437 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1441 Xref: g2news1.google.com comp.lang.ada:10099 comp.lang.c++:47696 comp.realtime:1799 comp.software-eng:5436 Date: 2005-03-28T16:52:50-05:00 List-Id: "Ioannis Vranos" wrote in message news:1112045099.679682@athnrd02... > However the following code *is* portable: > > > #include > #include > > class SomeClass > { > public: > > double d; > int i; > float f; > long l; > }; > > > int main() > { > using namespace std; > > unsigned char array[sizeof(SomeClass)]; > > SomeClass obj= {1, 2, 3, 4}; > > memcpy(array, &obj, sizeof(obj)); > > SomeClass *p= reinterpret_cast(array); > > cout<d<<" "<i<<" "<f<<" "<l<<"\n"; > } > > > C:\c>temp > 1 2 3 4 > > C:\c> > > > So since this is *guaranteed* to be portable, why this isn't? > > > #include > #include > > class SomeClass > { > public: > > double d; > int i; > float f; > long l; > }; > > > int main() > { > using namespace std; > > unsigned char array[sizeof(SomeClass)]; > > SomeClass obj= {1, 2, 3, 4}; > > SomeClass *p= new(array)SomeClass(obj); > > cout<d<<" "<i<<" "<f<<" "<l<<"\n"; > } > > > C:\c>temp > 1 2 3 4 > > C:\c> > > > -- > Ioannis Vranos > No, NEITHER is portable! That both have alignment issues! Both exihibit undefined behavior. Show me where in the standard is says you may cast a pointer to a char array to a pointer of any other type (other than another signed/unsigned char*) and access it. You do this on a system that cannot handle misaligned accesses, and your program will most likely crash!