Оператор вывода обычно применяется для записи на стандартный вывод cout. Например, программа
#include <iostream>
int main()
{
cout << "сплетница Анна Ливия\n";
}
печатает на терминале строку:
сплетница Анна Ливия
Имеются операторы, принимающие аргументы любого встроенного типа данных, включая const char*, а также типов string и complex из стандартной библиотеки. Любое выражение, включая вызов функции, может быть аргументом оператора вывода при условии, что результатом его вычисления будет тип, принимаемый каким-либо вариантом этого оператора. Например, программа
#include <iostream>
#include <string.h>
int main()
{
cout << "Длина 'Улисс' равна:\t";
cout << strlen( "Улисс" );
cout << '\n';
cout << "Размер 'Улисс' равен:\t";
cout << sizeof( "Улисс" );
cout << endl;
}
выводит на терминал следующее:
Длина 'Улисс' равна:7
Размер 'Улисс' равен:8
endl – это манипулятор вывода, который вставляет в выходной поток символ перехода на новую строку, а затем сбрасывает буфер объекта ostream. (С буферизацией мы познакомимся в разделе 20.9.)
Операторы вывода, как правило, удобнее сцеплять в одну инструкцию. Например, предыдущую программу можно записать таким образом:
#include <iostream>
#include <string.h>
int main()
{
// операторы вывода можно сцеплять
cout << "Длина 'Улисс' равна:\t";
<< strlen( "Улисс" ) << '\n';
cout << "Размер 'Улисс' равен:\t"
<< sizeof( "Улисс" ) << endl;
}
Сцепление операторов вывода (и ввода тоже) возможно потому, что результатом выражения
cout << "некоторая строка";
служит левый операнд оператора вывода, т.е. сам объект cout. Затем этот же объект передается следующему оператору и далее по цепочке (мы говорим, что оператор << левоассоциативен).