gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:13:51 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com