I have a function get() which gets a human object from somewhere. That is literally the only use of human, to provide a collection of properties of a human.struct human {    std::string first_name;    std::string last_name;    unsigned int age;    std::string location;};Doing things likehuman user;user.first_name = Foo;doesn't really make sense, because human is only supposed to be used to read the properties of the object that get() returns, if that makes sense.human user = get();std::cout << user.age << '\n';It should effectively be a read-only struct. I think it makes sense to enforce this, as if you accidently modify the data, you'll maybe be surprised to see that it changed or has a weird value.I thought of declaring the properties private and providing getter functions like first_name() and age(). Making every member variable const is also not ideal, because that would remove the implicit copy constructor. But I was wondering if there is a better way to achieve this, because those two methods require a lot of boilerplate code.
What should I use for technically always read-only objects?
design;design patterns;c++;c++11