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);