C++ 在这段代码中,return是如何工作的?

C++ 在这段代码中,return是如何工作的?,c++,C++,它是如何工作的 struct Person { std::string name; std::string address; }; std::istream &read(std::istream &is, Person &person) { is>> person.name; getline(is, person.address); return is; } int main() { Person p;

它是如何工作的

struct Person
{
    std::string name;
    std::string address;
};

std::istream &read(std::istream &is, Person &person)
{
    is>> person.name;
    getline(is, person.address);
    return is;
}

int main()
{ 
    Person p; 
    read(cin,p);
}

how
return is
同时返回
person.name
person.address
,而
getline
似乎与
is

函数返回一个值,不能返回更多值。在本例中,它通过引用返回它作为第一个参数获得的流,也通过引用返回。人员的姓名和地址不会返回,而是从流中读取并用于填充通过引用接收的
person
实例
p

// notice both parameters are references
std::istream &read(std::istream &is, Person &person)
{
    is >> person.name; // read the name and store it in the person object
    getline(is, person.address); // read the address and store it in the person object
    return is; // return the stream reference
}

int main()
{ 
    Person p; 
    read(cin,p); // both params are sent by reference
    // so here the object p will have it's members properly filled
}
在这种情况下,像对
read()
函数那样通过引用返回流没有多大意义。这通常用于流的重载运算符,例如:

std::istream& operator >>(std::istream &is, Person &person)
{
    is >> person.name;
    is >> person.address;
    return is;
}
在这种情况下,返回流非常有用,因为这样可以链接多个调用,例如:

Person p1, p2, p3;
std::cin >> p1 >> p2 >> p3;
在您的情况下,这不是真正有用的,如果您链接调用,它实际上会损害可读性:

Person p1, p2, p3;
read(read(read(cin, p1), p2), p3);
在这种情况下,如果您这样做,写和读都会容易得多:

Person p1, p2, p3;
read(cin, p1);
read(cin, p2);
read(cin, p3);