C ++中的统一初始化不起作用

时间:2017-12-26 07:29:42

标签: c++

当我在我的班级中使用modern json时,init类成员就像这样:

Test::Test(json config) : m_config{config}
{
}

它不起作用并抛出type::error异常,但当我像这样执行init成员时

Test::Test(json config) : m_config(config)
{
}

它有效,为什么?

1 个答案:

答案 0 :(得分:1)

the documentation中看了一下。这是它描绘的图片:

using   initializer_list_t = std::initializer_list< detail::json_ref< basic_json > >
// helper type for initializer lists of basic_json values

当然,这用于定义构造函数:

basic_json (initializer_list_t init, bool type_deduction=true, value_t manual_type=value_t::array)
// create a container (array or object) from an initializer list

由于列表初始化导致重载决策首先考虑std::initializer_list c,所以匹配并调用上面的c。在进行列表初始化时,源对象似乎违反了json类的某种内部约束。

在您的其他代码段中,会选择并调用副本c。