静态数组初始化是否会“过载”?

时间:2012-10-24 15:23:12

标签: c++ overloading

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

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

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

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

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

4 个答案:

答案 0 :(得分:3)

不,你不能。 (考虑到你的束缚)

答案 1 :(得分:2)

从8.5p6起,

  

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

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

答案 2 :(得分:1)

有一种方法可以在数组上调用不同的构造函数,如下所示:

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
};

但如果您的目标是为每个数组调用不同的构造函数,则结果为no!

MyDouble {
    MyDouble( /* I have nothing to put here to make this the choice for arrays */ );
}

答案 3 :(得分:0)

您可以使用std::vector代替简单数组。它允许您使用自定义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
}