cout和cin不是函数,那么它们是什么?

18

通常在C编程语言中,我们认为printf和scanf是函数。但是在C++中,cout和cin是什么呢?我指的是它们不能是函数,因为它们没有后面的括号,所以它们不是函数。那么,cout和cin是标准输入输出函数吗?还是其他什么东西?


这类问题非常基础,你应该能够在任何C++教材甚至大部分涵盖相关主题的教程中找到答案。 - Arne Mertz
4
如果你是初学者,可能需要查看《C++书籍指南》以及列表,链接为https://dev59.com/_3RC5IYBdhLWcg3wK9yV。此外,如果你需要在线参考资料,可以尝试访问http://en.cppreference.com/w/cpp这个网站,据说非常不错。 - Some programmer dude
14
我认为这个问题没有任何问题。他并没有问他们在做什么。 - Lightness Races in Orbit
4个回答

20

std::coutstd::cin是分别属于类std::ostreamstd::istream的全局对象,它们重载了运算符<<>>。您应该阅读关于运算符重载的信息。

   cout    <<      expr  ;
  ~~~~~~  ~~~~   ~~~~~~~~
  object   op.   argument 

就像一个函数调用;该函数是一个重载的运算符并且是这个意思的缩写:

cout.operator<<(expr);

或者是这个:

operator<<(cout, expr);

根据过载解析的结果而定


请问您能否解释一下“根据重载决议的结果”是什么意思?因为函数参数的不同类型会导致重载决议的发生。但这里的参数不是相同的吗?您能否写出运算符重载定义在这两种情况下可能是什么样子的?您是否暗示第二种情况下,“<<”可能不是ostream类的成员函数? - Porcupine

8

1
所以ostream和istream是类吗? - user2643191
1
@user2643191:确切的。 :) - Lightness Races in Orbit

3
它们是全局变量,在头文件<iostream>中声明。

-1
假设x是一个变量(整数类型),我们想要给它赋值。我们该怎么做?
我们写cin>>x。
但是我们也可以通过写cin.operator>>(x)来放置int数据。这意味着cin是一个对象,operator>>是一个函数,在其中传递了x。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接