• ベストアンサー

C++の改行を表すコマンド

C++の勉強を始めたばかりなのです。 出力のコマンドで、改行は「endl」と「\n」の両方が使えるようですが、この2つの違いや使い分けはどのようにすればよいのですか?

質問者が選んだベストアンサー

  • ベストアンサー
  • freetaka
  • ベストアンサー率53% (106/197)
回答No.1

「\n」は改行のみ 「endl」は改行+バッファのフラッシュ という動作をします C言語を知っている上でC++をおぼえようとしているのであれば 説明しやすいのですが簡単に説明すると #include <iostream.h> int main() { cout << "Hello world!!" << endl; cout << "Hello world!!" << endl; return 0; } というコードがあるとしたら endlのたびに「Hello world!!」が出力されるという動作になります 何も考えなければこちらのほうが高速に結果を得られます #include <iostream.h> int main() { cout << "Hello world!!\n"; cout << "Hello world!!\n"; return 0; } のほうではcout行2つを解釈した上での出力となります 複雑なプログラムになれば 頻繁にフラッシュを行うと速度が遅くなるという現象もでたりしますが そのうちC++でのプログラミングになれてくれば これらの使い分けもできるようになると思います C++のほうは基本的に結果を得るのに高速な「endl」でOKです

okamonta
質問者

お礼

ありがとうございました

その他の回答 (2)

  • oldman50
  • ベストアンサー率29% (8/27)
回答No.3

'\n'は「改行文字」を表します。 一方、endlは、マニピュレータと呼ばれるストリーム状態操作関数のうちの一つで、ストリームに改行を出力した後、更にflushという別のマニピュレータを実行して、バッファの内容をフラッシュするものです。 cout << "ABC" << '\n'; ・・・(1)文字列ABCの後に改行を出力する cout << "ABC" << endl; ・・・(2)文字列ABCの後に改行を出力してフラッシュする 標準出力に出力する場合は、'\n'を出力すると自動的にフラッシュされるので、この二つの効果は同じです。 '\n'は関数ではなくて単なる文字ですから、(1)と同じことを cout << "ABC\n"; のように書くことも出来ます。しかし、 cout << "ABCendl"; とは書けません。endlは文字ではなく、「ストリーム状態」を操作する関数だからです。

okamonta
質問者

お礼

ありがとうございました。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

std::endlは、std::basic_ostreamに対してしか使えません。 他の状況で改行文字を扱いたい場合は、'\n'を使うしかありません。 例えば、std::stringに改行文字を追記したい場合... std::string str("abc"); str.push_back('\n'); のように、'\n'を使うしかなく、この文脈ではstd::endlは使えません。

okamonta
質問者

お礼

ありがとうございました

関連するQ&A