C++初始化匿名结构

Ben*_*key 12 c++ struct anonymous-types

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

struct Height
{
    int feet;
    int inches;
};
Run Code Online (Sandbox Code Playgroud)

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

Height h = {5, 7};
Person p("John Doe", 42, "Blonde", "Blue", h);
Run Code Online (Sandbox Code Playgroud)

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

Person p("John Doe", 42, "Blonde", "Blue", Height{5,7});
Run Code Online (Sandbox Code Playgroud)

但这并没有奏效.我离标记太远了吗?

Jam*_*lis 16

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

您可以添加构造函数Height:

struct Height
{
    Height(int f, int i) : feet(f), inches(i) { }
    int feet, inches;
};
Run Code Online (Sandbox Code Playgroud)

这允许您使用:

Person p("John Doe", 42, "Blonde", "Blue", Height(5, 7));
Run Code Online (Sandbox Code Playgroud)

不幸的是,由于Height不再是聚合,您不能再使用大括号初始化.构造函数调用初始化同样简单:

Height h(5, 7);
Run Code Online (Sandbox Code Playgroud)

  • @byte:`struct`与`class`完全相同.唯一的区别是对于`struct`,基类和成员默认是public,对于`class`是私有的. (10认同)