[解決済み] "\n" or '\n' or std::endl to std::cout? 重複] [重複] [重複] [重複] [重複] [重複
質問
を使わなくなってから、もう何年も経ちます。
std::endl
に書くときに行末に
std::cout
に書き込むとき、行末を
"\n"
を使うようになりました。
しかし、現在では
'\n'
を使うコードを見かけるようになり、何がベストなのか考えるようになりました。
一方が文字列で、もう一方が文字であることは明らかですが、これを使用する利点はあるのでしょうか。
std::cout << variable << '\n';
この上に
std::cout << variable << "\n";
遅ればせながら追加です。
この質問をしたとき、私はnewlineが
'\n'
がバッファをフラッシュすると思っていたようです。今、私はそれが
は
.
デフォルトでは
std::cin
は、古い C
stdin
FILE*
のストリームと
std::cout
は
stdout
. 改行時のフラッシュはこの結びつきに由来する。デフォルトでは
stdout
はターミナルに接続されている場合、ラインバッファリングされます。つまり、新しい行はそのバッファをフラッシュします。ですから、改行を
std::cout
を使って改行すると、次のようになります。
stdout
が流されることになります。
もし
stdout
がターミナルに接続されていない場合 (例えば出力がリダイレクトされていたり、 パイプ化されている場合)、あるいは
std::cout
と
stdout
が壊れている場合、改行は何も流さないでしょう。
どのように解決するのですか?
実は
'\n'
がデフォルトであるべきです。ストリームを明示的にフラッシュしたいのでなければ (そして、いつ、何のためにそんなことをしたいのでしょうか?) 、 std::endl
を使う必要は全くありません。
1
もちろん、多くの書籍やチュートリアルでは
std::endl
をデフォルトとして使用します。これは残念なことで
深刻なパフォーマンスバグ
.
を使うのとほとんど違いはないと思います。
'\n'
を使うか
"\n"
しかし、後者は(2つの)文字の配列で、一文字ずつ出力しなければならず、そのためにループを設定しなければならず、一文字の出力よりも複雑になってしまいます。もちろん、IOを行う場合、このようなことはほとんど問題になりませんが、もし疑問があれば、1文字リテラルを出力したい場合、文字列リテラル全体ではなく、文字リテラルを出力するようにしてください。
そうすることの良い副次的な効果は、コード内で
を意図していることをコードで伝えることができます。
を意図したものであり、偶然そうなったのではないということをコードで伝えることができます。
1
なお
std::cout
は
std::cin
に結びつけられているため、デフォルトでは
std::cout
は入力操作の前にフラッシュされるので、 ユーザーが何かを入力する前にプロンプトが表示されます。
関連
-
[解決済み】C++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み】テンプレートの引数1が無効です(Code::Blocks Win Vista) - テンプレートは使いません。
-
[解決済み】cc1plus:エラー:g++で認識されないコマンドラインオプション"-std=c++11"
-
[解決済み】「Expected '(' for function-style cast or type construction」エラーの意味とは?
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み】Visual Studioのデバッガーエラー。プログラムを開始できません 指定されたファイルが見つかりません
-
[解決済み] std::string を const char* または char* に変換する方法
-
[解決済み] using namespace std;」はなぜバッドプラクティスだと言われるのですか?
-
[解決済み] std::stringのインスタンスを小文字に変換する方法
-
[解決済み] "std::endl" vs "\n"
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】抽象クラス型の無効なnew-expression
-
[解決済み】'cout'は型名ではない
-
[解決済み】C++の変数はイニシャライザーを持っているが、不完全な型?
-
[解決済み] 解決済み] `pthread_create' への未定義の参照 [重複] [重複
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み】Enterキーを押して続行する
-
[解決済み】Visual Studioのデバッガーエラー。プログラムを開始できません 指定されたファイルが見つかりません
-
[解決済み】警告 - 符号付き整数式と符号なし整数式の比較
-
[解決済み】'std::cout'への未定義の参照
-
[解決済み] "std::endl" vs "\n"