What exactly returns a C++ function if it returns an object by a reference like:
Please explain at assembly level, if possible.
Assembly speaking, such a function returns a reference to an object. Theoretically, the underlying representation of references is platform dependent. However, all existing C++ compilers simply use pointers as the underlying representation of references. In other words, if you examine the disassembly code of that function call, you will see that it returns the address of a Person object to the caller, rather than returning the Person object itself.