在std :: array中的元素上调用用户定义的构造函数

G.R*_*sky 2 c++ arrays initialization c++11 stdarray

我有一个简单的例子,我创建了std::array一些Foo元素:

struct Foo
{
     Foo(int bar=0) : m_bar(bar) 
     {
       // Code depending on the value of bar
     }

     int m_bar;
};

const unsigned int num = // get array size 
std::array<Foo, num> fooArr;
Run Code Online (Sandbox Code Playgroud)

当我在构造函数中使用初始化列表时,m_bar(bar)它将所有设置Foo.m_bar0(因为这是默认的构造函数参数值).如果我不这样做,那么垃圾值就满了.

我的问题是如何在不知道数据大小之前将另一个与默认值不同的值传递给数组中每个元素的构造函数?

我在创建数组时尝试使用init列表,如下所示:std::array<Foo, 5> fooArr{3}但是只将第一个元素设置m_bar3.

Joh*_*nck 6

你应该简单地默认构造std::array然后使用它的fill方法用固定值填充它.许多编译器可以有效地优化它,因此您不会为"额外"初始化付费.

为了满足您的用例,代码看起来像这样:

fooArr.fill(Foo(3));
Run Code Online (Sandbox Code Playgroud)

  • 问题(除非我误解你的意思)是如果我在Foo()的构造函数中有代码依赖于size的值它仍然会得到0's吗? (2认同)