In addition to the other solutions, using the insertion and extraction operators is just convenience. I guess
Stroustrup[
^] just found it to be more readable and easier to write:
cout << "The value is: " << value << endl;
instead of (hypothetical):
cout.write("The value is: ").writeln(value).flush();
which could have been an alternative.