代码之家  ›  专栏  ›  技术社区  ›  dreadwail

C++初始化匿名结构

  •  11
  • dreadwail  · 技术社区  · 14 年前

    我仍然在获取C++的翅膀,我的问题是我是否有这样的结构:

    struct Height
    {
        int feet;
        int inches;
    };
    

    然后我写了一些这样的句子:

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

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

    但这没用。我离目标很远吗?

    2 回复  |  直到 14 年前
        1
  •  16
  •   James McNellis    14 年前

    在当前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 h(5, 7);
    
        2
  •  4
  •   Cheers and hth. - Alf    14 年前

    标准C++(C++ 98,C++ 03)不支持这个。

    G+支持是一种语言扩展,我似乎记得C++ 0x将支持它。你必须检查G+语言扩展和/或C++的语法。

    Height 实例,如您所做的,然后使用名称。