問題タブ [endl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - endl マニピュレータはどこで定義されていますか
endl
これがマニピュレータであり、内部的'\n'
にバッファに配置され、バッファがフラッシュされることがわかっています。どこでendl
定義されていますか?は何ですかendl
、それはマクロですか、関数ですか、それとも変数ですか、それともクラスですか、それともオブジェクトですか? endl
独自のマニピュレータを定義するにはどうすればよいですか?
c++ - __LINE__ マクロなどをサポートする C++ スタイルのロガー
のように使用できるロガーを作成したいのですが、日付、時刻、、、std::cout
などの追加データをログに記録して、ファイルに自動的に保存する必要があります。__LINE__
__func__
__FILE__
例
期待される出力
不十分な解決策
これを行うには__LINE__
、ロガーを呼び出す行に direct などのマクロを配置する必要があります。そうしないと、マクロが正しく機能しません。std::endl
この黒魔術を次のように実行するマクロに置き換えることができることがわかりました。
このマクロlogendl
は、クラスの静的変数を使用してToolLogger
、 の値を保存し、__LINE__
後で必要に__func__
なり__FILE__
ます。したがって、実際にロガーを使用すると、次のようになります。
クラスでは、これを機能させるために をオーバーロードするoperator<<
必要があり、そのうちの 2 つが必要です。std::string
1 つはまたはのような通常の値を取得するためのもので、もう 1 つはマニピュレータint
を取得するためのものです。std::endl
私のクラスで最も重要なことは次のとおりです。
問題
このソリューションの問題は、ロガーを次の 2 つの方法で使用できることです。
実際には、マニピュレータoperator<<
を取るクラスからを削除し、std::endl
別の方法で解決する必要がありますが、どうすればよいですか? マクロで他のカスタム マニピュレータに変更することを考えてstd::endl
いました。logendl
このカスタム マニピュレータは、実際に を行っている作業を行いますが、そのoperator<<
方法がわかりません。他の解決策を探していますが、何か提案はありますか?
python - C++ 出力ストリームが endl でフラッシュされず、実行が停止する
cout
複数のステートメントを含む C++ プログラムがあります。それらのすべてが . で終わることを確認しましたendl
。私の問題は、ユーザーが Enter キーを押すまでプログラムがほとんど停止しないことです (そのため、出力バッファーが常にフラッシュされるとは限りません)。Enter キーを押すと、プログラムの実行が再開されます。私のプログラムの実行には数時間かかるので、これはかなり問題です。プログラムは 1 分後に停止することもあれば、1 時間以上後に停止することもあります。
小さなコード スニペットを次に示します。
私は埋め込み Python を介して Theano を使用しており、私の Python コードには print ステートメントも含まれていることに注意してください。私のPythonコードはsys.stdout.flush()
、各印刷の後ではなく、印刷のみを呼び出します。ただし、Python で生成された print ステートメントの後でプログラムの実行がハングすることはまれです。明らかな何かを見逃しましたか?sys.stdout.flush()
Python コードでを呼び出す必要がありますか? 残念ながら、私のプログラムは数十のクラスで構成されているため、これ以上のコードを提供することはできません。
[編集] ハングしているときにプログラムをデバッガーで一時停止しましたが、表示できるソースがありませんでした。コール スタックは次のとおりです。
スレッドが待機しているようです。ただし、これらのスレッドを自分で設定したことはありません。それらは、Cuda または私が使用している Havok 物理エンジンによって生成されました。調査します。
c++ - シンボル endl と cout を解決できませんでした
私は読んでいる本からこのコードを書きましたが、私のコンパイラはシンボル cout と endl を解決できないと警告しています。何故ですか。
c++ - C++ cout.endl() はバッファをクリアし、cout.flush() はしません
問題は私が使用しているIDEにありました-CLion 1.2.4は、独自の出力ウィンドウ内で誤った出力を提供しますが、解決されました。
次のコードは、次のように、〜1000より大きいベクトルを操作するときに繰り返し出力を提供します。
bubblebubble0.265596bubble0.2655960.171889bubble0.2655960.1718890.265644 shell000
すべての出力の後に endl を呼び出すと、すべて問題ないように見えます。
バブル
0
0.015626
0.015628
シェル
0
0
0
しかし、.flush() でバッファをクリアしようとすると、同じ繰り返し出力が得られます。
c++ - GNU g++ 4.9.2 での endl コンパイルの問題のオーバーロード
GNU g++ 4.9.2 を使用しているときに、次のコード スニペットのコンパイルに問題があります (g++ 2.95.3 で正常にコンパイルするために使用されます)。
エラーは次のとおりです。
ガイド/ヘルプしてください。
c++ - 専用の非テンプレート関数が実装されていますが、std::endl はオーバーロードされた operator<< で動作しません
Logging::Logger
次の機能を持つクラスがあります。
そして、次のコード:
すべての演算子が実装されているように見えますが、次のエラーが発生します。
エラー C2678: バイナリ '<<': タイプ 'const Logging::Logger' の左側のオペランドを取る演算子が見つかりません (または、受け入れ可能な変換がありません)
もちろん、すべてが機能しているわけではありませんendl
。
私は次の答えを見ました:
operator<< をオーバーロードするとき、std::endl は不明な型です
私は何が欠けていますか?
c++ - std::flush がない場合、セグメンテーション違反が発生します
この質問には、すでにいくつかのアプローチがあります。¹ ² ³
でもこれは全然違う!行をコメントアウトするstd::flush
とセグメンテーションフォルトが発生しますが、この行を追加するとセグメンテーションフォルトは発生しません!
また、試しgdb
ました。この関数をROSでこのデバッグ手法と-g オプションでコンパイルして使用していますが、関数名が出力されません。
- 探して
LENGTH_INDEX
、stm_buf_t[]
大丈夫です。
そしてまた; std::cout << std::flush;
この関数の呼び出しがある別の場所から呼び出すと、Segfault も処理されます。
私の次のアプローチは何ですか?