0

cout 是否曾被隐式复制?

例如,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,您会发现它是不可复制的(此处此处

于 2013-09-12T01:12:10.033 回答
1

std::istream并且std::ostream无法复制对象。因为std::cout是一个ostream对象(它的类型是从 派生的std::ostream),所以它不能被复制。

于 2013-09-12T12:37:31.813 回答