C++;初始化匿名结构 我还在挣我的C++翅膀。我的问题是,如果我有这样一个结构: struct Height { int feet; int inches; };
然后我有一些这样的句子:C++;初始化匿名结构 我还在挣我的C++翅膀。我的问题是,如果我有这样一个结构: struct Height { int feet; int inches; };,c++,struct,anonymous-types,C++,Struct,Anonymous Types,然后我有一些这样的句子: Height h = {5, 7}; Person p("John Doe", 42, "Blonde", "Blue", h); 我喜欢通过大括号初始化结构,但我更喜欢上面的一行,在匿名高度结构中。我该怎么做?我最初天真的做法是: Person p("John Doe", 42, "Blonde", "Blue", Height{5,7}); 但这不起作用。我离这个标志有多远? 你不能,至少在当今的C++中是不行的。大括号初始化是初始化器语法的一部分,不能在其他地
Height h = {5, 7};
Person p("John Doe", 42, "Blonde", "Blue", h);
我喜欢通过大括号初始化结构,但我更喜欢上面的一行,在匿名高度结构中。我该怎么做?我最初天真的做法是:
Person p("John Doe", 42, "Blonde", "Blue", Height{5,7});
但这不起作用。我离这个标志有多远? 你不能,至少在当今的C++中是不行的。大括号初始化是初始化器语法的一部分,不能在其他地方使用 您可以将构造函数添加到
高度:
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);
标准C++(C++ 98,C++ 03)不支持这个。
g++支持是一种语言扩展,我似乎记得C++0x将支持它。您必须检查g++语言扩展和/或可能的C++0x的语法
对于目前的标准C++,只需命名<代码>高度> /Cube >实例,如您已经做过的,然后使用名称.< /P>
干杯&hth.,这可能只是一个例子,但是,最好将高度
存储为单个英寸
字段。当你需要脚的时候,你可以把它转换成脚;处理单个单元要比处理多个单元容易得多,特别是因为现在你可以有多个相等的值,但是没有相同的表示(例如,{2,3}
和{1,15}
)。C++1x附带了它,它将支持类似的东西。很可能您的编译器已经支持它了。在Person构造函数中指定(结构高度){5,7}
(如果通过引用传递)(或者如果传递指针)而不是(结构高度){5,7}
。您基本上是将初始值设定项列表强制转换为所需的类型。这是一个C99 +的特性,但应该可以用C++。我不知道结构可以有构造函数/初始值设定项列表。@byte:Astruct
与类
完全相同。唯一的区别是,基类和成员在默认情况下对于结构
是公共的,对于类
是私有的。它是自动提供的,还是您必须定义一个接受初始值设定项列表
参数的构造函数?@Ben:不,您不必定义一个构造函数来获得C++0x语法。重点/目标是要有一个在大多数情况下都能使用相同语法的统一语法。查看@sbi之前给出的示例。或者,如果您需要详细信息,可以从中获取最新的草稿,格式为PDF。