C++において、改行などの入出力制御操作は、endlを始めとするマニピュレータが行う。
endlは改行を表すマニピュレータだが、その正体は関数テンプレートである。
引数にストリームを指定すると、そのストリームで改行が行われるというのが、直接的な操作。
ただし、一般的に使われるのは、basic_ostreamの出力演算子の、endlの関数ポインタを引数に取る演算子オーバーロードが呼ばれ、その中で改行が行われるというものである。
1つ目は、endlなしで改行。
2つ目は、"FGHIJ"の出力時点では改行されないが、endlの引数にcoutを渡すと、この時点で改行される。
3つ目は、endlを関数ポインタと見立てて、出力演算子のオーバーロードで改行されている。
$ vi endl.cpp $ g++ endl.cpp -o endl $ ./endl ABCDE FGHIJ KLMNO $
どれも改行されてる。
Sample/cpp/endl/endl/src/endl at master · bg1bgst333/Sample · GitHub