私は多分簡単な質問をしてくれますが、挿入演算子は実際にプログラムで何を意味し、何をしていますか? (例えば、cout <<
/cin >>
)Coutでは "<<" and ">>"とは何を意味していますか?
答えて
オブジェクトの書き込みまたは読み取りを行います。
std::cout << 5; // writes the integer 5 to the standard output
int x;
std::cin >> x; // reads an integer from the standard input
すべての標準タイプでオーバーロードされます。
ほとんどの人は、独自のユーザー定義型のためにそれらを上書きします。
注:演算子の左側は任意のストリーム型(std :: fstreamやstd :: stringstreamなど)でもかまいません。したがって、オブジェクトのシリアル化の一般的なメカニズムになります。
どのようにクラスをオーバーロードするかによって異なります。 std::cout
の場合
、
<<
は、標準出力への書き込みに使用されます。std::cout
の場合、>>
はオーバーロードされません。だからstd::cout >> x
はコンパイルエラーを起こすでしょう。std::cin
の場合、>>
は、標準入力からの読み取りに使用されます。std::cout
の場合、<<
はオーバーロードされません。したがって、std::cin << x
はコンパイルエラーを起こします。カスタムクラスでは、
<<
または>>
、またはその両方をオーバーロードすることができます。また、この関数では好きなことを行うことができます。たとえば、次のコードでは、私は、ベクターに要素を追加するstd::vector<T>
ため<<
をオーバーロード、template<typename T> std::vector<T> & operator<<(std::vector<T> & v, T const & item) { v.push_back(item); return v; }
今、私はこれを書くために、このオーバーロードを使用することができます。
std::vector<int> v; v << 1 << 2 << 3 << 4 << 5; //inserts all integers to the vector!
すべての整数が追加されますベクター!我々のようにそれにすべての項目を印刷する
std::vector<T>
ため>>
をオーバーロードすることができ、同様にhttp://ideone.com/TsqtS:オンラインデモを参照してください
template<typename T> std::vector<T> & operator>>(std::vector<T> & v, std::ostream & out) { for(size_t i = 0 ; i < v.size(); i++) std::cout << v[i] << std::endl; return v; }
そして今、我々はとしてベクトルを印刷することができます。
v >> std::cout; //crazy!
オンラインデモ:http://ideone.com/BVSm7
重要な点は、これらの演算子を任意の方法でオーバーロードできることです。過負荷とその使い方がどのように狂っているのか、まともであるかはあなた次第です。たとえば、私が推測するように、構文v >> std::cout
はほとんどのプログラマーにとって狂っているように見えます。より良い、おそらくまともな過負荷がstd::ostream
としてのために次のようになります。
template<typename T>
std::ostream & operator << (std::ostream & out, const std::vector<T> & v)
{
for(size_t i = 0 ; i < v.size(); i++)
out << v[i] << std::endl;
return out;
}
は今、あなたがこれを書くことができます。
std::cout << v << std::endl; //looks sane!
デモ:彼らは多くの場合、過負荷状態とストリームに使用されているhttp://ideone.com/jce2R
。 < <は実際にはレフトシフト演算子です。 >>実際は右シフト演算子です。
ビットシフト演算子です(<<
は左シフト、>>
は右シフト)。また、通常、ストリーミングオペレータ(<<
はストリームアウト、>>
ストリームを意味します) - 左側のストリームタイプ(たとえばstd::ostream
またはstd::istream
)と右側の他のタイプのストリームがオーバーロードされます。
< <と>>は単純演算子で、+、 - 、=、==、+ =、/ =などと同様に、ドリルを取得します。つまり、使用するオブジェクト/構造によって異なります。 coutとcinの場合、これらは読み取り/書き込み演算子ですが、オペレータに過負荷をかけて完全に異なる処理を行う可能性があります。
ここでは誰もこれを行うべきではありませんが、この演算子でmyclassオブジェクトを使用すると、これが追加になります。だから、あなたが見ることができます: "< <"または ">>"で何をするかは、オペレータがどのように過負荷になっているかによって決まります。
- 1. @@ FETCH_STATUS <> - 1 AND @@ FETCH_STATUS <> - 2は何を意味しますか?
- 2. Pythonで `<-`, `>-`、 `<+`, `> +`とは何を意味していますか?
- 3. <++>はgvimで何を意味していますか?
- 4. <E>は、コレクション<E>の意味は何ですか?
- 5. << or > >>とはJavaの意味ですか?
- 6. <?..?>はXMLで何を意味していますか?
- 7. <tag/>はXMLで何を意味していますか?
- 8. <a:theme>はOpenXMLで何を意味していますか?
- 9. ReactClass <*>は何を意味していますか?
- 10. 辞書<string, />は何を意味していますか?
- 11. MSILのシンボル<>は何を意味していますか?
- 12. 記号<>は何を意味していますか?
- 13. << and >>演算子は何をしますか?
- 14. reinterpret_cast <char *>(&st)と(-1)* static_cast <int>の意味は何ですか?
- 15. "Box <Fn()+ Send + 'static>"とは何を意味しますか?
- 16. requirements.txtでは、ティルダは(〜=)と何を意味しますか?</p> <pre><code>mock-django~=0.6.10 </code></pre> <p><code>~=</code>はどういう意味:私は使用していますPythonライブラリのための<code>requirements.txt</code>で
- 17. オブジェクト<String>はJavaで何を意味しますか?
- 18. cout << coutとcout <<とcoutの違いは何ですか?
- 19. TensorFlowで「可変」とはどういう意味ですか?</p> <blockquote> <p>tf.get_variable既存の変数が</p> </blockquote> <p>まさにそれが何を意味してグラフから取得します:
- 20. [オブジェクトオブジェクト]は何を意味していますか?</p> <pre><code>[object Object] </code></pre> <p>が、これは正確に何を意味して:(JavaScriptの)私のアラートの
- 21. エリクシールではこれらの演算子は何を意味していますか? 〜>>、<<〜
- 22. >>の意味、<<、| JavaScriptで&nbsp;
- 23. 「QVector <QVector <QVector<T> >> vector」の意味は?
- 24. Assert.fail(node.js):Operatorパラメータは何を意味しますか?</p> <pre><code>assert.fail(actual, expected, message, operator) </code></pre> <p><code>operator</code>はどういう意味:
- 25. <int(int)>は、関数テンプレートでは何を意味していますか?
- 26. 「インポート<XYZ/XYZ.h>」は何を意味しますか
- 27. ジェネリックス<?>は実際に何を意味しますか?
- 28. <?>は何を意味しますか?
- 29. "<>"演算子は何を意味しますか?
- 30. Intellijソースコードのこの注釈は何を意味していますか?</p> <pre><code>void m() { <selection><caret>System.out.println("");</selection> } </code></pre> <p>この<code><selection></code>注釈はどういう意味:
演算子のオーバーロードは、評判が十分に悪いです。その虐待を奨励しない。ストリーミングのためのその使用は十分に確立されています、上記はちょうどメンテナを混乱させるでしょう(それは正常からの拍動であるので)。 –
@LokiAstari:この虐待はどうですか?ストリーミングの使用方法に精通している人なら、上記のコードが何をしているのかを理解する必要があります。ほとんどのQtコンテナはそのように動作し、コードの保守や読み込みが容易になるため、多くのQtコンテナが使用されます。 – pezcode
@ LokiAstari:私は知っています。それは私が私のポストで説明しているもので、さまざまな種類のオーバーロードがあります。 – Nawaz