我有一個聯盟:初始化骨料工會
union my_union
{ short int Int16; float Float; };
我想創建:
const my_union u1 = ???;
const my_union u2 = ???;
並初始化它們的值分別爲不同的類型: U1 - > INT16 u2 - > float
我該怎麼做?如果上述不可行,是否有任何解決方法?
我有一個聯盟:初始化骨料工會
union my_union
{ short int Int16; float Float; };
我想創建:
const my_union u1 = ???;
const my_union u2 = ???;
並初始化它們的值分別爲不同的類型: U1 - > INT16 u2 - > float
我該怎麼做?如果上述不可行,是否有任何解決方法?
工會可以有任意數量的構造函數 - 這會爲沒有構造任何數據類型的工作,所以你的例子是很好,如果排除字符串(或使指針字符串)
#include <string>
using namespace std;
union my_union
{
my_union(short i16):
Int16(i16){}
my_union(float f):
Float(f){}
my_union(const string *s):
str(s){}
short int Int16; float Float; const string *str;
};
int main()
{
const my_union u1 = (short)5;
const my_union u2 = (float)7.;
static const string refstr= "asdf";
const my_union u3 = &refstr;
}
還有就是要創建更復雜的方式類,由union擁有,類必須有一個選擇器(使用標量或向量數據類型) - 正確地銷燬字符串。
工會不能包含非POD數據類型,如字符串,所以你的問題是沒有意義的。
儘管對非POD構件數據的禁令(如上闡述)標準說:
在8.5.1.15:當一個聯合用括號括起 初始化初始化時,大括號,應僅包含一個初始值爲 聯盟的第一個成員。
所以
應該工作,但不能被用於第二(和隨後的)的成員這種形式。
OP修改後,問題仍然存在 – Maciek 2009-08-05 09:09:34
有點不正確:union可以有任何數據類型,它沒有構造函數或析構函數。 – Dewfy 2009-08-05 09:35:32
也是不重要的賦值運算符 – 2009-08-05 09:43:39