gpt4 book ai didi

c++ - 关于cin/cout重载的简单问题

转载 作者:行者123 更新时间:2023-11-30 01:31:19 25 4
gpt4 key购买 nike

我知道这是非常基本的,但到目前为止我一直在猜测。

Foo 只是一个从字符串类私有(private)继承的对象,这就是我强制转换它的原因。使用 Primer C++(Prata 的)中的示例

所以如果我有这样的函数:

istream & operator>>(istream & is, Foo & f)
{
is >> (string &)f;
return is;
}

int main()
{

Foo f;


cin >> f;

}

因此,一旦 cin >> f 被命中,该函数就会被调用,现在的字符串将存储在 istream 引用中。现在返回 istream 对象,现在...?返回的 istream 对象的内容(字符串)现在是否自动放置在 f 中?还是我错过了理解 cin 工作原理的步骤?

此外,如果我要这样做:

int x;

cin >> f >> x;

它隐含地看起来像什么?喜欢 (cin) >> x?

最后,还有一件更简单的事情。如果在函数(包含 ostream 引用)中,我在一个循环中传递每个数组项并执行此操作:

for(int i=0;i < 5;i++)
{
os << array[i] << "\n";
}

ostream 对象是否只是将每个数组项组合在其自身中?

最佳答案

如果用正常的函数调用替换重载的运算符,事情就会变得非常容易。 cin >> f 简单地转换为:

operator >>(cin, f);

现在将 cin >> f >> x 视为 (cin >> f) >> x。这转化为:

operator >>(operator >>(cin, f), x);

由于第一个运算符返回cin,在执行过程中,这实际上变成了:

operator >>(cin, x);

int 等原始数据类型通常在流类本身中被重载,因此它实际上看起来像这样:

cin.operator >>(x);

您可以自己扩展它来回答您关于 ostream 的问题 - 它的工作方式完全相同。

关于c++ - 关于cin/cout重载的简单问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3269256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com