我的大脑抽筋了..。如何在C++中正确初始化对象数组?
非数组示例:
struct Foo { Foo(int x) { /* ... */ } };
struct Bar {
Foo foo;
Bar() : foo(4) {}
};
数组示例:
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
关键字+构造函数的灵活性弄坏的一种情况。)
发布于 2010-03-09 22:48:45
没有办法。你需要一个数组成员的默认构造函数,它将被调用,然后,你可以在构造函数中进行任何你想要的初始化。
发布于 2015-06-26 23:11:30
为了更新C++11的这个问题,现在可以这样做了,而且非常自然:
struct Foo { Foo(int x) { /* ... */ } };
struct Baz {
Foo foo[3];
Baz() : foo{{4}, {5}, {6}} { }
};
这些大括号也可以省略,以获得更简洁的:
struct Baz {
Foo foo[3];
Baz() : foo{4, 5, 6} { }
};
它也可以很容易地扩展到多维数组:
struct Baz {
Foo foo[3][2];
Baz() : foo{1, 2, 3, 4, 5, 6} { }
};
发布于 2010-03-09 22:51:51
现在,您不能使用数组成员的初始值设定项列表。你被困在了艰难的道路上。
class Baz {
Foo foo[3];
Baz() {
foo[0] = Foo(4);
foo[1] = Foo(5);
foo[2] = Foo(6);
}
};
在C++0x中,你可以这样写:
class Baz {
Foo foo[3];
Baz() : foo({4, 5, 6}) {}
};
https://stackoverflow.com/questions/2409819
复制相似问题