Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > Multiple union member initialization

Reply
Thread Tools

Multiple union member initialization

 
 
Ricky Lung
Guest
Posts: n/a
 
      08-18-2004
struct Foo {
union {
int& i;
float& j;
};
Foo(int& val) :
i((int&)val), j((float&)val)
{}
};

GCC will fail to compile the above code because multiple union member is
being initialized.
But if I modify the code to just only init the reference i:
Foo(int& val) :
i((int&)val), j((float&)val)
{}
it also pop out error because reference j is not been initialized.

What's the solution to the above problem? How the C++ standard say about
using reference in union?

--
exmat - C++ matrix library
http://exmat.sourceforge.net


~ Samba, more than a low cost File and Printer server ~

-- Let us OpenSource --


-----= Posted via Newsfeeds.Com, Uncensored Usenet News =-----
http://www.newsfeeds.com - The #1 Newsgroup Service in the World!
-----== Over 100,000 Newsgroups - 19 Different Servers! =-----
 
Reply With Quote
 
 
 
 
Karl Heinz Buchegger
Guest
Posts: n/a
 
      08-18-2004
Ricky Lung wrote:
>
> struct Foo {
> union {
> int& i;
> float& j;
> };
> Foo(int& val) :
> i((int&)val), j((float&)val)
> {}
> };
>
> GCC will fail to compile the above code because multiple union member is
> being initialized.
> But if I modify the code to just only init the reference i:
> Foo(int& val) :
> i((int&)val), j((float&)val)
> {}
> it also pop out error because reference j is not been initialized.
>
> What's the solution to the above problem? How the C++ standard say about
> using reference in union?


I haven't looked it up right now, but if I remember correctly, then
at most *one* member of a union can have an initialization. Since
your union consists of 2 references, and references have to be initialzed ....


--
Karl Heinz Buchegger

 
Reply With Quote
 
 
 
 
Ricky Lung
Guest
Posts: n/a
 
      08-18-2004
Yes, and it's a contradiction.

--
exmat - C++ matrix library
http://exmat.sourceforge.net
"Karl Heinz Buchegger" <> wrote in message
news:...
> Ricky Lung wrote:
> >
> > struct Foo {
> > union {
> > int& i;
> > float& j;
> > };
> > Foo(int& val) :
> > i((int&)val), j((float&)val)
> > {}
> > };
> >
> > GCC will fail to compile the above code because multiple union member is
> > being initialized.
> > But if I modify the code to just only init the reference i:
> > Foo(int& val) :
> > i((int&)val), j((float&)val)
> > {}
> > it also pop out error because reference j is not been initialized.
> >
> > What's the solution to the above problem? How the C++ standard say about
> > using reference in union?

>
> I haven't looked it up right now, but if I remember correctly, then
> at most *one* member of a union can have an initialization. Since
> your union consists of 2 references, and references have to be initialzed

.....
>
>
> --
> Karl Heinz Buchegger
>



~ Samba, more than a low cost File and Printer server ~

-- Let us OpenSource --


-----= Posted via Newsfeeds.Com, Uncensored Usenet News =-----
http://www.newsfeeds.com - The #1 Newsgroup Service in the World!
-----== Over 100,000 Newsgroups - 19 Different Servers! =-----
 
Reply With Quote
 
Richard Herring
Guest
Posts: n/a
 
      08-18-2004
In message <>, Ricky Lung <> writes
>struct Foo {
> union {
> int& i;
> float& j;
> };
> Foo(int& val) :
> i((int&)val), j((float&)val)


All other considerations aside, how could you initialise a reference to
float using an int? What would you expect to happen?

> {}
>};
>
>GCC will fail to compile the above code because multiple union member is
>being initialized.
>But if I modify the code to just only init the reference i:
>Foo(int& val) :
> i((int&)val), j((float&)val)
> {}
>it also pop out error because reference j is not been initialized.
>
>What's the solution to the above problem? How the C++ standard say about
>using reference in union?
>


What's the problem you're trying to solve by using a union?

--
Richard Herring
 
Reply With Quote
 
Ricky Lung
Guest
Posts: n/a
 
      08-19-2004
The long stor is, I am make a matrix class with SIMD enabled.
Some specific funtion I needed to use Intel SSE intrinsic function like
_mm_add_ps.
Therefore I want to keep the intrinsic type and a C-array in a union
something like
union {
__m128;
float[4];
};

