我仍然可以获得我的C++ wings;我的问题是,如果我有这样的结构:
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});不过,这并不管用。我说得太离谱了吗?
发布于 2010-10-26 12:54:23
您不能,至少在目前的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);发布于 2010-10-26 12:56:06
标准C++ (C++98,C++03)不支持此功能。
g++支持的是一种语言扩展,我记得C++0x也会支持它。您必须检查g++语言扩展和/或C++0x的语法。
对于当前标准的C++,只需像您已经做过的那样命名Height实例,然后使用该名称。
干杯&哈。
https://stackoverflow.com/questions/4020791
复制相似问题