当我在我的班级中使用modern json时,init类成员就像这样:
Test::Test(json config) : m_config{config}
{
}
它不起作用并抛出type::error
异常,但当我像这样执行init成员时
Test::Test(json config) : m_config(config)
{
}
它有效,为什么?
答案 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。