首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C++:数组的构造函数初始化器

C++:数组的构造函数初始化器
EN

Stack Overflow用户
提问于 2010-03-09 22:43:34
回答 14查看 147K关注 0票数 71

我的大脑抽筋了..。如何在C++中正确初始化对象数组?

非数组示例:

代码语言:javascript
复制
struct Foo { Foo(int x) { /* ... */  } };

struct Bar { 
     Foo foo;

     Bar() : foo(4) {}
};

数组示例:

代码语言:javascript
复制
struct Foo { Foo(int x) { /* ... */  } };

struct Baz { 
     Foo foo[3];

     // ??? I know the following syntax is wrong, but what's correct?
     Baz() : foo[0](4), foo[1](5), foo[2](6) {}
};

编辑:我很欣赏狂野和疯狂的变通方法,但它们对我的情况没有帮助。我在一个嵌入式处理器上工作,其中std::vector和其他STL构造不可用,明显的解决办法是创建一个默认构造函数,并具有一个显式的init()方法,可以在构造时间之后调用,这样我就不需要使用初始化器了。(这是我被Java的final关键字+构造函数的灵活性弄坏的一种情况。)

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2010-03-09 22:48:45

没有办法。你需要一个数组成员的默认构造函数,它将被调用,然后,你可以在构造函数中进行任何你想要的初始化。

票数 56
EN

Stack Overflow用户

发布于 2015-06-26 23:11:30

为了更新C++11的这个问题,现在可以这样做了,而且非常自然:

代码语言:javascript
复制
struct Foo { Foo(int x) { /* ... */  } };

struct Baz { 
     Foo foo[3];

     Baz() : foo{{4}, {5}, {6}} { }
};

这些大括号也可以省略,以获得更简洁的:

代码语言:javascript
复制
struct Baz { 
     Foo foo[3];

     Baz() : foo{4, 5, 6} { }
};

它也可以很容易地扩展到多维数组:

代码语言:javascript
复制
struct Baz {
    Foo foo[3][2];

    Baz() : foo{1, 2, 3, 4, 5, 6} { }
};
票数 40
EN

Stack Overflow用户

发布于 2010-03-09 22:51:51

现在,您不能使用数组成员的初始值设定项列表。你被困在了艰难的道路上。

代码语言:javascript
复制
class Baz {
    Foo foo[3];

    Baz() {
        foo[0] = Foo(4);
        foo[1] = Foo(5);
        foo[2] = Foo(6);
    }
};

在C++0x中,你可以这样写:

代码语言:javascript
复制
class Baz {
    Foo foo[3];

    Baz() : foo({4, 5, 6}) {}
};
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2409819

复制
相关文章

相似问题

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