在下面的示例中,我使用boost::json
解析一个json对象.
当我打印返回的boost::json::value
的类型时,正如预期的那样,它是object
类型.
然后我有两个在各个方面都相同的类,除了在BraceInit
中我用括号初始化我的成员boost::json::value
,在ParenInit
中我用括号初始化我的成员boost::json::value
.
使用大括号初始化会将my object
转换为array
,大小为1,包含我原来的object
.
#include <iostream>
#include <boost/json.hpp>
namespace json = boost::json;
void print_type(const json::value& jv)
{
switch (jv.kind())
{
case json::kind::object: std::cout << "object\n"; break;
case json::kind::array: std::cout << "array\n"; break;
default: std::cout << "other\n"; break;
}
};
struct BraceInit
{
BraceInit(json::value jv)
: _jv{jv}
{
print_type(_jv);
}
json::value _jv;
};
struct ParenInit
{
ParenInit(json::value jv)
: _jv(jv)
{
print_type(_jv);
}
json::value _jv;
};
int main()
{
const std::string str = R"({ "foo": "bar" })";
const json::value jv = json::parse(str);
print_type(jv);
BraceInit b(jv);
ParenInit p(jv);
return 0;
}
Output:
object array object
这里发生了什么?
我的"支架初始化"是否真的没有像我预期的那样进行支架初始化,而是创建了一个大小为1的std::initializer_list
?