0

cout は暗黙的にコピーされますか?

たとえば、以下のコードでオーバーロードされた 2 番目の演算子に渡される cout オブジェクトと、その実装内の cout オブジェクトは同じオブジェクトですか、それとも cout のコピーですか?

<< 演算子は任意の ostream オブジェクトに対して機能するため、最初の実装は正しいと理解しています。たとえば、ファイルに書き込むための ofstream オブジェクトに対して機能します。

//First implementation
ostream& operator<<(ostream& os, const Date& dt)
{
    os << dt.mo << '/' << dt.da << '/' << dt.yr;
    return os;
}

//Second implementation
ostream& operator<<(ostream& os, const Date& dt)
{
    cout << dt.mo << '/' << dt.da << '/' << dt.yr;
    return cout;
}

//using second implementation on object date
cout<<date;
4

2 に答える 2

3

あなたの例は をコピーしませんostream。どこでも参照を使用します。std::coutを見ると、コピー不可であることがわかります ( hereおよびhere )

于 2013-09-12T01:12:10.033 に答える
1

std::istreamオブジェクトはstd::ostreamコピーできません。std::coutostreamオブジェクト (型は から派生) であるためstd::ostream、コピーできません。

于 2013-09-12T12:37:31.813 に答える