以下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()
{
}
答案 0 :(得分:5)
是的,在改变返回类型时重载operator<<
是完全合法的 - 它只是不能正常使用将您的类型与其他类型一起流式传输到C ++流。
作为一个例子......
Foo my_foo;
std::cout << my_foo << '\n';
......将进行评估...
operator<<(std::cout, my_foo).operator<<(std::ostream& ??? '\n' ???)
... '\n'
不是Foo::operator<<(std::ostream&)
的可接受参数,因此您将收到编译错误。