1

我正在学习加速 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;
}

主文件

while (read(cin, record)) {
        // find length of longest name
        maxlen = max(maxlen, record.name.size());
        students.push_back(record);
    }

有人可以解释为什么我们会这样做吗?仅仅是为了教学上的原因来证明我们可以吗?提前致谢。

4

2 回答 2

4

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

他没有重新定义功能。

他正在创建一个名为 的新函数,read它返回一个istream&.

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

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

于 2014-01-04T04:15:56.210 回答
0

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

考虑使用数学运算符重载运算符,同样的事情也适用。

他使用 & 是因为他想将它作为对已创建的引用返回,因此没有不必要的复制操作。

于 2014-01-04T04:17:52.763 回答