首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++初始化匿名结构

C++初始化匿名结构
EN

Stack Overflow用户
提问于 2010-10-26 12:52:08
回答 2查看 10.6K关注 0票数 12

我仍然可以获得我的C++ wings;我的问题是,如果我有这样的结构:

代码语言:javascript
复制
struct Height
{
    int feet;
    int inches;
};

然后我有一些像这样的代码:

代码语言:javascript
复制
Height h = {5, 7};
Person p("John Doe", 42, "Blonde", "Blue", h);

我喜欢通过大括号初始化结构,但我更喜欢上面的内容在一行中,在匿名的高度结构中。我该怎么做呢?我最初天真的方法是:

代码语言:javascript
复制
Person p("John Doe", 42, "Blonde", "Blue", Height{5,7});

不过,这并不管用。我说得太离谱了吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-26 12:54:23

您不能,至少在目前的C++中不能;大括号初始化是初始化器语法的一部分,不能在其他地方使用。

您可以向Height添加构造函数

代码语言:javascript
复制
struct Height
{
    Height(int f, int i) : feet(f), inches(i) { }
    int feet, inches;
};

这使您可以使用:

代码语言:javascript
复制
Person p("John Doe", 42, "Blonde", "Blue", Height(5, 7));

不幸的是,由于Height不再是一个聚合,您不能再使用大括号初始化。不过,构造函数调用的初始化也很简单:

代码语言:javascript
复制
Height h(5, 7);
票数 16
EN

Stack Overflow用户

发布于 2010-10-26 12:56:06

标准C++ (C++98,C++03)不支持此功能。

g++支持的是一种语言扩展,我记得C++0x也会支持它。您必须检查g++语言扩展和/或C++0x的语法。

对于当前标准的C++,只需像您已经做过的那样命名Height实例,然后使用该名称。

干杯&哈。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4020791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档