C++ 通过值或引用传递JSON对象

C++ 通过值或引用传递JSON对象,c++,nlohmann-json,C++,Nlohmann Json,我正在使用nlohmann的JSON库解析JSON文件。在本文中,我想知道在传递对象的效率和开销方面,通过值或引用传递JSON对象是否是最佳实践 下面是一个简短的示例,显示我将按值传递它: #include <iostream> #include <string> #include <fstream> #include "json.hpp" void read_json(nlohmann::json j) /// pass by value or refer

我正在使用nlohmann的JSON库解析JSON文件。在本文中,我想知道在传递对象的效率和开销方面,通过值或引用传递JSON对象是否是最佳实践

下面是一个简短的示例,显示我将按值传递它:

#include <iostream>
#include <string>
#include <fstream>
#include "json.hpp"

void read_json(nlohmann::json j) /// pass by value or reference?
{
    ///...
}

int main()
{
    std::string file_name = "asd.json";

    std::ifstream filename_stream(file_name);
    nlohmann::json j = nlohmann::json::parse(filename_stream);

    read_json(j);

    return 0;
}   
#包括
#包括
#包括
#包括“json.hpp”
void read_json(nlohmann::json j)///通过值或引用传递?
{
///...
}
int main()
{
std::string file_name=“asd.json”;
std::ifstream filename\u stream(文件名);
nlohmann::json j=nlohmann::json::parse(文件名\u流);
读json(j);
返回0;
}   

总是路过reference@randnum-1这并不总是一个既定的事实。有时最好通过值或常量引用传递。它不是黑白的。编译器优化器在拷贝(通常)方面做得很好,但在添加内存引用(指针/引用)时就不那么好了。您总是需要进行基准测试。在您的示例中,您应该传递(const)引用,以避免复制JSON值的整个内部。当然,您应该进行基准测试,但按值传递有导致昂贵副本的危险,而使用引用则不会。@NielsLohmann AFAICS“整个内部”只相当于一个uint8_t和一个(64位)json_值,毕竟非常小。但你可能知道,我会尽量不通过价值传递。内部是vectors/maps/strings/int64_t/double/bool,具体取决于您的类型,如果该值是嵌套的,那么它的增长速度会非常快。将JSON值视为大小未知的向量。始终传递reference@randnum-1这并不总是一个既定的事实。有时最好通过值或常量引用传递。它不是黑白的。编译器优化器在拷贝(通常)方面做得很好,但在添加内存引用(指针/引用)时就不那么好了。您总是需要进行基准测试。在您的示例中,您应该传递(const)引用,以避免复制JSON值的整个内部。当然,您应该进行基准测试,但按值传递有导致昂贵副本的危险,而使用引用则不会。@NielsLohmann AFAICS“整个内部”只相当于一个uint8_t和一个(64位)json_值,毕竟非常小。但你可能知道,我会尽量不通过价值传递。内部是vectors/maps/strings/int64_t/double/bool,具体取决于您的类型,如果该值是嵌套的,那么它的增长速度会非常快。将JSON值视为大小未知的向量。