But problem comes out when I use reference (because of some reason, I have
to use reference).
Since the cost of one reference is 4 bytes, by using union of reference, the
size of my object (reference to vector of 4 flaot) will be just 4 bytes
insteal of 8 bytes. That the reason I use union of reference

--
exmat - C++ matrix library
http://exmat.sourceforge.net

"Richard Herring" <junk@[127.0.0.1]> wrote in message
news:...
> In message <>, Ricky Lung <> writes
> >struct Foo {
> > union {
> > int& i;
> > float& j;
> > };
> > Foo(int& val) :
> > i((int&)val), j((float&)val)

>
> All other considerations aside, how could you initialise a reference to
> float using an int? What would you expect to happen?
>
> > {}
> >};
> >
> >GCC will fail to compile the above code because multiple union member is
> >being initialized.
> >But if I modify the code to just only init the reference i:
> >Foo(int& val) :
> > i((int&)val), j((float&)val)
> > {}
> >it also pop out error because reference j is not been initialized.
> >
> >What's the solution to the above problem? How the C++ standard say about
> >using reference in union?
> >

>
> What's the problem you're trying to solve by using a union?
>
> --
> Richard Herring



~ Samba, more than a low cost File and Printer server ~

-- Let us OpenSource --


-----= Posted via Newsfeeds.Com, Uncensored Usenet News =-----
http://www.newsfeeds.com - The #1 Newsgroup Service in the World!
-----== Over 100,000 Newsgroups - 19 Different Servers! =-----
 
Reply With Quote
 
Richard Herring
Guest
Posts: n/a
 
      08-19-2004
In message <4124f6e2$>, Ricky Lung <> writes

[please don't top-post]

>--


[please don't put quoted material after your sig-separator - any
reasonable news client truncates it, making sensibly-quoted followups
difficult]

>"Richard Herring" <junk@[127.0.0.1]> wrote in message
>news:...
>> In message <>, Ricky Lung <> writes
>> >struct Foo {
>> > union {
>> > int& i;
>> > float& j;
>> > };
>> > Foo(int& val) :
>> > i((int&)val), j((float&)val)

>>
>> All other considerations aside, how could you initialise a reference to
>> float using an int? What would you expect to happen?


I still don't understand what you think you're doing here.
>>
>> > {}
>> >};
>> >
>> >GCC will fail to compile the above code because multiple union member is
>> >being initialized.
>> >But if I modify the code to just only init the reference i:
>> >Foo(int& val) :
>> > i((int&)val), j((float&)val)
>> > {}
>> >it also pop out error because reference j is not been initialized.
>> >
>> >What's the solution to the above problem? How the C++ standard say about
>> >using reference in union?

>>
>> What's the problem you're trying to solve by using a union?
>>

>The long stor is, I am make a matrix class with SIMD enabled. Some
>specific funtion I needed to use Intel SSE intrinsic function like
>_mm_add_ps.


So we're off-topic for standard C++. Nevertheless...

>Therefore I want to keep the intrinsic type and a C-array in a union
>something like
>union {
> __m128;
> float[4];
>};


Fair enough, though you could equally use reinterpret_cast.
>
>But problem comes out when I use reference (because of some reason, I
>have to use reference). Since the cost of one reference is 4 bytes, by
>using union of reference, the size of my object (reference to vector of
>flaot) will be just 4 bytes insteal of 8 bytes.


Plus the 8 bytes somewhere else that it references. Reference members
don't save space, they just indirect. Under the hood, at the assembler
level it's just implemented as a pointer.

>That the reason I use union of reference
>

You're using the union to alias two data items of different types. The
references are indirections (in effect pointers) so you end up aliasing
the pointers, not the data. I suspect that isn't what you intend.

--
Richard Herring
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
initialization of array as a member using the initialization list aaragon C++ 2 11-02-2008 04:57 PM
error C2614: 'CYYYRegister' : illegal member initialization:'CRequest' is not a base or member Angus C++ 1 03-06-2008 11:38 AM
How to initialize an array member in the member initialization list? jut_bit_zx@eyou.com C++ 3 10-10-2005 12:10 AM
union in struct without union name Peter Dunker C Programming 2 04-26-2004 07:23 PM
map XML union to C union (and vice-versa) Matt Garman XML 1 04-25-2004 12:40 AM



Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57