我仍在赚取我的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});
但这并没有奏效.我离标记太远了吗?
你不能,至少不是现在的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);