2

我有这些语句,更具体地说是 MyDouble 对象的数组声明和常规 MyDouble 对象初始化:

MyDouble D[8]; //Creating 8 'MyDouble' objects (created with default constructor)
MyDouble t;

主要目标是我想为在数组D中创建的 MyDouble 对象调用不同的构造函数,而不是 MyDouble t。上述陈述不能修改。

我的问题是是否有可能进入 C++ 现在自动执行的初始化过程?我可以通过在 MyDouble 类中放置某种函数(重载operator[]或类似的东西)来重载这个初始化过程吗?

我想这是不可能的,我只是想要一些反馈。我希望我解释得足够好。

4

4 回答 4

3

不,你不能。(考虑到你的限制)

于 2012-10-24T15:25:41.053 回答
2

从 8.5p6 开始,

默认初始化类型的对象意味着:T[...] — 如果 T 是数组类型,则每个元素都是默认初始化的;[...]

因此对数组元素执行的初始化与对单独对象执行的初始化相同。

于 2012-10-24T15:28:08.137 回答
1

There is a way to call a different constructor on the array as follow:

MyDouble D[8] = {
    MyDouble( 1 ),     // Create from an int
    MyDouble( "2.0" ), // Create it from an string
    MyDouble( 1.35 ),  // Create from a double
    // rest of the items will be initialized using default constructor
};

But if your goal is to call a different constructor for each array, the result is no!

MyDouble {
    MyDouble( /* I have nothing to put here to make this the choice for arrays */ );
}
于 2012-10-24T16:13:40.533 回答
0

您可以使用std::vector而不是简单的数组。它将允许您使用 custom 控制数组元素创建的过程allocator,或者在简单的情况下,您可以从给定的元素中复制构建所有元素。

struct C
{
    C() { std::cout << "Constructed\n";}
    C(const C&) {std::cout << "Copy constructed\n";}
};

int main()
{
    std::vector<C> a(8, C()); //al elements are copy constructed
}
于 2012-10-24T15:36:04.617 回答