Хорошо известно, что пользователь может определять манипуляторы потоков следующим образом:
ostream& tab(ostream & output)
{
return output<< '\t';
}
И это можно использовать в main () вот так:
cout<<'a'<<tab<<'b'<<'c'<<endl;
Объясните, пожалуйста, как все это работает? Если operator << предполагает в качестве второго параметра указатель на функцию, которая принимает и возвращает ostream & , тогда, пожалуйста, объясните, почему это необходимо? Что будет неправильным, если функция не принимает и не возвращает ostream & , но это было void вместо ostream & ?
Также интересно, почему манипуляторы «dec» и «hex» действуют до тех пор, пока я не переключаюсь между ними, но всегда следует использовать определенные пользователем манипуляторы, чтобы они вступили в силу для каждой потоковой передачи?