C ++初始化匿名结构

时间:2010-10-26 04:52:08

标签: c++ struct anonymous-types

我仍在赚取我的C ++翅膀;我的问题是,如果我有这样的结构:

struct Height
{
    int feet;
    int inches;
};

然后我有一些像这样的行:

Height h = {5, 7};
Person p("John Doe", 42, "Blonde", "Blue", h);

我喜欢通过花括号初始化结构,但我更喜欢上面的一行,在一个匿名的Height结构中。我该怎么做呢?我最初的天真方法是:

Person p("John Doe", 42, "Blonde", "Blue", Height{5,7});

但这不起作用。我离标记太远了吗?

2 个答案:

答案 0 :(得分:15)

你不能,至少不是现在的C ++;大括号初始化是初始化语法的一部分,不能在别处使用。

您可以将构造函数添加到Height

struct Height
{
    Height(int f, int i) : feet(f), inches(i) { }
    int feet, inches;
};

这允许您使用:

Person p("John Doe", 42, "Blonde", "Blue", Height(5, 7));

不幸的是,由于Height不再是聚合,因此您无法再使用大括号初始化。但构造函数调用初始化同样简单:

Height h(5, 7);

答案 1 :(得分:4)

标准C ++(C ++ 98,C ++ 03)不支持此功能。

g ++支持是一种语言扩展,我似乎记得C ++ 0x会支持它。您必须检查g ++语言扩展和/或可能C ++ 0x的语法。

对于当前标准的C ++,只需命名Height实例,就像你已经完成的那样,然后使用名称。

干杯&第h。,