c++ - cout 对象是否仍然是单个实例,即它永远不会被复制?

标签 c++ operator-overloading iostream cout

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;

最佳答案

您的示例没有复制任何ostream,您在任何地方都使用引用。如果你看std::cout你可以看到它是不可复制的(herehere)

关于c++ - cout 对象是否仍然是单个实例,即它永远不会被复制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18753706/

相关文章:

C++ 结构指针段错误

C++::global 运算符重载问题

c++ - 像 iostream 这样的大型包含文件是否有效? (C++)

c++ - 如何在 boost::unique_lock<boost::mutex> 上尝试锁定

c++ - 将 std::transform 与 std::back_inserter 一起使用是否有效?

c++ - Boost::bind 与对象占位符

java - 标记和预读限制

c++ - 隐式转换为数组索引类型

c++ - 定义 []= 运算符

c++ - 链接提取和插入、包围