以下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/