按值传递nlohmann::json对象
一个类似的问题 通过值还是引用传递JSON对象 没有给出答案,但在评论中,Niels Lohmann本人表示:
我会尽量不要按值传递。内部实现是向量/映射/字符串/int64_t/double/bool,取决于你的类型;如果该值是嵌套的,那么它的规模会相当快地增长。
然而,我仍然感到困惑,因为 basic_json::parse 本身的代码返回按值解析的结果:
static basic_json parse(InputType&& i,
const parser_callback_t cb = nullptr,
const bool allow_exceptions = true,
const bool ignore_comments = false)
{
basic_json result;
parser(detail::input_adapter(std::forward<InputType>(i)), cb, allow_exceptions, ignore_comments).parse(true, result);
return result;
}
此外,似乎没有用于就地解析 json 对象的API方法(就像这里的 parser 所做的那样),这意味着按值传递被认为是可以的。
你能就此问题阐明一下吗?
解决方案
parse() 函数必须按值返回。你得到的返回值是你已解析的JSON数据内部表示的唯一实例。
当你把从 parse() 得到的值(或子值)传递给其他函数时,你应当小心,除非你确实想要一个独立的副本来进行操作,否则不要进行拷贝。通常你会传递一个 const 引用,或者一个非 const 引用来引用该JSON值。
注:这不仅仅适用于json值。对于大多数未知大小的容器也是如此。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。