如何确保initializer_list不为零

Pro*_*mer 2 c++ c++11

我有一个构造函数接受initializer_list作为参数:

A::A(std::initializer_list<uint32_t> arg)
    : vec(arg)
{
}
Run Code Online (Sandbox Code Playgroud)

问题是它允许初始化器列表为零或空值为arg:

A {}
Run Code Online (Sandbox Code Playgroud)

如何强制使用非零的initializer_list?

Bri*_*ian 5

初始化器时{},默认构造函数优先于std::initializer_list构造函数,但后者将在前者不存在时使用.因此,为了强制编译错误,您需要显式删除默认构造函数,以便仍然选择默认构造函数但不能使用:

struct A {
    A() = delete;
    A(std::initializer_list<uint32_t>) { /* ... */ }
};
Run Code Online (Sandbox Code Playgroud)

但是,在编译时,您无法阻止用户手动构造空std::initializer_list对象并将其传入.在这种情况下,您需要抛出异常来指示构造失败.