我正在通过加速c ++并对第4章有一个问题。我们在本节中讨论参考,我相信我理解它用于操纵对象和变量。但是,我真正不明白的是作者使用&重新定义已经属于std类的函数
这是代码: Student_info.cpp
istream& read(istream& is, Student_info& s)
{
// read and store the student's name and midterm and final exam grades
is >> s.name >> s.midterm >> s.final;
read_hw(is, s.homework); // read and store all the student's homework grades
return is;
}
的main.cpp
while (read(cin, record)) {
// find length of longest name
maxlen = max(maxlen, record.name.size());
students.push_back(record);
}
有人可以解释一下为什么我们会这样做吗?仅仅出于教学原因才能表明我们可以吗?提前谢谢。
答案 0 :(得分:4)
我真正不明白的是为什么作者使用&重新定义已经属于std类的函数
他没有重新定义一个功能。
他正在创建一个名为read
的新功能,该功能会返回istream&
。
它返回引用的事实是约定(匹配标准库函数的等效行为),但与他首先定义函数的事实几乎没有关系。
标准库没有关于自定义类型Student_info
的知识的功能。
答案 1 :(得分:0)
因为Student_info
是用户定义的类型,并且istream运算符需要重载它才能知道如何处理Student_info
参数。
考虑使用数学运算符进行运算符重载,同样适用。
他使用&因为他想把它作为对已经创建的引用的返回,所以没有不必要的复制操作。