<< 运算符接收两个运算对象:左侧的运算对象必须是一个ostream对象,右侧的运算对象是要打印的值。此运算符将给定的值写到给定的ostream对象中。该运算符的计算结果是其左侧的运算对象,即要写入给定值的那个ostream对象。例如:
std::cout << "Enter two numbers:" << std::endl;
由于第一个<<运算符的结果是第二个<<运算符的左侧运算对象,因此可以将输出请求连接起来,上面表达式等价于
(std::cout << "Enter two numbers:") << std::endl;
链中每个运算符的左侧运算对象都是相同的,即是std::cout
其中,第二个<<运算符打印endl,是一个被称为操纵符的特殊值。写入endl的效果是结束当前行,并将与设备关联的缓冲区中的内容刷到设备中。缓冲刷新操作可以保证到目前为止程序产生的所有输出都真正写入输出流中,而不是仅停留在内存中等待写入流。
程序员常常在调试时添加打印语句。这类语句应该保证“一直”刷新流。否则,如果程序崩溃,输出可能还留在缓冲区中,从而导致关于程序崩溃位置的错误推断。
>> 运算符接受一个istream作为其左侧运算对象,接收一个对象作为其右侧运算对象。输入运算符从给定的istream中读入数据,并存入给定对象中。输入运算符返回其左侧运算对象作为其计算结果。因此,表达式 std::cin >> v1 >> v2; 等价于
表达式 (std::cin >> v1) >> v2;
由于输入运算符返回其左侧运算对象,因此可以将一系列输入请求合并到一条语句中。