>>和<<运算符重载

Ear*_*rlz 3 c++ operator-overloading

我刚刚为我的编程课做了一个测验,并且错误地提出了这个问题:

重载操作符的函数的返回类型<<必须是对ostream对象的引用.

这对我来说似乎不对.当然,C++比这更开放.但我还以为我会在这里问.这是对的(或错的)怎么样?当涉及到运算符重载时,我的C++知识开始真正消失.

Tha*_*tos 16

C++不要求返回类型是ostream对象的引用.但是,如果您尝试执行以下操作:

cout << instance_of_custom_type << 3 << "hi" << endl;
Run Code Online (Sandbox Code Playgroud)

然后你需要:

ostream &operator << (ostream &os, custom_type &t);
Run Code Online (Sandbox Code Playgroud)

但是,如果您正在执行类似写入大整数类型的操作并希望支持位移,则可能类似于:

BigInt operator << (const BigInt &i, unsigned int shift);
Run Code Online (Sandbox Code Playgroud)

为了进一步扩展这一点,<<运算符的最初用途是用于位移.1 << 8例如,是256.C++为此添加了一个(略微令人困惑的)第二次使用,并将其重载ostream以表示对流的"输出".你可以在一个重载的运算符中做任何你喜欢的事情 - 它就像一个函数一样工作,但是,运算符有人类期望与它们相关:程序员期望在C++中,它<<是位移或流输出.