c++ - C++ 流插入运算符的返回类型是否必须是 std::ostream?

标签 c++ operator-overloading ostream

以下code包含 operator<< 的重载在 MSVC 2008 和 gcc 4.6.3 上编译。合法吗?

#include <iostream>

struct Foo
{
    friend Foo operator<<( std::ostream& stream , Foo& foo );
    Foo operator<<( std::ostream& stream )
    {
        return *this;
    }
};

Foo operator<<( std::ostream& stream , Foo& foo )
{
    return foo;
}

int main()
{
}

最佳答案

是的,重载 operator<< 是完全合法的在改变返回类型时 - 对于将您的类型与其他类型一起流式传输到 C++ 流的常见用途,它无法正常工作。

举个例子...

Foo my_foo;
std::cout << my_foo << '\n';

...将尝试评估...

operator<<(std::cout, my_foo).operator<<(std::ostream& ??? '\n' ???)

...'\n'不是 Foo::operator<<(std::ostream&) 可接受的参数,所以你会得到一个编译错误。

关于c++ - C++ 流插入运算符的返回类型是否必须是 std::ostream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31115091/

相关文章:

c++ - 在 C++ 中使用 extern "C"时我到底失去了什么?

c++ - 如何使用IOStream存储格式设置?

c++ - ostream_iterator operator= 在 pair<int,int> 上失败,但在包装类上有效。我不能为 pair<> 重载 operator<< 吗?

c++ - std::chrono::duration 缺乏即时滴答计数操作的原因是什么?

c++ - 指向数据结构成员的指针

c++ - 我可以直接在我的对象上调用重载的括号吗?

c++ - std::sort 中的二进制表达式错误(缺少 const)无效操作数:为什么指定比较运算符可以解决这个问题?

c++ - 子对象上的 ostream 获取其父对象的 ostream

c++ - SendMessage 到 C++ 中的 TextBox Window Child 不起作用

c++ - 如何重载逗号运算符以将值分配给数组