私は良いC++の本を持っていません。一般的な印刷機能
これはどのように機能しますか?概念的にここで何が起こっているのですか?技術的には、オペレータのプロトタイプは< <()があらかじめ定義されていますが、これはどのように書き込むのですか?< <は出力コンテナの値にオーバーロードされますか?
私はoperator<<()
を見て、それをオーバーロードすることができますか?
また入力には開始と終了の "place"が必要ですc.begin()
、c.end()
...しかし出力のためには "place"が1つ必要ですostream_iterator
。これは少し非対称のようです。
template <typename Container>
std::ostream& operator<<(std::ostream& os, const Container& c)
{
std::copy(c.begin(), c.end(),
std::ostream_iterator<typename Container::value_type>(os, " "));
return os;
}
さまざまな演算子に使用できるプロトタイプを意味しますか?見て[ここ](http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B)。 –
私はこれを[オペレータがFAQ項目をオーバーロードする](http://stackoverflow.com/questions/4421706/operator-overloading)の欺瞞としてクローズすることに投票しましたが、これは疑問ですオペレータのオーバーロードがどのように機能するかだけではありません。よく分かりません。 – sbi
これは常に同じ演算子で、異なる型、特に 'std :: ostream&'(または別の型のストリーム)を左のオペランドとしてオーバーロードするだけです。この場合、チェーンを許可するためにオペレーターに渡された同じストリームへの参照を戻すように注意する必要があります。 –