2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

C++ってなんでendlいるの?

1 :愛知人:2018/01/17(水) 12:03:45.331 ID:crdHqriu.net
なんでprintないの?

2 :以下、?ちゃんねるからVIPがお送りします:2018/01/17(水) 12:09:06.350 ID:R0slHGWr0.net
fじゃないから

3 :以下、?ちゃんねるからVIPがお送りします:2018/01/17(水) 12:11:10.776 ID:msPhjFgid.net
改行したいだけなら"/n"でもいいけどendl使うと行バッファリングだろうがフルバッファリングだろうが関係なしにストリームのフラッシュもやってくれる

4 :愛知人:2018/01/17(水) 12:11:51.030 ID:crdHqriu.net
なんでprintないの?

5 :以下、?ちゃんねるからVIPがお送りします:2018/01/17(水) 12:14:39.119 ID:msPhjFgid.net
改行のエスケープシーケンス作ればいいから
元々C++の時代の考え方では標準ライブラリは汎用的な機能を与えて小さく設計すべきだったから
例えばmemcpyでゼロクリア可能ならそれ専用のbzero関数をわざわざ標準で用意する必要はないってこと

6 :愛知人:2018/01/17(水) 12:15:30.060 ID:crdHqriu.net
ほーん、めんどくさい言語やな

7 :以下、?ちゃんねるからVIPがお送りします:2018/01/17(水) 12:18:20.843 ID:R0slHGWr0.net
>>4
C++の<<はprintであってprint"f"ではないからstd::endlを使うんだよ

もうちょっと詳しい話をすると、

printfは「f」すなわち「format」がつく
これは、書式指定文字列に従ってデータを出力しますよ、という意味
printfにおいて、'\n'は「OSの改行コードを出力した上で出力バッファをフラッシュする」という書式指定なので、
printfに"\n"をつければ、必ず適切な改行コードを出力した上に確実に画面に表示される

一方、C++の文字列に対する<<は、書式指定ではない
"\n"はあくまでも出力バッファに"\n"を貯めるだけであり、
それがOSの改行コードと一致する保障はないし、出力結果が即座に画面に反映される保証もない
ゆえに、printfの"\n"と同等の機能を行なう関数として、std::endlが用意されているわけだ

8 :以下、?ちゃんねるからVIPがお送りします:2018/01/17(水) 12:22:52.870 ID:R0slHGWr0.net
いやでも"\n"をOSの改行コードに変換するのはtextモードで開いたファイル側の責任で、printfやcout側とは関係なかったかな?
まあともかく、printfでは"\n"が特殊な書式指定文字である、ということは変わらない

9 :以下、?ちゃんねるからVIPがお送りします:2018/01/17(水) 12:24:23.968 ID:QnsjIVC40.net
>>7
エスケープシーケンスと書式指定子って別ちゃうの?
https://ideone.com/GwLz2I

10 :以下、?ちゃんねるからVIPがお送りします:2018/01/17(水) 12:29:15.914 ID:R0slHGWr0.net
>>9
エスケープシーケンスってのは、Cでいえば\始まりで特殊文字を表現する機能
書式指定子は、出力用の書式を特殊な文字列で指定してする機能

エスケープシーケンスも、Cコンパイラから見れば一種の書式指定子ではあるが、
printfに入ってくる時には既に改行文字になっているので関係がない
printf的には、「改行文字」という書式指定子があるわけだ

11 :以下、?ちゃんねるからVIPがお送りします:2018/01/17(水) 12:38:08.867 ID:PESBS5MOM.net
endlで入る開業文字は¥n(LF)とは限らないんだよなあ

総レス数 11
4 KB
掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★