定义函数的参考目的

时间:2014-01-04 04:12:58

标签: c++ accelerated-c++

我正在通过加速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);
    }

有人可以解释一下为什么我们会这样做吗?仅仅出于教学原因才能表明我们可以吗?提前谢谢。

2 个答案:

答案 0 :(得分:4)

  

我真正不明白的是为什么作者使用&重新定义已经属于std类的函数

他没有重新定义一个功能。

他正在创建一个名为read的新功能,该功能会返回istream&

它返回引用的事实是约定(匹配标准库函数的等效行为),但与他首先定义函数的事实几乎没有关系。

标准库没有关于自定义类型Student_info的知识的功能。

答案 1 :(得分:0)

因为Student_info是用户定义的类型,并且istream运算符需要重载它才能知道如何处理Student_info参数。

考虑使用数学运算符进行运算符重载,同样适用。

他使用&因为他想把它作为对已经创建的引用的返回,所以没有不必要的复制操作。