C++流插入运算符的返回类型是否需要是std::ostream
Does the return type of the C++ stream insertion operator need to be an std::ostream?
以下包含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&)
可接受的参数,因此会出现编译错误。
相关文章:
- boost::interprocess::file_lock 与 std::ostream 一起使用时的错误行为
- 与'operator<<'不匹配(操作数类型'std::ostream {aka std::basic_ostream<char>}'
- 与"operator<<"不匹配(操作数类型'std::ostream'
- 运算符的歧义错误<<自定义 std::ostream 子类中的重载
- 关于 std::ostream 构造函数
- STD :: Ostream忽略了通过setf()在基础上设置的十六进制标志
- 将 std::ostream 转换为 std::string
- STD :: Ostream:类是不可接受的[C ]
- 为什么在三元运算符中使用STD :: Ostream不会编译
- 当我编译引用 std::ostream 时,我有一个奇怪的错误弹出
- 如何跟踪写入std :: Ostream对象的字节数
- std::ostream的下降表达(针对SFINAE)
- BOOST ::变体无法解决运算符&lt;&lt;对于STD :: Ostream
- 我什么时候应该返回 std::ostream
- 如何移动std::ostream
- 如何在自定义 std::ostream 类中使用 std::endl
- 如何清除std::ostream
- 返回对此的引用时出现意外的std::ostream输出
- std::ostream to QDataStream
- 使用 std::ostream 方法将格式化文本输出到 std::string 对象