std::array 中元素构造函数的参数

argument for constructor of elements in std::array

以下按预期打印“1\n 1\n 1”。我可以以一种打印“2\n 2\n 2”的方式构造 "ar" 而无需为其提供显式初始化列表 (... ar = {A(2), A(2 ), A(2)})?

#include <iostream>
#include <array>

class A {

public:
    A(int i=1) : m_i(i) {};
    int m_i;
};

int main() {

    std::array<A, 3> ar;

    for(auto& v : ar) {
        std::cout << v.m_i << std::endl;
    }

}

不是真的; array 没有像 vectorvector(size_type, T = T()).

那样有趣的构造函数

最接近的方法是使用 fill,可能带有初始化 lambda:

std::array<A, 3> ar = []{ std::array<A, 3> ar; ar.fill(2); return ar; }();