"const string&" - will always make a copy of the string for first_name and last_name, if we write
"Person(std::string first_name, std::string last_name)
: first_name(first_name)
, last_name(last_name)
{}"
in case passed arguments are lvalues they will be copied, otherwise moved.