使用 std::initializer_list 作为成员变量

using std::initializer_list as a member variable

本文关键字:成员 变量 std initializer 使用 list      更新时间:2023-10-16

我有一个类A,它接受一个initializer_list并将其存储为成员变量。

class A
{
public:
    A(std::initializer_list<std::string> il) :
        m_il(il)
    {}
    std::initializer_list<std::string> m_il;
};

另一个类B A为成员变量,

默认使用initializer_list
class B
{
public:
    B()
    {
        std::cout << *m_a.m_il.begin() << std::endl;
    }
    A m_a { "hello", "bye" };
};

现在,当我在main中运行此代码时,它不会打印任何内容。

int main()
{
    B b;
}

为什么上面的代码没有打印hello?我对std::initializer_list的用法不正确吗?

复制std::initializer_list不会复制其基础对象。它不能用作容器。相反,您应该做的是将其存储在其他东西中,例如std::vector

class A
{
public:
    A(std::initializer_list<std::string> il) :
        m_il(il)
    {}
    std::vector<std::string> m_il;
};