問題タブ [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++ - std::endl のオーバーロード処理?
次のようにクラスを定義したいMyStream
:
出力を与える
基本的に、「[何とか]」を先頭に挿入し、終了 std::endl
しないたびに挿入したいですか?
ここでの問題はロジック管理ではなく、 の処理の検出と過負荷ですstd::endl
。これを行うエレガントな方法はありますか?
ありがとう!
編集: ロジック管理に関するアドバイスは必要ありません。の印刷を検出/過負荷にする方法を知る必要がありstd::endl
ます。
c++ - std::endlのアドレスを比較する
既存のコードの一部を調べたところ、Visual C++9とMinGWでコンパイルした場合の動作が異なることがわかりました。
名前が示すように、これはログクラスでありoperator<<()
、ストリームからendlsを削除するためにオーバーロードします。
動作が異なる理由を見つけました。テストp_manip == static_cast...
はMinGWで成功しますが、Visual C++9では失敗します。
- MinGWはキャストを「無視」し、
std::endl
;の実際のアドレスを返します。 - Visual C ++ 9は、実際にはポインタをendlにキャストし、別のアドレスを返します。
テストをに変更しましたif ( p_manip == std::endl )
が、期待どおりに動作するようになりました。
私の質問は:そのような複雑な(そして実際には間違った)テストの背後にある理論的根拠は何ですか?
完全を期すために:
c++ - operator<< をオーバーロードするときのパラメーターとしての C++ ストリーム
独自のロギング クラスを作成し、それをストリームとして使用しようとしています。
これは私が始めたコードです:
しかし、コンパイルしようとすると、operator<< (std::endl を使用する場合) の定義がないというエラーが発生しました。
だから、私はこの種のストリームを受け入れるために operator<< をオーバーロードしようとしましたが、それは私を怒らせています。やり方がわかりません。たとえば、ostream ヘッダー ファイルの std::endl の定義を調べて、このヘッダーを使用して関数を作成しました。
しかし、運がありません。char を直接使用する代わりに、テンプレートを使用して同じことを試しました。また、単純に「const ostream& os」を使用してみましたが、何も試しませんでした。
私を悩ませているもう1つのことは、エラー出力で、operator<<の最初の引数が変更されることです。ポインターへの参照である場合もあれば、二重参照のように見える場合もあります...
c++ - カスタム ストリーム フラッシュ タイプ
ストリームなどの問題について複数の質問がありましたが、少し考えた後、必要なのはカスタム フラッシュ タイプだけであるという結論に達しました。新しい行を取得したときにストリームをフラッシュしたい。std::endl と入力する手間が省けます。これを実装することは可能ですか?カスタム stringbuf で ostream を使用しています。
c++ - XCode 4はendlでcoutステートメントのみを表示します
私のcoutステートメントには本当に奇妙な問題があります。私はこれを XCode 4 でのみ試しました。たとえば、私が書いた場合、
デバッガー コンソールに 3 つの出力ステートメントがすべて表示されます。ただし、順序を変更すると、
最初の 2 つのカウントしか表示されません。さらに奇妙なことに、コードを次のように変更すると、
3 つのステートメントすべてを参照します。
位置を変更したときに、「これはしない」というステートメントが表示されないのはなぜですか?
c++ - C++ iostream endl の大失敗とは?
Andrei Alexandrescu による D プログラミング言語に関する Google トークを聞いていたとき、彼は "endl" の大失敗について 1 つのライナーを吐き出しました。endl は、行の終わりを示し、ストリームのバッファーをフラッシュするための推奨される方法だと思いました。なぜそれが大失敗と見なされるのですか?コードで使用しないでください。
c++ - ストリームバッファ実装の std::endl と '\n' の違い
現在、stringbuf のサブクラスを実装して、バッファーが特定の文字 (私の場合は '\n') をトークン化し、この文字が発生した場合にアクションを実行できるようにしようとしています (メッセージをロガーにダンプし、後でバッファーをクリアします)場合)。この目標を達成するために、sputc ('\n' に注意する機能を実装するため) と xsputn (実際に sputc を使用するため、GCC 実装はデフォルトでこれを行うようには見えないため) をオーバーライドしました。デバッグの目的で、sputc に渡された各文字を stdout に書き出すようにしました。
これが私の質問です。次のようなものを使用する場合
sputc は、std::endl によって導入される必要がある '\n' を除く各文字を受け取るため、'\n' が渡されないため、期待されるアクションは実行されません。次のようなものを使用すると
あるいは
すべてが期待どおりに機能し、私の sputc 実装は '\n' 文字を取得します。
したがって、私の質問は次のとおりです。両方のコード行が背後のstringbufに関してまったく同じことを行うべきではありませんか?そうでない場合、「\ n」を取得するためにオーバーライドする必要がある他のメソッドはどれですか?
c++ - C++ endl と定数
私は、Java から移行する C++ の基本に慣れようとしています。この機能禁欲プログラムを書いたところ、エラーが発生test.cpp:15: error: expected primary-expression before ‘<<’ token
しましたが、その理由がわかりません。
endl
定数を使用しない理由を説明したい人はいますか? コードは以下です。
c++ - endl(cout) と cout << endl の違いを知っている人はいますか?
同じものだと思っていたのですが、オンラインの審査員にコードを送ったら( でendl(cout)
)「不正解」と判定され、もう一度 で送信してみるcout << endl
と、審査員がコードを受け入れてくれました。これらのコマンドの違いを知っている人はいますか?