我有这些语句,更具体的是MyDouble对象的数组声明和常规的MyDouble对象初始化:
MyDouble D[8]; //Creating 8 'MyDouble' objects (created with default constructor)
MyDouble t;
主要目标是我想为数组 D 中创建的MyDouble对象调用不同的构造函数,而不是MyDouble t 。以上陈述不能修改。
我的问题是,是否有可能进入C ++现在自动执行的初始化过程?我可以通过在MyDouble类中添加某种函数(重载operator[]
或类似的东西)来重载这个初始化过程吗?
我想这是不可能的,我只想要一些反馈。我希望我解释得很好。
答案 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
}